A identidade da carga de trabalho permite que você atribua identidades e autorizações distintas e granulares para cada aplicativo em seu cluster. A identidade da carga de trabalho é a maneira recomendada para aplicativos em execução no GKE na AWS acessaremGoogle Cloud serviços. Para obter mais informações, consulte Identidade da carga de trabalho .
Este tópico descreve como usar a identidade da carga de trabalho para se conectar aGoogle Cloud serviços de suas cargas de trabalho.
Configurar um Google Cloud conta de serviço
Nesta seção, você cria um Google Cloud conta de serviço (GSA) com permissões limitadas para acessar Google Cloud serviços.
Obtenha seu pool de identidade de carga de trabalho e provedor
Para configurar a identidade da carga de trabalho, você deve ter os valores para o URI do provedor de identidade e os pools de identidade da carga de trabalho do seu cluster.
Determine o pool de identidade da carga de trabalho para seu cluster:
Todos os clusters do GKE têm um provedor de identidade criado no pool de identidades de carga de trabalho
PROJECT_ID .svc.id.goog
. Para obter o nome do pool de identidades do seu cluster, use a Google Cloud CLI:gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'
Substitua o seguinte:
-
CLUSTER_NAME
pelo nome do seu cluster. -
GOOGLE_CLOUD_LOCATION
com o nome do Google Cloudlocal que gerencia seu cluster
A saída inclui o nome do pool de identidades do seu cluster. Salve este valor. Você precisará dele mais tarde.
-
Determine o provedor de identidade para seu cluster.
Para encontrar o nome do provedor de identidade do seu cluster, use o Google Cloud CLI:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'
Substitua o seguinte:
-
CLUSTER_NAME
-
GOOGLE_CLOUD_LOCATION
A saída inclui o nome do provedor de identidade do seu cluster. Salve este valor. Você precisará dele mais tarde.
-
Criar um Google Cloud conta de serviço
Para criar um Google Cloud conta de serviço (GSA), conceder permissões a ela e adicionar uma vinculação de política do IAM ao GSA, siga estas etapas:
Crie o GSA com o Google Cloud CLI:
gcloud iam service-accounts create GSA_NAME --project=PROJECT_ID
Substitua o seguinte:
-
GSA_NAME
: o nome do GSA para sua aplicação. -
PROJECT_ID
: o GSA Google Cloud projeto.
-
Adicione uma ligação IAM para permitir que o 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 o seguinte:
-
GSA_NAME
: o nome do GSA para sua aplicação -
PROJECT_ID
: o ID do projeto para o GSA -
IAM_ROLE
: a função IAM a ser concedida ao GSA
Neste exemplo, usaremos a função
roles/compute.viewer
, que permite acesso somente leitura aos 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) represente o GSA. Para isso, adicione uma vinculação de política do IAM com a função
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 o seguinte:
-
GSA_NAME
-
PROJECT_ID
-
NAMESPACE
: o namespace do Kubernetes para o aplicativo -
KSA_NAME
: o KSA a ser usado para o aplicativo
-
Implantar um aplicativo de amostra
Nesta seção, você implantará um aplicativo de exemplo que acessa a API do Compute Engine. Para usar este exemplo, sua conta de serviço precisa ter a função do IAM roles/compute.viewer
concedida. Para implantar o aplicativo de exemplo, siga estas etapas:
Copie o seguinte manifesto em 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 o seguinte:
-
PROJECT_ID
-
NAMESPACE
-
KSA_NAME
-
GSA_NAME
-
IDENTITY_PROVIDER
pelo nome do provedor de identidade do seu cluster.
-
Aplique o manifesto ao seu cluster
kubectl apply -f workload-identity-sample.yaml
Verifique se o aplicativo de exemplo está funcionando, verifique os logs do Pod:
kubectl logs -f cloud-sdk-example -n NAMESPACE
Substitua o seguinte:
-
NAMESPACE
Se o Pod conseguir acessar a API de computação do Google Cloud, 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
-
Limpeza
Excluir o aplicativo de exemplo
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 o seguinte:
-
GSA_NAME
-
PROJECT_ID
-
NAMESPACE
-
KSA_NAME
-
Remover a vinculação da política do 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 o seguinte:
-
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 o seguinte:
-
GSA_NAME
-
PROJECT_ID
-