Usa 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.

In questa pagina viene spiegato 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:

  1. Abilita il componente aggiuntivo Secret Manager su un dispositivo nuovo o esistente cluster GKE.
  2. Configura le applicazioni per l'autenticazione nell'API Secret Manager.
  3. Definisci i secret da montare nei pod Kubernetes utilizzando un file YAML SecretProviderClass.
  4. Crea un volume in cui montare i secret. Dopo aver collegato il volume, applicazioni nel contenitore 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 il provider di Google Secret Manager. Se utilizzi il driver CSI di Secrets Store open source per accedere ai secret, di cui puoi eseguire la migrazione al componente aggiuntivo Secret Manager. Per informazioni, vedi Esegui la migrazione dal driver CSI dell'archivio di secret esistente.

Vantaggi

Il componente aggiuntivo Secret Manager offre i seguenti vantaggi:

  • Puoi utilizzare una soluzione completamente gestita e supportata per accedere a Secret Manager dai secret all'interno di GKE senza overhead operativo.
  • Non è necessario scrivere codice personalizzato per accedere ai secret archiviati in Secret Manager.
  • Puoi archiviare e gestire tutti i tuoi secret a livello centrale in Secret Manager e accedere in modo selettivo ai secret dai pod GKE utilizzando Secret Manager. In questo modo, puoi utilizzare le funzionalità offerte Secret Manager come la crittografia CMEK, controllo dell'accesso granulare, rotazione gestita, gestione del ciclo di vita e audit log, oltre all'utilizzo le funzionalità di Kubernetes, come la trasmissione di secret ai container sotto forma di come volumi montati.
  • Il componente aggiuntivo Secret Manager è supportato sia sui cluster standard che sui cluster Autopilot.
  • Il componente aggiuntivo Secret Manager supporta nodi che utilizzano Container-Optimized OS o immagini dei nodi Ubuntu.

Limitazioni

Il componente aggiuntivo Secret Manager presenta le seguenti limitazioni:

Prima di iniziare

  • Enable the Secret Manager and Google Kubernetes Engine APIs.

    Enable the APIs

  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa quindi inizializza gcloud CLI. Se installato in precedenza gcloud CLI, per ottenere l'ultima versione eseguendo il comando gcloud components update.

    Non puoi configurare manualmente il componente aggiuntivo Secret Manager utilizzando il Google Cloud SDK o la console Google Cloud.

  • Assicurati che il cluster esegua GKE versione 1.27.14-gke.1042001 con un'immagine del nodo Linux.

  • Se utilizzi un cluster GKE Standard, assicurati che nel cluster è abilitata la federazione delle identità per i carichi di lavoro per GKE. La federazione delle identità per i carichi di lavoro per GKE è abilitata da per impostazione predefinita su un cluster Autopilot. I pod Kubernetes utilizzano la federazione delle identità per i carichi di lavoro per GKE per eseguire l'autenticazione l'API Secret Manager.

Abilita 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 su un nuovo cluster GKE

Per abilitare il componente aggiuntivo Secret Manager nella creazione del cluster:

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    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 Attiva 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 Esegui il comando seguente nel cluster standard:

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: il nome del tuo cluster.
  • LOCATION: il Compute Engine region per il cluster, ad esempio us-central1.
  • VERSION: la versione specifica di GKE che vuoi utilizzare. Assicurati che il cluster esegua la versione GKE 1.27.14-gke.1042001 o versioni successive. Se l'impostazione predefinita canale di rilascio non include questa versione, utilizza il flag --release-channel per scegliere di rilascio del prodotto.
  • PROJECT_ID: l'ID del tuo progetto Google Cloud.

Esegui la persone che seguo :

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 uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

Esegui la persone che seguo :

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 abilitato il componente aggiuntivo Secret Manager, puoi utilizzare il driver CSI dell'archivio secret nei volumi Kubernetes utilizzando il driver e nome del provisioner: secrets-store-gke.csi.k8s.io.

Attivare il componente aggiuntivo Secret Manager in un cluster GKE esistente

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

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    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, fai clic su Secret Manager nella sezione Sicurezza.

  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 uno qualsiasi dei dati di comando 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 la persone che seguo :

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 sul cluster Kubernetes, esegui questo comando:

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la località del tuo cluster, ad esempio us-central1

Configura le applicazioni per l'autenticazione nell'API Secret Manager

Il provider Google Secret Manager utilizza l'identità dei carichi di lavoro del pod su cui è montato un secret durante l'autenticazione l'API Secret Manager. Per consentire alle applicazioni di autenticarsi nell'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 ServiceAccount Kubernetes esistente nello stesso spazio dei nomi del pod su cui vuoi montare il secret.

  • Crea un criterio di autorizzazione di 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 per 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 tuo nuovo account di servizio 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 fa riferimento al nuovo Kubernetes ServiceAccount e concedere 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 numerico del progetto Google Cloud
    • PROJECT_ID: l'ID del progetto Google Cloud che contiene il tuo cluster GKE
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
    • KSA_NAME: il nome del tuo account di servizio Kubernetes esistente

Usa un account di servizio Kubernetes esistente

Crea un criterio di autorizzazione IAM che fa riferimento all'oggetto Kubernetes esistente ServiceAccount e concedere 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 numerico del progetto Google Cloud
  • PROJECT_ID: l'ID del progetto Google Cloud che contiene il tuo cluster GKE
  • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
  • KSA_NAME: il nome del tuo account di servizio Kubernetes esistente

Definisci quali secret montare

Per specificare quali secret montare come file nel pod Kubernetes, crea un Manifest YAML SecretProviderClass ed elenca i secret da montare e il nome file in e come installarle. 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 del secret.
    • FILENAME.txt: il nome file in cui verrà assegnato il valore del secret montato. Puoi creare più file utilizzando resourceName e path come la codifica one-hot delle variabili categoriche.
  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 il secret è montato
    • NAMESPACE: il nome dello spazio dei nomi Kubernetes per ServiceAccount
    • KSA_NAME: l'account di servizio Kubernetes che hai configurato nel passaggio Configura le applicazioni per l'autenticazione nell'API Secret Manager
    • IMAGE_NAME: 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 la federazione delle identità per i carichi di lavoro per 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.

Esegui la migrazione dal driver CSI dell'archivio di secret esistente

Se stai eseguendo la migrazione al componente aggiuntivo Secret Manager dal tuo installazione esistente del Driver CSI di Secrets Store, aggiorna il manifest del pod come segue:

  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 i driver e i secretProviderClass per Kubernetes come descritto nel seguente manifest:

    volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "app-secrets-gke"
    

Disabilita il componente aggiuntivo Secret Manager

Per disabilitare il componente aggiuntivo Secret Manager su un modello esistente Un cluster standard o Autopilot, esegui questo comando :

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    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 uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: il nome del cluster
  • REGION: il Compute Engine region per il cluster, ad esempio us-central1

Esegui la persone che seguo :

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 ^