Como usar a Identidade da carga de trabalho

Nesta página, explicamos como autenticar o serviço do Cloud Run for Anthos para usar APIs do Google Cloud ativando a Identidade da carga de trabalho.

Para usar as APIs do Google Cloud, como as APIs Compute, APIs Storage e Database ou APIs de machine learning no cluster do GKE, você precisa ter permissões e autenticar o serviço Cloud Run for Anthos, ativando Identidade da carga de trabalho e vinculando uma conta de serviço do Kubernetes para atuar como uma conta de serviço do Google.

Como ativar a Identidade da carga de trabalho no cluster

Para configurar a Identidade da carga de trabalho com o Cloud Run for Anthos, consulte as instruções a seguir para ativá-la no cluster. Caso contrário, passe para a próxima seção:

Ativar a Identidade de carga de trabalho em um novo cluster ou Ativar a Identidade de carga de trabalho em um cluster existente

Como ativar métricas em um cluster com a identidade da carga de trabalho

Ao ativar a Identidade da carga de trabalho, o Cloud Run para Anthos não informa determinadas métricas, como contagem de solicitações de revisão ou latência de solicitação para o Pacote de operações do Google Cloud, mas continua a gerar relatórios de métricas de CPU e memória.

Se você quiser ativar todas as métricas, precisará definir manualmente as permissões para gravá-las no Cloud Monitoring. Para isso, conceda o papel de gravador da métrica do Monitoring à conta de serviço do Google (GSA, na sigla em inglês) associada ao serviço do Cloud Run para Anthos.

Conceda as permissões do papel de gravador de métricas do Monitoring à GSA do serviço:

gcloud projects add-iam-policy-binding PROJECT_ID 
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
--role=roles/monitoring.metricWriter

Substitua:

  • PROJECT_ID pelo ID de um projeto de cluster que hospeda sua KSA;
  • GSA_PROJECT pelo ID do projeto de uma GSA que não está no cluster. Use qualquer GSA na sua organização.

Saiba mais em Como conceder, alterar e revogar acesso a recursos.

Como vincular contas de serviço

Você precisa configurar um relacionamento para uma conta de serviço do Kubernetes (KSA, na sigla em inglês) para atuar como uma conta de serviço do Google (GSA, na sigla em inglês). Qualquer carga de trabalho em execução como KSA é autenticada automaticamente como a GSA ao acessar as APIs Google Cloud.

  1. Se não houver uma conta de serviço do Kubernetes (KSA, na sigla em inglês), crie uma no mesmo namespace do Kubernetes do serviço do Cloud Run for Anthos. Caso contrário, passe para a próxima etapa:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  2. Crie uma relação entre KSAs e GSAs para que a carga de trabalho em execução como KSA seja autenticada automaticamente como GSA ao acessar as APIs do Google Cloud:

    1. Autorize sua KSA a atuar como uma GSA:

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
    2. Atualize o cluster para aproveitar a vinculação:

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE \
       KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com

Como implantar um novo serviço com uma nova identidade

Implante o serviço usando a KSA que existe no cluster e no namespace do serviço que você quer implantar. A conta de serviço pode pertencer a um projeto diferente do cluster.

Console

  1. Acesse o Cloud Run.

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço existente, clique nele e depois selecione Editar e implantar nova revisão.

  3. Em Configurações avançadas, clique em Contêiner.

    imagem

  4. Clique no menu suspenso Conta de serviço e selecione a conta de serviço desejada.

  5. Clique em Criar ou Implantar.

gcloud

É possível atualizar um serviço atual para ter uma nova conta de serviço de ambiente de execução usando o seguinte comando:

gcloud run services update SERVICE --service-account SERVICE_ACCOUNT

Substitua:

  • SERVICE pelo nome do serviço;
  • SERVICE_ACCOUNT pela conta de serviço associada à nova identidade.

Também é possível definir uma conta de serviço durante a implantação usando o comando:

gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT

Substitua:

  • IMAGE_URL por uma referência à imagem do contêiner, por exemplo, gcr.io/myproject/my-image:latest;
  • SERVICE_ACCOUNT pela conta de serviço associada à nova identidade.

YAML

É possível fazer o download e ver a configuração do serviço atual usando o comando gcloud run services describe --format export, que produz resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud beta run services replace. Modifique os campos somente conforme documentado.

  1. Para visualizar e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o atributo serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run;
    • SERVICE_ACCOUNT pela conta de serviço associada à nova identidade.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud beta run services replace service.yaml