Workload Identity ti consente di assegnare l'autorizzazione e identità distinte e granulari per ogni applicazione nel tuo cluster. Workload Identity è il metodo consigliato per le applicazioni in esecuzione in GKE su AWS per accedere ai serviziGoogle Cloud . Per maggiori informazioni, consulta Workload Identity.
Questo argomento descrive come utilizzare l'identità del workload per connettersi ai serviziGoogle Cloud dai tuoi workload.
Configurare le autorizzazioni IAM
In questa sezione, concedi a un service account Kubernetes le autorizzazioni per accedere ai serviziGoogle Cloud concedendogli ruoli IAM.
Recuperare il pool e il provider di identità del workload
Per configurare l'identità del workload, devi disporre dei valori per l'URI del provider di identità del cluster e per i pool di identità del workload.
Determina il pool di identità del workload per il tuo cluster:
Tutti i cluster GKE hanno un provider di identità creato nel pool di identità del workload
PROJECT_ID.svc.id.goog. Per ottenere il nome del pool di identità del cluster, utilizza Google Cloud CLI:gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'Sostituisci quanto segue:
CLUSTER_NAMEcon il nome del tuo cluster.GOOGLE_CLOUD_LOCATIONcon 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.
Determina il provider di identità per il tuo cluster.
Per trovare il nome del provider di identità del cluster, utilizza Google Cloud CLI:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'Sostituisci quanto segue:
CLUSTER_NAMEGOOGLE_CLOUD_LOCATION
L'output include il nome del provider di identità del cluster. Salva questo valore. Ne avrai bisogno successivamente.
Concedi ruoli IAM al tuo service account Kubernetes
Concedi il ruolo IAM sul progetto al service account Kubernetes:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \
--role=IAM_ROLE \
--condition=None
Sostituisci quanto segue:
PROJECT_ID: il tuo Google Cloud ID progettoPROJECT_NUMBER: il tuo Google Cloud numero di progettoNAMESPACE: lo spazio dei nomi Kubernetes per l'applicazioneKUBERNETES_SERVICEACCOUNT: il service account Kubernetes da utilizzare per l'applicazioneIAM_ROLE: il ruolo IAM da concedere al service account Kubernetes
In questo esempio, utilizzeremo il ruolo roles/compute.viewer,
che consente l'accesso in sola lettura ai servizi di computing:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \
--role=roles/compute.viewer \
--condition=None
Deployment di un'applicazione di esempio
In questa sezione, esegui il deployment di un'applicazione di esempio che accede all'API Compute Engine. Per utilizzare questo esempio, al service account Kubernetes 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: KUBERNETES_SERVICEACCOUNT 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", "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: KUBERNETES_SERVICEACCOUNT 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.jsonSostituisci quanto segue:
PROJECT_IDNAMESPACEKUBERNETES_SERVICEACCOUNTIDENTITY_PROVIDERcon il nome del provider di identità per il tuo cluster.
Applica il manifest al cluster
kubectl apply -f workload-identity-sample.yamlVerifica che l'applicazione di esempio funzioni, controlla i log del pod:
kubectl logs -f cloud-sdk-example -n NAMESPACESostituisci quanto segue:
NAMESPACE
Se il pod riesce ad accedere all'API Compute di Google Cloud, 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
Pulizia
Elimina l'applicazione di esempio
kubectl delete -f manifest.yamlRimuovi l'associazione di policy IAM dal progetto
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \ --role=roles/compute.viewer \ --condition=NoneSostituisci quanto segue:
PROJECT_IDPROJECT_NUMBERNAMESPACEKUBERNETES_SERVICEACCOUNT