Integrazione tra Secret Manager e Google Kubernetes Engine (GKE) consente di archiviare dati sensibili come password e certificati utilizzati da 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:
- Installa il componente aggiuntivo Secret Manager su una piattaforma nuova o esistente cluster GKE.
- Configura le applicazioni per l'autenticazione nell'API Secret Manager.
- Definisci i secret da montare nei pod Kubernetes utilizzando un file YAML
SecretProviderClass
. - 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, 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 i deployment
linux/arm64
elinux/amd64
.
Limitazioni
Questa release di anteprima di Secret Manager non supporta le seguenti funzionalità disponibili in open source Driver CSI per Secrets Store:
Prima di iniziare
-
Abilita le API Secret Manager and Google Kubernetes Engine.
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
.Assicurati che il cluster esegua GKE 1.29 o versioni successive con un'immagine del nodo Linux. Il componente aggiuntivo Secret Manager non supporta Windows Nodi server.
Installa il componente aggiuntivo Secret Manager
Puoi installare il componente aggiuntivo Secret Manager su entrambi i cluster Standard nonché i cluster Autopilot. Assicurati che la federazione delle identità per i carichi di lavoro per GKE sia abilitata sul cluster Standard. La federazione delle identità per i carichi di lavoro per GKE è è abilitato per impostazione predefinita su un cluster Autopilot. I pod Kubernetes utilizzano Workload Identity per l'autenticazione nell'API Secret Manager.
Installa il componente aggiuntivo Secret Manager su un nuovo cluster GKE
Per installare il componente aggiuntivo Secret Manager nella creazione del cluster: segui questi passaggi:
Cluster standard
Per abilitare il componente aggiuntivo Secret Manager su un nuovo Esegui il comando seguente nel cluster standard:
gcloud beta container clusters create CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \ --cluster-version=VERSION \ --workload-pool=PROJECT_ID.svc.id.goog
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del tuo cluster.LOCATION
: la regione o la zona di Compute Engine per il cluster.VERSION
: la versione GKE specifica che vuoi utilizzare. Assicurati che il cluster esegua la versione GKE 1.29 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.
Cluster Autopilot
Per abilitare il componente aggiuntivo Secret Manager su un nuovo cluster Autopilot, esegui questo comando:
gcloud beta container clusters create-auto CLUSTER_NAME \ --enable-secret-manager \ --cluster-version=VERSION \ --location=LOCATION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del clusterVERSION
: la versione GKE specifica che vuoi utilizzare. Assicurati che il cluster esegua la versione GKE 1.29 o versioni successive. Se il canale di rilascio predefinito non include questa versione, utilizza il flag--release-channel
per scegliere di rilascio del prodotto.LOCATION
: la regione per nel tuo cluster, ad esempious-central1
.
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
.
Installa il componente aggiuntivo Secret Manager su un cluster GKE esistente
Per abilitare il componente aggiuntivo Secret Manager su un cluster esistente, esegui questo comando:
gcloud beta container clusters update CLUSTER_NAME \
--enable-secret-manager \
--location=LOCATION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster esistenteLOCATION
: la regione per nel tuo cluster, ad esempious-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 eseguire l'autenticazione 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 in qualsiasi spazio dei nomi, incluso ServiceAccount predefinito per Kubernetes.
Crea un criterio di autorizzazione di Identity and Access Management (IAM) per il secret in Secret Manager.
I pod che utilizzano l'account ServiceAccount configurato per l'autenticazione automatica come identificatore entità IAM che corrisponde Kubernetes ServiceAccount durante l'accesso all'API Secret Manager.
Crea un nuovo ServiceAccount per 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 tuo nuovo account di servizio KubernetesNAMESPACE
: il nome dello spazio dei nomi Kubernetes per ServiceAccount
Applica il manifest:
kubectl apply -f service-account.yaml
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 ManagerPROJECT_NUMBER
: il numero numerico del progetto Google CloudPROJECT_ID
: l'ID del progetto Google Cloud che contiene il tuo cluster GKENAMESPACE
: il nome dello spazio dei nomi Kubernetes per ServiceAccountKSA_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 ManagerPROJECT_NUMBER
: il numero numerico del progetto Google CloudPROJECT_ID
: l'ID del progetto Google Cloud che contiene il tuo cluster GKENAMESPACE
: il nome dello spazio dei nomi Kubernetes per ServiceAccountKSA_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:
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 progettoSECRET_NAME
: il nome del secretSECRET_VERSION
: la versione del secretFILENAME.txt
: il nome file in cui verrà assegnato il valore del secret montato. Puoi creare più file utilizzandoresourceName
epath
come la codifica one-hot delle variabili categoriche.
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: default 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 è montatoKSA_NAME
: l'account di servizio Kubernetes che hai configurato Nel passaggio Configurare l'account di servizio Workload IdentityIMAGE_NAME
: nome dell'immagine containerSECRET_PROVIDER_CLASS_NAME
: il nome dell'oggettoSecretProviderClass
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:
Aggiorna il nome del tuo
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 i
driver
e isecretProviderClass
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 :
gcloud beta container clusters update CLUSTER_NAME \
--no-enable-secret-manager \
--region=REGION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del clusterREGION
: la regione del tuo cluster, ad esempious-central1