Workload Identity te permite asignar identidades y autorizaciones distintas y detalladas para cada aplicación en el clúster. Workload Identity es la forma recomendada para que las aplicaciones que se ejecutan en GKE en AWS accedan a los servicios deGoogle Cloud . Para obtener más información, consulta Workload Identity.
En este tema, se describe cómo usar Workload Identity para conectarte a los servicios deGoogle Cloud desde tus cargas de trabajo.
Configura una cuenta de servicio Google Cloud
En esta sección, crearás una Google Cloud cuenta de servicio (GSA) con permisos limitados para acceder a los servicios de Google Cloud .
Obtén el grupo y el proveedor de Workload Identity
A fin de configurar Workload Identity, debes tener los valores para el URI del proveedor de identidad de tu clúster y los grupos de Workload Identity.
- Determina el grupo de Workload Identity para tu clúster: - Todos los clústeres de GKE tienen un proveedor de identidad creado en el grupo de identidades para cargas de trabajo - PROJECT_ID.svc.id.goog. Para obtener el nombre del grupo de identidades de tu clúster, usa Google Cloud CLI:- gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'- Reemplaza lo siguiente: - CLUSTER_NAMEpor el nombre del clúster.
- GOOGLE_CLOUD_LOCATIONpor el nombre de la ubicación de Google Cloudque administra tu clúster
 - El resultado incluye el nombre del grupo de identidades de tu clúster. Guarda este valor. Lo necesitarás más tarde. 
- Determina el proveedor de identidad de tu clúster. - Para encontrar el nombre del proveedor de identidad del clúster, usa Google Cloud CLI: - gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'- Reemplaza lo siguiente: - CLUSTER_NAME
- GOOGLE_CLOUD_LOCATION
 - El resultado incluye el nombre del proveedor de identidades de tu clúster. Guarda este valor. Lo necesitarás más tarde. 
Crea una cuenta de servicio Google Cloud
Para crear una cuenta de servicio de Google Cloud (GSA), otorgarle permisos y agregar una vinculación de política de IAM a la GSA, sigue estos pasos:
- Crea la GSA con Google Cloud CLI: - gcloud iam service-accounts create GSA_NAME --project=PROJECT_ID- Reemplaza lo siguiente: - GSA_NAME: es el nombre de la GSA para tu aplicación.
- PROJECT_ID: Es el proyecto de Google Cloud la GSA.
 
- Agrega una vinculación de IAM para permitir que la GSA acceda a los servicios. - gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role IAM_ROLE- Reemplaza lo siguiente: - GSA_NAME: es el nombre de la GSA para tu aplicación
- PROJECT_ID: es el ID del proyecto para la GSA
- IAM_ROLE: es la función de IAM que se otorgará a la GSA
 - En este ejemplo, usaremos el rol - roles/compute.viewer, que permite el acceso de solo lectura a los servicios de procesamiento:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer
- Otorga permisos para que tu cuenta de servicio de Kubernetes (KSA) actúe en nombre de GSA. Para ello, agrega una vinculación de política de IAM con la función - 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- Reemplaza lo siguiente: - GSA_NAME
- PROJECT_ID
- NAMESPACEel espacio de nombres de Kubernetes para la aplicación
- KSA_NAME: es la KSA que se usará para la aplicación
 
Implementar una aplicación de muestra
En esta sección, implementarás una aplicación de muestra que acceda a la API de Compute Engine. Para usar esta muestra, tu cuenta de servicio debe tener la función de IAM roles/compute.viewer otorgada. Para implementar la aplicación de muestra, sigue estos pasos:
- Copia el siguiente manifiesto en un archivo llamado - 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- Reemplaza lo siguiente: - PROJECT_ID
- NAMESPACE
- KSA_NAME
- GSA_NAME
- IDENTITY_PROVIDERpor el nombre del proveedor de identidad del clúster.
 
- Aplica el manifiesto al clúster. - kubectl apply -f workload-identity-sample.yaml
- Verifica que la aplicación de muestra funcione, revisa los registros del Pod: - kubectl logs -f cloud-sdk-example -n NAMESPACE- Reemplaza lo siguiente: - NAMESPACE
 - Si el Pod tiene acceso exitoso a la API de procesamiento de Google Cloud, verás un resultado similar al siguiente: - 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
Realice una limpieza
- Borra la aplicación de ejemplo: - kubectl delete -f manifest.yaml
- Quita la vinculación de política de IAM de la cuenta de servicio de 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- Reemplaza lo siguiente: - GSA_NAME
- PROJECT_ID
- NAMESPACE
- KSA_NAME
 
- Quita la vinculación de política de IAM del proyecto - gcloud projects remove-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer- Reemplaza lo siguiente: - GSA_NAME
- PROJECT_ID
 
- Borra la cuenta de servicio de Google Cloud - gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com- Reemplaza lo siguiente: - GSA_NAME
- PROJECT_ID