Identidade do serviço

Conta de serviço do ambiente de execução

Durante a execução, uma revisão do Cloud Run usa uma conta de serviço como identidade. Portanto, quando o código usa bibliotecas de cliente do Google Cloud, ele recebe e usa automaticamente as credenciais da conta de serviço do ambiente de execução da revisão atual do Cloud Run. Essa estratégia é chamada de "Application Default Credentials".

Por padrão, as revisões do Cloud Run estão usando a Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), que tem o papel do IAM de Projeto > Editor. Isso significa que, por padrão, suas revisões do Cloud Run têm acesso de leitura e gravação a todos os recursos do projeto do Google Cloud. Embora isso seja muito conveniente, recomendamos conceder permissões mais granulares a cada um dos serviços do Cloud Run, atribuindo contas de serviço dedicadas com papéis do IAM mais restritos.

Como receber recomendações para criar contas de serviço dedicadas

O serviço do recomendador fornece automaticamente recomendações para você criar uma conta de serviço dedicada com o conjunto mínimo de permissões necessárias.

Como usar a identidade por serviço

O Google recomenda que você dê a cada um dos serviços uma identidade dedicada atribuindo uma conta de serviço gerenciada pelo usuário em vez de usar uma conta de serviço padrão. As contas de serviço gerenciadas pelo usuário permitem que você controle o acesso concedendo um conjunto mínimo de permissões usando o Identity and Access Management.

Use uma conta de serviço gerenciada pelo usuário no mesmo projeto que o serviço do Cloud Run ou em um projeto diferente.

Se a conta de serviço e o serviço do Cloud Run estiverem em projetos diferentes:

  • O projeto que contém essa conta de serviço requer que a política organizacional iam.disableCrossProjectServiceAccountUsage seja definida como falsa/não executada no nível da pasta ou herdada das configurações para envolvidos no projeto. Por padrão, essa opção é definida como true.
  • A conta de serviço requer uma assinatura de papel 1 para service account token creator para o agente de serviço do projeto de implantação: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com", em que PROJECT_NUMBER é o projeto. número do projeto.
  • A conta de serviço requer uma associação de papel1 para service account user para a identidade (usuário ou automação) que está executando a operação de implantação.

1 É possível aplicar a associação de papéis diretamente ao recurso da conta de serviço ou herdar de níveis mais altos na hierarquia de recursos.

Permissões necessárias para contas de serviço gerenciadas pelo usuário

Quando um usuário cria uma conta de serviço, ele recebe automaticamente a permissão iam.serviceAccounts.actAs. Caso contrário, um usuário com as permissões corretas precisa conceder ao usuário que está implantando o serviço a permissão iam.serviceAccounts.actAs. Para aprender a conceder permissões, consulte Como conceder, alterar e revogar acesso a recursos.

Como implantar um novo serviço com uma conta de serviço gerenciada pelo usuário

Se você ainda não tem uma conta de serviço gerenciada pelo usuário que queira usar, veja como criar e gerenciar contas de serviço.

É possível definir a conta de serviço usando o Console do Cloud ou a linha de comando gcloud ao criar um novo serviço ou implantar uma nova revisão. Atualize a conta de serviço com o e-mail da conta de serviço associado à nova identidade:

Console

  1. Acessar 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 atual, clique nele e em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo serviço, preencha a página inicial de configurações de serviço conforme desejado e clique em Avançar > Configurações avançadas para acessar a página de configuração de serviço.

  4. Clique na guia Segurança.

    imagem

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

  6. Clique em Criar ou Implantar.

gcloud

É possível atualizar um serviço existente 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: esse valor é o endereço de e-mail da conta de serviço, por exemplo, example@myproject.iam.gserviceaccount.com.

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 de contêiner. Por exemplo, gcr.io/myproject/my-image:latest;
  • SERVICE_ACCOUNT pela conta de serviço associada à nova identidade: esse valor é o endereço de e-mail da conta de serviço, por exemplo, example@myservice.iam.gserviceaccount.com.

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 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: esse valor é o endereço de e-mail da conta de serviço, por exemplo, example@myproject.iam.gserviceaccount.com.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Como buscar identidades e tokens de acesso

Quando seu código é executado no Cloud Run, ele pode usar o Compute Metadata Server para buscar tokens de identidade e de acesso. Você não pode consultar o servidor de metadados diretamente de seu computador local.

Tokens de identidade

Use tokens de identidade ao chamar outros serviços do Cloud Run ou qualquer outro serviço que possa validar um token de identidade.

Use o Compute Metadata Server para buscar tokens de identidade com um público-alvo específico da maneira a seguir:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=[AUDIENCE]" \
  -H "Metadata-Flavor: Google"

Onde AUDIENCE é o público-alvo JWT solicitado, por exemplo: o URL de um serviço que você está chamando, como https://service.domain.com, ou o ID do cliente OAuth de um recurso protegido por IAP, como 1234567890.apps.googleusercontent.com.

Tokens de acesso

Use tokens de acesso para chamar as APIs do Google.

Por padrão, os tokens de acesso têm o escopo cloud-platform, que permite o acesso a todas as APIs do Google Cloud Platform, supondo que o IAM também permita o acesso. Para acessar outras APIs do Google ou do Google Cloud, será preciso buscar um token de acesso com o escopo apropriado.

Use o Compute Metadata Server para buscar tokens de acesso.

Se você precisa de um token de acesso com um escopo específico, é possível gerar um como este:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=[SCOPES]" \
  -H "Metadata-Flavor: Google"

Onde SCOPES é uma lista separada por vírgulas de escopos OAuth solicitados, por exemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulte a lista completa de escopos do Google OAuth para descobrir quais escopos você precisa.

Próximas etapas

Aprenda a gerenciar o acesso ou a autenticar desenvolvedores, serviços e usuários finais aos seus serviços de maneira segura.

Para ver instruções completas de um aplicativo que usa a identidade de serviço para minimizar os riscos de segurança, siga o tutorial sobre como proteger os serviços do Cloud Run.