Utilizzo di Workload Identity con Google Cloud
L'identità del carico di lavoro consente di assegnare identità e autorizzazioni distinte e granulari per ogni applicazione nel tuo cluster. Workload Identity è il modo consigliato per consentire alle applicazioni eseguite in GKE su Azure di accedere ai servizi Google Cloud. Per maggiori informazioni, consulta Identità del carico di lavoro.
Questo argomento descrive come utilizzare Workload Identity per la connessione ai servizi Google Cloud dai tuoi carichi di lavoro.
Configurare un account di servizio Google Cloud
In questa sezione creerai un account di servizio Google Cloud (GSA) con autorizzazioni limitate per accedere ai servizi Google Cloud.
Recupera il pool di identità per i carichi di lavoro e il provider
Per configurare Workload Identity, devi disporre dei valori per l'URI del provider di identità e i pool di identità per carichi di lavoro del cluster.
Determina il pool di identità per i carichi di lavoro per il cluster:
Tutti i cluster GKE hanno un provider di identità creato nel pool di identità dei carichi di lavoro
PROJECT_ID.svc.id.goog
. Per ottenere il nome del pool di identità del cluster, utilizza Google Cloud CLI:gcloud container azure clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'
Sostituisci quanto segue:
CLUSTER_NAME
con il nome del cluster.GOOGLE_CLOUD_LOCATION
con il nome della località Google Cloud che gestisce il cluster
L'output include il nome del pool di identità del cluster. Salva questo valore. Ne avrai bisogno successivamente.
Determinare il provider di identità per il cluster.
Per trovare il nome del provider di identità del cluster, utilizza Google Cloud CLI:
gcloud container azure clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'
Sostituisci quanto segue:
CLUSTER_NAME
GOOGLE_CLOUD_LOCATION
L'output include il nome del provider di identità del cluster. Salva questo valore. Ne avrai bisogno successivamente.
Creare un account di servizio Google Cloud
Per creare un account di servizio Google Cloud (GSA), concedergli le autorizzazioni e aggiungere un'associazione di criteri IAM a Google Cloud, segui questi passaggi:
Crea Google Search Ads con Google Cloud CLI:
gcloud iam service-accounts create GSA_NAME --project=PROJECT_ID
Sostituisci quanto segue:
GSA_NAME
: il nome della casella di ricerca GSA della tua applicazione.PROJECT_ID
: il progetto Google Cloud di Google Cloud.
Aggiungi un'associazione IAM per consentire a GSA di accedere ai servizi.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role IAM_ROLE
Sostituisci quanto segue:
GSA_NAME
: il nome dell'unità di controllo Google per la tua applicazionePROJECT_ID
: l'ID progetto per Google Search Ads 360IAM_ROLE
: il ruolo IAM da concedere a GAA
In questo esempio utilizzeremo il ruolo
roles/compute.viewer
, che consente l'accesso di sola lettura ai servizi di computing:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer
Concedi le autorizzazioni al tuo account di servizio Kubernetes per impersonare l'SGA. Per farlo, aggiungi un'associazione di criteri IAM con il ruolo
roles/iam.workloadIdentityUser
:gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ --role roles/iam.workloadIdentityUser
Sostituisci quanto segue:
GSA_NAME
PROJECT_ID
NAMESPACE
: lo spazio dei nomi Kubernetes per l'applicazioneKSA_NAME
: l'Arabia Saudita da utilizzare per la richiesta
Deployment di un'applicazione di esempio
In questa sezione eseguirai il deployment di un'applicazione di esempio che accede all'API Compute Engine. Per utilizzare questo esempio, al tuo account di servizio deve essere concesso il ruolo IAM roles/compute.viewer
. Per eseguire il deployment
dell'applicazione di esempio, segui questi passaggi:
Copia il seguente manifest in un file denominato
workload-identity-sample.yaml
:apiVersion: v1 kind: Namespace metadata: name: NAMESPACE --- apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE automountServiceAccountToken: false --- apiVersion: v1 kind: ConfigMap metadata: name: cloud-sdk-config namespace: NAMESPACE data: config: | { "type": "external_account", "audience": "identitynamespace:PROJECT_ID.svc.id.goog:IDENTITY_PROVIDER", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/GSA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "/var/run/secrets/tokens/gcp-ksa/token" } } --- apiVersion: v1 kind: Pod metadata: name: cloud-sdk-example namespace: NAMESPACE spec: serviceAccount: KSA_NAME containers: - name: cloud-sdk image: gcr.io/google.com/cloudsdktool/cloud-sdk:latest command: - /bin/bash - -c - 'set -eu -o pipefail; while true; do gcloud compute zones list --filter="name ~ us-central1-*"; sleep 5; done' env: - name: CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json - name: CLOUDSDK_CORE_PROJECT value: PROJECT_ID volumeMounts: - name: gcp-ksa mountPath: /var/run/secrets/tokens/gcp-ksa readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 420 sources: - serviceAccountToken: audience: PROJECT_ID.svc.id.goog expirationSeconds: 86400 path: token - configMap: name: cloud-sdk-config optional: false items: - key: config path: google-application-credentials.json
Sostituisci quanto segue:
PROJECT_ID
NAMESPACE
KSA_NAME
GSA_NAME
IDENTITY_PROVIDER
con il nome del provider di identità per il cluster.
Applica il manifest al tuo cluster
kubectl apply -f workload-identity-sample.yaml
Verifica che l'applicazione di esempio funzioni e controlla i log del pod:
kubectl logs -f cloud-sdk-example -n NAMESPACE
Sostituisci quanto segue:
NAMESPACE
Se il pod non riesce ad accedere all'API Google Cloud Compute, vedrai un output simile a questo:
NAME REGION STATUS NEXT_MAINTENANCE TURNDOWN_DATE us-central1-c us-central1 UP us-central1-a us-central1 UP us-central1-f us-central1 UP us-central1-b us-central1 UP
esegui la pulizia
Elimina l'applicazione di esempio
kubectl delete -f manifest.yaml
Rimuovi l'associazione del criterio IAM dall'account di servizio Google Cloud
gcloud iam service-accounts remove-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ roles/iam.workloadIdentityUser
Sostituisci quanto segue:
GSA_NAME
PROJECT_ID
NAMESPACE
KSA_NAME
Rimuovi l'associazione dei criteri IAM dal progetto
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer
Sostituisci quanto segue:
GSA_NAME
PROJECT_ID
Eliminare l'account di servizio Google Cloud
gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci quanto segue:
GSA_NAME
PROJECT_ID