Utilizzare il componente aggiuntivo Secret Manager con Google Kubernetes Engine

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.

Questo processo prevede i seguenti passaggi:

  1. Attiva il componente aggiuntivo Secret Manager su un cluster GKE nuovo o esistente.
  2. Configura le applicazioni per l'autenticazione all'API Secret Manager.
  3. Definisci i secret da montare sui pod Kubernetes utilizzando un file YAML SecretProviderClass. Il componente aggiuntivo Secret Manager supporta sia i secret globali che quelli regionali.
  4. 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 deriva dal driver CSI di Kubernetes Secrets Store 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 pagina 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 overhead operativo.
  • Non devi scrivere codice personalizzato per accedere ai secret archiviati in Secret Manager.
  • Puoi archiviare e gestire tutti i tuoi secret centralmente in Secret Manager e accedere selettivamente ai secret dai pod GKE utilizzando il componente aggiuntivo Secret Manager. In questo modo, puoi utilizzare le funzionalità offerte da Secret Manager, come la crittografia CMEK, ilcontrollo dell'accessoo granulare, la rotazione gestita, la gestione del ciclo di vita e i log di controllo, oltre a utilizzare le funzionalità di Kubernetes, come il passaggio dei secret ai container sotto forma di volumi montati.
  • Il componente aggiuntivo Secret Manager è supportato sia sui cluster Standard che sui cluster Autopilot.
  • Il componente aggiuntivo Secret Manager supporta i nodi che utilizzano immagini del nodo Container-Optimized OS o Ubuntu.

Limitazioni

Il componente aggiuntivo Secret Manager presenta le seguenti limitazioni:

  • Il componente aggiuntivo Secret Manager non supporta la seguente funzionalità disponibile 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.

    Enable the APIs

  • Se vuoi utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione 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 versione 1.27.14-gke.1042001 o successive con un'immagine del nodo Linux.

  • Se utilizzi un cluster GKE Standard, assicurati che la federazione delle identità per i carichi di lavoro per GKE sia abilitata. Workload Identity Federation for GKE è abilitata per impostazione predefinita in un cluster Autopilot. I pod Kubernetes utilizzano la federazione delle identità per i carichi di lavoro per GKE per l'autenticazione all'API Secret Manager.

Abilita il componente aggiuntivo Secret Manager

Puoi abilitare il componente aggiuntivo Secret Manager sia sui cluster Standard sia sui cluster Autopilot.

Abilita il componente aggiuntivo Secret Manager su un nuovo cluster GKE

Per abilitare il componente aggiuntivo Secret Manager durante la creazione del cluster:

Console

  1. Nella console Google Cloud , vai alla pagina Google Kubernetes Engine.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Nella finestra di dialogo Crea cluster, fai clic su Configura.

  4. Nel menu di navigazione, nella sezione Cluster, fai clic su Sicurezza.

  5. Seleziona la casella di controllo Abilita Secret Manager.

  6. Seleziona la casella di controllo Abilita Workload Identity.

  7. Continua a configurare il cluster, quindi fai clic su Crea.

gcloud

{ Standard cluster}

Per abilitare il componente aggiuntivo Secret Manager su un nuovo cluster Standard, esegui questo 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 di 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 Google Cloud progetto.

Esegui questo 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 abilitare il componente aggiuntivo Secret Manager su un nuovo cluster Autopilot, esegui questo comando:

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

Esegui questo 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 provisioner: secrets-store-gke.csi.k8s.io.

Abilita il componente aggiuntivo Secret Manager su un cluster GKE esistente

Per abilitare il componente aggiuntivo Secret Manager su un cluster esistente, procedi nel seguente modo:

Console

  1. Nella console Google Cloud , vai alla pagina Google Kubernetes Engine.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Nella pagina dei dettagli del cluster, nella sezione Sicurezza, fai clic su Secret Manager.

  4. Nella finestra di dialogo Modifica Secret Manager, seleziona la casella di controllo Abilita Secret Manager.

  5. 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 tuo cluster
  • LOCATION: la regione di Compute Engine per il cluster, ad esempio us-central1

Esegui questo 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 ^

Configurare la rotazione automatica dei secret

Puoi configurare il componente aggiuntivo Secret Manager in modo che ruoti automaticamente i secret, in modo che quelli aggiornati in Secret Manager dopo il deployment iniziale del pod vengano inviati automaticamente e periodicamente al pod. La rotazione automatica dei secret montati consente alle applicazioni di ricevere automaticamente i secret aggiornati senza richiedere un riavvio o un intervento manuale. Questa funzionalità garantisce che le applicazioni utilizzino sempre i segreti più aggiornati.

Tieni presente quanto segue in merito alla configurazione della rotazione automatica dei secret:

  • La rotazione automatica dei secret è una configurazione facoltativa.
  • Puoi configurare questa funzionalità al momento della creazione di un nuovo cluster o dell'aggiornamento di un cluster esistente.
  • La rotazione automatica dei secret è supportata in GKE versione 1.32.2-gke.1059000 o successive.

Per configurare la rotazione automatica dei secret, devi attivare la funzionalità enable-secret-manager-rotation e configurare l'intervallo di rotazione impostando secret-manager-rotation-interval.

Ad esempio, per configurare la rotazione automatica su un cluster GKE esistente, utilizza il seguente comando:

  gcloud beta container clusters update CLUSTER_NAME \
      --enable-secret-manager \
      --location=LOCATION \
      --enable-secret-manager-rotation \
      --secret-manager-rotation-interval=ROTATION_INTERVAL

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la posizione del cluster, ad esempio us-central1
  • ROTATION_INTERVAL: l'intervallo di rotazione in secondi. L'intervallo di rotazione predefinito è 120 secondi.

Verifica l'installazione del componente aggiuntivo Secret Manager

Per verificare che il componente aggiuntivo Secret Manager sia installato sul cluster Kubernetes, esegui questo comando:

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la posizione del cluster, ad esempio us-central1

Configurare le applicazioni per l'autenticazione all'API Secret Manager

Il provider Google Secret Manager utilizza l'identità del workload del pod su cui è montato un secret per l'autenticazione all'API Secret Manager. Per consentire alle tue 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 Kubernetes ServiceAccount o utilizza un Kubernetes ServiceAccount esistente nello stesso spazio dei nomi del pod in 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 ServiceAccount Kubernetes

  1. 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 ServiceAccount Kubernetes
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
  2. Applica il manifest:

    kubectl apply -f service-account.yaml
    
  3. Crea un criterio di autorizzazione IAM che faccia riferimento al nuovo ServiceAccount 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 Manager
    • PROJECT_NUMBER: il numero del progetto Google Cloud
    • PROJECT_ID: l'ID progetto del progetto Google Cloud che contiene il cluster GKE
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
    • KSA_NAME: il nome del ServiceAccount Kubernetes esistente

Utilizza un ServiceAccount Kubernetes esistente

Crea un criterio di autorizzazione IAM che faccia riferimento all'esistente Kubernetes ServiceAccount 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 Manager
  • PROJECT_NUMBER: il numero del progetto Google Cloud
  • PROJECT_ID: l'ID progetto del progetto Google Cloud che contiene il cluster GKE
  • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
  • KSA_NAME: il nome del ServiceAccount Kubernetes esistente

Definisci i secret da montare

Per specificare i secret da montare come file nel pod Kubernetes, crea un manifest YAML SecretProviderClass ed elenca i secret da montare e il nome file con cui montarli. Segui questi passaggi:

  1. 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'oggetto SecretProviderClass.
    • PROJECT_ID: il tuo ID progetto.
    • SECRET_NAME: il nome del secret.
    • SECRET_VERSION: la versione secret.
    • FILENAME.txt: il nome del file in cui verrà montato il valore del secret. Puoi creare più file utilizzando le variabili resourceName e path.

    Per un secret regionale, resourceName è il percorso completo della risorsa secret che include la posizione del secret regionale. Ad esempio, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Applica il manifest:

    kubectl apply -f app-secrets.yaml
    
  3. Verifica che l'oggetto SecretProviderClass sia stato creato:

    kubectl get SecretProviderClasses
    

Configura un volume in cui verranno montati i secret

  1. 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 secret
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
    • KSA_NAME: il ServiceAccount Kubernetes che hai configurato nel passaggio Configura le applicazioni per l'autenticazione all'API Secret Manager
    • IMAGE_NAME: il nome dell'immagine container
    • SECRET_PROVIDER_CLASS_NAME: il nome dell'oggetto SecretProviderClass
  2. 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 for GKE.

    spec:
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  3. 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.

Eseguire la migrazione dal driver CSI Secrets Store esistente

Se esegui la migrazione al componente aggiuntivo Secret Manager dall'installazione esistente del driver CSI Secrets Store, aggiorna il manifest del pod nel seguente modo:

  1. Aggiorna il nome del tuo SecretProviderClass e del provider 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"
    
  2. Aggiorna driver e secretProviderClass per il volume Kubernetes come descritto nel manifest seguente:

    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 questo comando:

Console

  1. Nella console Google Cloud , vai alla pagina Google Kubernetes Engine.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Nella pagina dei dettagli del cluster, nella sezione Sicurezza, fai clic su Secret Manager.

  4. Nella finestra di dialogo Modifica Secret Manager, deseleziona la casella di controllo Abilita Secret Manager.

  5. 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 tuo cluster
  • REGION: la regione di Compute Engine per il cluster, ad esempio us-central1

Esegui questo 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 ^