L'integrazione tra Secret Manager e Google Kubernetes Engine (GKE) consente di archiviare dati sensibili come password e certificati utilizzati dai cluster GKE come secret in Secret Manager.
Questa pagina spiega come utilizzare il componente aggiuntivo Secret Manager per accedere ai secret archiviati in Secret Manager come volumi montati nei pod Kubernetes.
Questa procedura prevede i seguenti passaggi:
- Abilita il componente aggiuntivo Secret Manager su un cluster GKE nuovo o esistente.
- Configura le applicazioni per autenticarsi all'API Secret Manager.
- Definisci i secret da montare sui pod Kubernetes utilizzando un file YAML
SecretProviderClass
. - Crea un volume in cui verranno montati i secret. Una volta collegato il volume, le applicazioni nel container possono accedere ai dati nel file system del container.
Il componente aggiuntivo Secret Manager è derivato dal driver CSI Secrets Store di Kubernetes open source e dal provider Google Secret Manager. Se utilizzi il driver CSI Secrets Store open source per accedere ai secret, puoi eseguire la migrazione al componente aggiuntivo Secret Manager. Per informazioni, consulta la sezione Eseguire la migrazione dal driver CSI Secrets Store esistente.
Vantaggi
Il componente aggiuntivo Secret Manager offre i seguenti vantaggi:
- Puoi utilizzare una soluzione completamente gestita e supportata per accedere ai secret di Secret Manager da GKE senza alcun sovraccarico operativo.
- Non devi scrivere codice personalizzato per accedere ai secret archiviati in Secret Manager.
- Puoi archiviare e gestire tutti i tuoi secret in modo centralizzato in Secret Manager e accedere in modo selettivo ai secret dai pod GKE utilizzando il plug-in Secret Manager. In questo modo, puoi utilizzare le funzionalità offerte da Secret Manager, come la crittografia CMEK, il controllo dell'accesso granulare, la rotazione gestita, la gestione del ciclo di vita e gli audit log, nonché le funzionalità di Kubernetes come il passaggio dei secret ai contenitori sotto forma di volumi montati.
- Il componente aggiuntivo Secret Manager è supportato sia nei cluster standard che nei cluster Autopilot.
- Il componente aggiuntivo Secret Manager supporta i nodi che utilizzano Container-Optimized OS o immagini dei nodi Ubuntu.
Limitazioni
Il componente aggiuntivo Secret Manager presenta le seguenti limitazioni:
Il componente aggiuntivo Secret Manager non supporta le seguenti funzionalità disponibili nel driver CSI Secrets Store open source:
Il componente aggiuntivo Secret Manager non supporta i nodi Windows Server.
Prima di iniziare
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza l'interfaccia alla gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo il comando
gcloud components update
.Non puoi configurare manualmente il componente aggiuntivo Secret Manager utilizzando Google Cloud SDK o la console Google Cloud.
Assicurati che il cluster esegua GKE 1.27.14-gke.1042001 o versioni successive con un'immagine del nodo Linux.
Se utilizzi un cluster GKE Standard, assicurati che nel cluster sia abilitata la federazione delle identità per i carichi di lavoro per GKE. Workload Identity Federation for GKE è abilitato per impostazione predefinita in un cluster Autopilot. I pod Kubernetes utilizzano la federazione delle identità per i carichi di lavoro per GKE per autenticarsi nell'API Secret Manager.
Attiva il componente aggiuntivo Secret Manager
Puoi attivare il componente aggiuntivo Secret Manager sia sui cluster standard sia su quelli Autopilot.
Abilita il componente aggiuntivo Secret Manager in un nuovo cluster GKE
Per attivare il componente aggiuntivo Secret Manager durante la creazione del cluster, procedi nel seguente modo:
Console
-
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_boxCrea.
Nella finestra di dialogo Crea cluster, fai clic su Configura.
Nel menu di navigazione, fai clic su Sicurezza nella sezione Cluster.
Seleziona la casella di controllo Attiva Secret Manager.
Seleziona la casella di controllo Abilita Workload Identity.
Continua a configurare il cluster, quindi fai clic su Crea.
gcloud
{ Standard cluster}
Per attivare il componente aggiuntivo Secret Manager in un nuovo cluster standard, esegui il seguente comando:
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- CLUSTER_NAME: il nome del tuo cluster.
- LOCATION: la regione Compute Engine per il cluster, ad esempio
us-central1
. - VERSION: la versione specifica di GKE che
vuoi utilizzare. Assicurati che il cluster esegua GKE versione
1.27.14-gke.1042001 o successive. Se il canale di rilascio predefinito non include questa versione, utilizza il flag
--release-channel
per scegliere un canale di rilascio che la includa. - PROJECT_ID: l'ID del tuo progetto Google Cloud.
Esegui il seguente comando:
Linux, macOS o Cloud Shell
gcloud container clusters create CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \ --cluster-version=VERSION \ --workload-pool=PROJECT_ID.svc.id.goog
Windows (PowerShell)
gcloud container clusters create CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION ` --cluster-version=VERSION ` --workload-pool=PROJECT_ID.svc.id.goog
Windows (cmd.exe)
gcloud container clusters create CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^ --cluster-version=VERSION ^ --workload-pool=PROJECT_ID.svc.id.goog
{ Autopilot cluster}
Per attivare il componente aggiuntivo Secret Manager su un nuovo cluster Autopilot, esegui il seguente comando:
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- CLUSTER_NAME: il nome del tuo cluster.
- VERSION: la versione specifica di GKE che vuoi utilizzare. Assicurati che il cluster esegua GKE versione 1.27.14-gke.1042001 o successive. Per impostare una versione specifica, consulta Impostare la versione e il canale di rilascio di un nuovo cluster Autopilot.
- LOCATION: la regione Compute Engine per il cluster, ad esempio
us-central1
.
Esegui il seguente comando:
Linux, macOS o Cloud Shell
gcloud container clusters create-auto CLUSTER_NAME \ --enable-secret-manager \ --cluster-version=VERSION \ --location=LOCATION
Windows (PowerShell)
gcloud container clusters create-auto CLUSTER_NAME ` --enable-secret-manager ` --cluster-version=VERSION ` --location=LOCATION
Windows (cmd.exe)
gcloud container clusters create-auto CLUSTER_NAME ^ --enable-secret-manager ^ --cluster-version=VERSION ^ --location=LOCATION
Dopo aver attivato il componente aggiuntivo Secret Manager, puoi utilizzare il driver CSI Secrets Store nei volumi Kubernetes utilizzando il nome del driver e del provisioning: secrets-store-gke.csi.k8s.io
.
Attivare il componente aggiuntivo Secret Manager in un cluster GKE esistente
Per attivare il componente aggiuntivo Secret Manager in un cluster esistente:
Console
-
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Nella pagina dei dettagli del cluster, fai clic su
Secret Manager nella sezione Sicurezza.Nella finestra di dialogo Modifica Secret Manager, seleziona la casella di controllo Abilita Secret Manager.
Fai clic su Salva modifiche.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- CLUSTER_NAME: il nome del cluster
- LOCATION: la regione Compute Engine per il cluster, ad esempio
us-central1
Esegui il seguente comando:
Linux, macOS o Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^
Verifica l'installazione del componente aggiuntivo Secret Manager
Per verificare che il componente aggiuntivo Secret Manager sia installato nel cluster Kubernetes, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 1
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del clusterLOCATION
: la posizione del tuo cluster, ad esempious-central1
Configurare le applicazioni per l'autenticazione all'API Secret Manager
Il provider Google Secret Manager utilizza l'identità del carico di lavoro del pod su cui è montato un segreto durante l'autenticazione all'API Secret Manager. Per consentire alle applicazioni di autenticarsi all'API Secret Manager utilizzando la federazione delle identità per i carichi di lavoro per GKE, segui questi passaggi:
Crea un nuovo account di servizio Kubernetes o utilizza un account di servizio Kubernetes esistente nello stesso spazio dei nomi del pod su cui vuoi montare il secret.
Crea un criterio di autorizzazione Identity and Access Management (IAM) per il secret in Secret Manager.
I pod che utilizzano l'account di servizio Kubernetes configurato si autenticano automaticamente come identificatore principale IAM corrispondente all'account di servizio Kubernetes quando accedono all'API Secret Manager.
Crea un nuovo account di servizio Kubernetes
Salva il seguente manifest come
service-account.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE
Sostituisci quanto segue:
KSA_NAME
: il nome del nuovo account di servizio KubernetesNAMESPACE
: il nome dello spazio dei nomi Kubernetes per il service account
Applica il manifest:
kubectl apply -f service-account.yaml
Crea un criterio di autorizzazione IAM che faccia riferimento al nuovo account di servizio Kubernetes e concedigli l'autorizzazione per accedere al secret:
gcloud secrets add-iam-policy-binding SECRET_NAME \ --role=roles/secretmanager.secretAccessor \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Sostituisci quanto segue:
SECRET_NAME
: il nome del secret in Secret ManagerPROJECT_NUMBER
: il numero numerico del tuo progetto Google CloudPROJECT_ID
: l'ID del progetto Google Cloud contenente il cluster GKENAMESPACE
: il nome dello spazio dei nomi Kubernetes per il service accountKSA_NAME
: il nome del tuo service account Kubernetes esistente
Utilizza un account di servizio Kubernetes esistente
Crea un criterio di autorizzazione IAM che faccia riferimento all'account di servizio Kubernetes esistente e concedigli l'autorizzazione per accedere al segreto:
gcloud secrets add-iam-policy-binding SECRET_NAME \
--role=roles/secretmanager.secretAccessor \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Sostituisci quanto segue:
SECRET_NAME
: il nome del secret in Secret ManagerPROJECT_NUMBER
: il numero numerico del tuo progetto Google CloudPROJECT_ID
: l'ID del progetto Google Cloud contenente il cluster GKENAMESPACE
: il nome dello spazio dei nomi Kubernetes per il service accountKSA_NAME
: il nome del tuo service account Kubernetes esistente
Definisci i secret da montare
Per specificare quali secret montare come file nel pod Kubernetes, crea un manifest YAMLSecretProviderClass
e elenca i secret da montare e il nome file con cui montarli. Segui questi passaggi:
Salva il seguente manifest come
app-secrets.yaml
:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: SECRET_PROVIDER_CLASS_NAME spec: provider: gke parameters: secrets: | - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION" path: "FILENAME.txt"
Sostituisci quanto segue:
SECRET_PROVIDER_CLASS_NAME
: il nome dell'oggettoSecretProviderClass
.PROJECT_ID
: il tuo ID progetto.SECRET_NAME
: il nome del secret.SECRET_VERSION
: la versione del secret.FILENAME.txt
: il nome del file in cui verrà montato il valore del secret. Puoi creare più file utilizzando le variabiliresourceName
epath
.
Applica il manifest:
kubectl apply -f app-secrets.yaml
Verifica che l'oggetto
SecretProviderClass
sia stato creato:kubectl get SecretProviderClasses
Configura un volume in cui verranno montati i secret
Salva la seguente configurazione come
my-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: POD_NAME namespace: NAMESPACE spec: serviceAccountName: KSA_NAME containers: - image: IMAGE_NAME imagePullPolicy: IfNotPresent name: POD_NAME resources: requests: cpu: 100m stdin: true stdinOnce: true terminationMessagePath: /dev/termination-log terminationMessagePolicy: File tty: true volumeMounts: - mountPath: "/var/secrets" name: mysecret volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: SECRET_PROVIDER_CLASS_NAME
Sostituisci quanto segue:
POD_NAME
: il nome del pod Kubernetes in cui è montato il secretNAMESPACE
: il nome dello spazio dei nomi Kubernetes per il service accountKSA_NAME
: il servizio account Kubernetes che hai configurato nel passaggio Configurare le applicazioni per l'autenticazione all'API Secret ManagerIMAGE_NAME
: il nome dell'immagine del contenitoreSECRET_PROVIDER_CLASS_NAME
: il nome dell'oggettoSecretProviderClass
Solo nei cluster standard, aggiungi quanto segue al campo
template.spec
per posizionare i pod nei pool di nodi che utilizzano la federazione delle identità per i carichi di lavoro per GKE.Salta questo passaggio nei cluster Autopilot, che rifiutano questo nodeSelector perché ogni nodo utilizza Workload Identity Federation per GKE.
spec: nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
Applica la configurazione al cluster.
kubectl apply -f my-pod.yaml
Questo passaggio monta un volume mysecret
in /var/secrets
utilizzando il driver CSI
(secrets-store-gke.csi.k8s.io). Questo volume fa riferimento all'oggetto SecretProviderClass
che funge da fornitore.
Esegui la migrazione dal driver CSI Secrets Store esistente
Se esegui la migrazione al componente aggiuntivo Secret Manager dalla tua installazione esistente del driver CSI Secrets Store, aggiorna il file manifest del pod come segue:
Aggiorna il nome del
SecretProviderClass
e delprovider
come descritto nel seguente manifest:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: app-secrets-gke spec: provider: gke parameters: secrets: | - resourceName: "projects/<project_id>/secrets/<secret_name>/versions/<secret_version>" path: "good1.txt"
Aggiorna
driver
esecretProviderClass
per il volume Kubernetes come descritto nel seguente manifest:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
Disattiva il componente aggiuntivo Secret Manager
Per disattivare il componente aggiuntivo Secret Manager su un cluster standard esistente o su un cluster Autopilot, esegui il seguente comando:
Console
-
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Nella pagina dei dettagli del cluster, nella sezione Sicurezza, fai clic su
Secret Manager.Nella finestra di dialogo Modifica Secret Manager, deseleziona la casella di controllo Abilita Secret Manager.
Fai clic su Salva modifiche.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- CLUSTER_NAME: il nome del cluster
- REGION: la regione Compute Engine per il cluster, ad esempio
us-central1
Esegui il seguente comando:
Linux, macOS o Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --no-enable-secret-manager \ --region=REGION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --no-enable-secret-manager ` --region=REGION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --no-enable-secret-manager ^ --region=REGION ^