A Identidade da carga de trabalho permite atribuir identidades e autorizações detalhadas e distintas para cada aplicativo no cluster. A identidade da carga de trabalho é a maneira recomendada para aplicativos em execução no GKE na AWS acessarem os serviços doGoogle Cloud . Para mais informações, consulte Identidade da carga de trabalho.
Neste tópico, descrevemos como usar a identidade da carga de trabalho para se conectar aos serviços doGoogle Cloud pelas suas cargas de trabalho.
Configurar uma conta de serviço Google Cloud
Nesta seção, você cria uma Google Cloud conta de serviço (GSA) com permissões limitadas para acessar os serviços do Google Cloud .
Acessar o pool de identidades e o provedor da carga de trabalho
Para configurar a identidade da carga de trabalho, você precisa ter os valores do URI do provedor de identidade e dos pools de identidade da carga de trabalho do cluster.
- Determinar o pool de identidade da carga de trabalho para o cluster: - Todos os clusters do GKE têm um provedor de identidade criado no pool da Identidade da carga de trabalho - PROJECT_ID.svc.id.goog. Para saber o nome do pool de identidades do cluster, use a Google Cloud CLI:- gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'- Substitua: - CLUSTER_NAMEpelo nome do cluster.
- GOOGLE_CLOUD_LOCATIONpelo nome do local do Google Cloud que gerencia o cluster.
 - A saída inclui o nome do pool de identidades do cluster. Salve esse valor. Você precisará dele mais tarde. 
- Determinar o provedor de identidade do cluster. - Para encontrar o nome do provedor de identidade do cluster, use a Google Cloud CLI: - gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'- Substitua: - CLUSTER_NAME
- GOOGLE_CLOUD_LOCATION
 - A saída inclui o nome do pool de identidades do cluster. Salve esse valor. Você precisará dele mais tarde. 
Criar uma conta de serviço Google Cloud
Para criar uma Google Cloud conta de serviço (GSA), conceda permissões a ela e adicione uma vinculação de política do IAM à GSA, siga estas etapas:
- Crie a GSA com a Google Cloud CLI: - gcloud iam service-accounts create GSA_NAME --project=PROJECT_ID- Substitua: - GSA_NAME: o nome do GSA para seu aplicativo.
- PROJECT_ID: o projeto Google Cloud da GSA.
 
- Adicione uma vinculação do IAM para permitir que a GSA acesse serviços. - gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role IAM_ROLE- Substitua: - GSA_NAME: o nome do GSA para seu aplicativo
- PROJECT_ID: o ID do projeto do GSA
- IAM_ROLE: o papel do IAM a ser concedido ao GSA
 - Neste exemplo, usaremos a função - roles/compute.viewer, que permite acesso somente leitura a serviços de computação:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer
- Conceda permissões para que sua conta de serviço do Kubernetes (KSA) possa representar a GSA. Para fazer isso, adicione uma vinculação de política do IAM com o papel - 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- Substitua: - GSA_NAME
- PROJECT_ID
- NAMESPACEpelo namespace do Kubernetes do aplicativo
- KSA_NAME: a KSA que será usada no aplicativo
 
Implantar um aplicativo de amostra
Nesta seção, você implanta um aplicativo de amostra que acessa a
API Compute Engine. Para usar essa amostra, sua conta de serviço precisa ter o papel
de IAM roles/compute.viewer. Para implantar
o aplicativo de amostra, siga estas etapas:
- Copie o seguinte manifesto do YAML para um arquivo chamado - 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- Substitua: - PROJECT_ID
- NAMESPACE
- KSA_NAME
- GSA_NAME
- IDENTITY_PROVIDERpelo nome do provedor de identidade do cluster.
 
- Aplique o manifesto ao cluster. - kubectl apply -f workload-identity-sample.yaml
- Verifique se o aplicativo de amostra está funcionando e verifique os registros do pod: - kubectl logs -f cloud-sdk-example -n NAMESPACE- Substitua: - NAMESPACE
 - Se o pod conseguir acessar a API Google Cloud Compute, você verá uma saída semelhante a esta: - 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
Como fazer a limpeza
- Excluir o aplicativo de amostra - kubectl delete -f manifest.yaml
- Remover a vinculação da política do IAM da conta de serviço do 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- Substitua: - GSA_NAME
- PROJECT_ID
- NAMESPACE
- KSA_NAME
 
- Remover a vinculação da política de IAM do projeto - gcloud projects remove-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewer- Substitua: - GSA_NAME
- PROJECT_ID
 
- Excluir a conta de serviço do Google Cloud - gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com- Substitua: - GSA_NAME
- PROJECT_ID