Configurar a identidade do serviço

Um job do Cloud Run tem uma identidade de serviço usada como a conta autenticada para acessar as APIs do Google Cloud do contêiner da instância do Cloud Run. Para saber mais sobre a identidade de serviço, consulte o guia Introdução à identidade de serviço.

Como a identidade do serviço é usada

No Cloud Run, a identidade do serviço é uma conta de serviço que é um recurso e um principal.

  • Identidade de serviço como um recurso: para anexar uma conta de serviço como identidade de serviço, a conta do implantador precisa ter acesso ao recurso de identidade de serviço. Algumas operações, como criação ou atualização de um job, exigem que a conta do implantador tenha permissões no recurso de identidade do serviço.
  • Identidade do serviço como principal: Para acessar as APIs do Google Cloud de um job do Cloud Run, é preciso conceder à identidade do serviço os papéis ou as permissões necessários para as operações que você quer que o job execute.

A próxima seção aborda os papéis necessários para conceder à conta do implantador acesso ao recurso de identidade de serviço e ao principal da conta de serviço.

Funções exigidas

Você ou seu administrador precisa conceder papéis e permissões do IAM para a conta do implantador e a identidade do serviço.

Clique para conferir os papéis necessários para a conta do implantador

Para receber as permissões necessárias para anexar uma conta de serviço como a identidade do serviço no job, você ou o administrador precisa conceder à conta do implantador o Usuário da conta de serviço (roles/iam.serviceAccountUser ) na conta de serviço usada como identidade.

Esse papel predefinido contém a permissão iam.serviceAccounts.actAs, que é necessária para anexar uma conta de serviço ao job. Também é possível conseguir essa permissão configurando papéis personalizados ou usando outros papéis predefinidos.

Para instruções sobre como conceder esse papel na identidade do serviço à conta do implantador, consulte as permissões de implantação. Se a conta de serviço estiver em um projeto diferente do job do Cloud Run, você ou seu administrador também precisarão configurar um papel do IAM para o agente de serviço do Cloud Run e definir uma política da organização. Consulte Usar contas de serviço em outros projetos para mais detalhes.

Clique para conferir os papéis necessários para a identidade do serviço

Para permitir que a identidade do serviço acesse as APIs do Google Cloud pelo Cloud Run, você ou seu administrador precisa conceder à identidade as permissões ou papéis exigidos pelas operações que você quer realizar. Para acessar bibliotecas de cliente específicas do Cloud, consulte a documentação do Google Cloud para o serviço do Google Cloud.

Se um job do Cloud Run não acessar outros serviços do Google Cloud, não será necessário conceder papéis ou permissões à identidade do serviço e você poderá usar a conta de serviço padrão atribuída ao sobre o projeto.

Receber recomendações para criar contas de serviço dedicadas

Quando você cria uma nova conta de serviço no Console do Google Cloud, a etapa opcional "Conceder a essa conta de serviço acesso ao projeto" é para qualquer acesso adicional necessário. Por exemplo, um serviço do Cloud Run pode invocar outro serviço particular do Cloud Run ou pode acessar um banco de dados do Cloud SQL, ambos que exigem papéis específicos do IAM. Consulte a documentação sobre como gerenciar o acesso para mais informações.

O serviço do recomendador fornece recomendações automaticamente para criar contas de serviço dedicadas com o conjunto mínimo de permissões necessárias.

Configurar a identidade do serviço

Para configurar a identidade do serviço no Cloud Run ou especificar, use o console do Google Cloud, a CLI gcloud ou a API (YAML) ao criar e executar um novo job:

Console

  1. No console do Google Cloud, acesse a página de jobs do Cloud Run:

    Acesse o Cloud Run

  2. Se você estiver configurando um novo job, clique na guia Jobs e preencha a página inicial de configurações do job conforme quiser. Se você estiver configurando um job, clique nele e em Editar.

  3. Clique em Contêiner, variáveis e secrets, conexões e segurança para expandir a página de propriedades do job.

  4. Clique na guia Segurança.

    imagem

    • Clique no menu suspenso Conta de serviço e selecione uma conta de serviço atual ou clique em Criar uma nova conta de serviço, se aplicável.
  5. Clique em Criar ou Atualizar.

gcloud

É possível criar um novo job e especificar uma conta de serviço usando o seguinte comando:

gcloud run jobs create JOB_NAME --service-account SERVICE_ACCOUNT

Substitua:

  • JOB_NAME 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.

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

gcloud run jobs update JOB_NAME --image IMAGE_URL --service-account SERVICE_ACCOUNT

Substitua:

  • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • 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, SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

YAML

Se você ainda não criou uma conta de serviço, é possível criar uma conta de serviço gerenciada pelo usuário no IAM.

Faça o download e consulte a configuração do job que já existe usando o comando gcloud run jobs describe --format export, que gera resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run jobs replace. Modifique os campos somente conforme documentado.

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

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Atualize o atributo serviceAccountName::

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      template:
        spec:
          template:
            spec:
              serviceAccountName: SERVICE_ACCOUNT

    Substituir

    • JOB_NAME pelo nome do job 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, SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  3. Atualize a configuração do job que já existe:

    gcloud run jobs replace job.yaml

Usar contas de serviço em outros projetos

Se você configurar uma conta de serviço de um projeto do Google Cloud diferente do recurso do Cloud Run, faça o seguinte:

  1. Você ou seu administrador precisa conceder o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço usada como a identidade do serviço.

    Console

    1. Acesse a página Contas de serviço no Console do Google Cloud:

      Acesse as Contas de serviço

    2. Selecione o endereço de e-mail da conta de serviço que você está usando como a identidade do serviço.

    3. Clique na guia Permissões.

    4. Clique no botão Permitir acesso.

    5. Insira o endereço de e-mail da conta do implantador que corresponde ao principal a que você está concedendo o papel de Administrador ou Desenvolvedor.

    6. Na lista suspensa Selecionar um papel, selecione o papel Contas de serviço > Usuário da conta de serviço.

    7. Clique em Salvar.

    gcloud

    Use o comando gcloud iam service-accounts add-iam-policy-binding, substituindo as variáveis destacadas pelos valores apropriados:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="PRINCIPAL" \
        --role="roles/iam.serviceAccountUser"
    

    Substitua:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço à qual você está anexando o recurso do Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto em que a conta de serviço está localizada.
    • PRINCIPAL pela conta do implantador a que você está adicionando a vinculação, usando o formato user|group|serviceAccount:email ou domain:domain. Exemplo:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. Você ou seu administrador precisa conceder ao agente de serviço do recurso do Cloud Run o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) na conta de serviço usada como identidade de serviço. O agente de serviço segue o formato de service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    Console

    1. Acesse a página Contas de serviço no Console do Google Cloud:

      Acesse as Contas de serviço

    2. Selecione o endereço de e-mail da conta de serviço que você está usando como a identidade do serviço.

    3. Clique na guia Permissões.

    4. Clique no botão Permitir acesso.

    5. Digite o endereço de e-mail do agente de serviço. Por exemplo: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    6. No menu suspenso Selecionar um papel, escolha o papel Contas de serviço > Criador de token de conta de serviço.

    7. Clique em Salvar.

    gcloud

    Use o comando gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Substitua os seguintes valores:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço à qual você está anexando o recurso do Cloud Run.
    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto em que a conta de serviço está localizada.
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: o número do projeto em que o Cloud Run está localizado.

    O comando imprime a política e permissão datualizada na conta de serviço gerenciada pelo usuário.

  3. O projeto que contém essa conta de serviço requer que a política organizacional iam.disableCrossProjectServiceAccountUsage seja definida como falsa ou 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.

    Console

    1. Acesse a página Políticas da organização no Console do Google Cloud.

      Acessar as políticas da organização

    2. No seletor de projeto, escolha a organização e o projeto em que você quer desativar o uso da conta de serviço entre projetos.

    3. Selecione a política desativar o uso de contas de serviço entre projetos.

    4. Clique em Gerenciar política.

    5. Em Origem da política, selecione Substituir política principal.

    6. Clique em Adicionar uma regra.

    7. Em Aplicação, selecione Desativada.

    8. Para aplicar a política, clique em Definir política.

    gcloud

    No projeto que tem a conta de serviço, verifique se a restrição de política da organização iam.disableCrossProjectServiceAccountUsage não foi aplicada. Essa restrição é aplicada por padrão.

    Para desativar essa restrição de política da organização, execute:

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID
    

    Substitua SERVICE_ACCOUNT_PROJECT_ID pelo ID do projeto que contém a conta de serviço.

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

A seguir