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_NAMEGOOGLE_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_IDSubstitua:
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_ROLESubstitua:
GSA_NAME: o nome do GSA para seu aplicativoPROJECT_ID: o ID do projeto do GSAIAM_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.viewerConceda 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.workloadIdentityUserSubstitua:
GSA_NAMEPROJECT_IDNAMESPACEpelo namespace do Kubernetes do aplicativoKSA_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.jsonSubstitua:
PROJECT_IDNAMESPACEKSA_NAMEGSA_NAMEIDENTITY_PROVIDERpelo nome do provedor de identidade do cluster.
Aplique o manifesto ao cluster.
kubectl apply -f workload-identity-sample.yamlVerifique se o aplicativo de amostra está funcionando e verifique os registros do pod:
kubectl logs -f cloud-sdk-example -n NAMESPACESubstitua:
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.yamlRemover 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.workloadIdentityUserSubstitua:
GSA_NAMEPROJECT_IDNAMESPACEKSA_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.viewerSubstitua:
GSA_NAMEPROJECT_ID
Excluir a conta de serviço do Google Cloud
gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comSubstitua:
GSA_NAMEPROJECT_ID