Papéis e permissões para destinos do Cloud Run

Neste documento, mostramos como conceder papéis e permissões do Identity and Access Management (IAM) para dar suporte ao roteamento de eventos do Google Cloud e de outras origens aos serviços do Cloud Run usando o Eventarc.

  1. Conceda permissões em todo o projeto ao principal que invoca as APIs Eventarc (por exemplo, o criador do gatilho do Eventarc):

    1. O papel de Administrador do Eventarc oferece controle total sobre todos os recursos do Eventarc, incluindo a especificação de uma conta de serviço para o gatilho quando ele é criado.
    2. O papel Usuário da conta de serviço permite que um principal represente e use uma conta de serviço. A conta de serviço está associada a um gatilho do Eventarc e representa a identidade desse gatilho.
  2. Conceda ao gatilho do Eventarc permissões com relação à conta de serviço do gatilho: o papel Receptor de eventos do Eventarc permite que o gatilho do Eventarc receba eventos de provedores de eventos. Você não precisa conceder o papel ao fazer o roteamento de eventos diretos do Cloud Pub/Sub.

  3. Conceda ao serviço do Cloud Run permissões com relação à conta de serviço do gatilho: o papel Invocador do Cloud Run permite que o gatilho do Eventarc chame o serviço de destino do Cloud Run. Isso se aplica ao fazer o roteamento de eventos para um serviço autenticado do Cloud Run.

  4. Conceda permissões com relação aos agentes de serviço do Google:

    1. Ao criar um gatilho para eventos diretos do Cloud Storage, conceda o papel Publicador do Pub/Sub.
    2. Se você tiver ativado o agente de serviço do Cloud Pub/Sub em 8 de abril de 2021 ou antes dessa data, conceda o papel Criador de token da conta de serviço.

Para mais informações sobre como conceder papéis, consulte Gerenciar o acesso. Também é possível receber as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Conceder permissões em todo o projeto

O criador do projeto recebe o papel básico de proprietário (roles/owner). Por padrão, esse papel inclui as permissões necessárias para o acesso total à maioria dos recursos do Google Cloud. Em outros casos, os papéis obrigatórios precisam ser concedidos por um administrador no recurso apropriado para o principal apropriado, também conhecido como membro.

Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Cada principal tem o próprio identificador, que normalmente é um endereço de e-mail.

  1. O papel de administrador do Eventarc (roles/eventarc.admin) oferece controle total sobre todos os recursos do Eventarc.

    Conceda o papel no projeto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    Substitua:

    • PROJECT_ID: é seu ID do projeto no Google Cloud.
    • PRINCIPAL: um identificador para o criador do gatilho, que geralmente tem o seguinte formato: PRINCIPAL_TYPE:ID. Por exemplo, user:my-user@example.com. Para conferir uma lista completa dos possíveis valores de PRINCIPAL_TYPE, consulte a Referência de vinculação de políticas.
  2. O papel de usuário da conta de serviço (roles/iam.serviceAccountUser) permite que um principal execute operações como uma conta de serviço.

    Por exemplo, você precisa desse papel para associar uma conta de serviço gerenciada pelo usuário a um gatilho do Eventarc. Ele também é necessário para que você possa atuar como a conta de serviço do ambiente de execução ao implantar um serviço do Cloud Run. Para mais informações, consulte Papéis para a autenticação da conta de serviço.

    Conceda o papel no projeto para permitir que o principal represente várias contas de serviço ou conceda o papel na conta de serviço para permitir que ele represente apenas uma conta de serviço específica.

    Conceda o papel no projeto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    Também é possível conceder o papel na conta de serviço:

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

    Substitua:

    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto do Google Cloud que contém a conta de serviço.
    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.

Conceder permissões ao gatilho do Eventarc

Cada gatilho do Eventarc é associado a uma conta de serviço do IAM no momento da criação. É possível especificar uma conta de serviço gerenciada pelo usuário a ser usada pelo gatilho como uma identidade padrão. Se você não especificar uma conta de serviço durante a criação do gatilho, ele usará a conta de serviço padrão do Compute Engine como identidade.

Recomendamos que você crie sua própria conta de serviço gerenciada pelo usuário a fim de ter mais controle e flexibilidade ao gerenciar o gatilho.

  1. Crie uma conta de serviço e anote o nome dela:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"

    Substitua:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço. Esse nome aparece no endereço de e-mail que identifica a conta de serviço.
    • DESCRIPTION: uma descrição opcional do serviço.
    • DISPLAY_NAME: um nome de conta de serviço a ser exibido no Console do Google Cloud
  2. Conceda o papel de receptor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço associada ao gatilho do Eventarc para que ele possa receber eventos de provedores de eventos.

    Não é necessário conceder o papel de receptor de eventos do Eventarc ao fazer o roteamento de eventos diretos do Cloud Pub/Sub.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver

    Substitua SERVICE_ACCOUNT_NAME pelo nome da conta de serviço que você anotou na etapa anterior.

Conceder permissões ao serviço do Cloud Run

Todos os serviços do Cloud Run são implantados de modo privado por padrão, o que significa que eles não podem ser acessados sem o fornecimento de credenciais de autenticação na solicitação. Para projetos com políticas da organização de compartilhamento restrito de domínio, use um serviço de destino autenticado do Cloud Run em vez de um que permita o acesso público (não autenticado).

Por padrão, os serviços do Cloud Run só podem ser chamados por proprietários de projetos, editores de projetos, administradores do Cloud Run e invocadores do Cloud Run.

  1. Ao fazer o roteamento de eventos para um serviço de destino autenticado do Cloud Run, conceda o papel de invocador do Cloud Run (run.invoker) no serviço do Cloud Run à conta de serviço gerenciada pelo usuário associada ao gatilho do Eventarc:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/run.invoker

    Substitua SERVICE_NAME pelo nome do serviço do Cloud Run.

  2. É possível conceder o papel em todos os serviços e jobs do Cloud Run que estão em um projeto do Google Cloud. Para mais informações, consulte Controlar o acesso em todos os serviços e jobs de um projeto.

Se você criar um gatilho para um serviço autenticado do Cloud Run sem conceder o papel de invocador do Cloud Run, o gatilho será criado com sucesso e será ativado. No entanto, o acionador não vai funcionar conforme o esperado e uma mensagem semelhante à seguinte vai aparecer nos registros:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

Conceder permissões aos agentes de serviço

Alguns serviços do Google Cloud têm agentes de serviços que permitem que os serviços acessem seus recursos. Se uma API exigir um agente de serviço, o Google criará esse agente depois que você ativar e começar a usar a API.

  1. Se você estiver criando um gatilho para eventos diretos do Cloud Storage, a fim de dar suporte à publicação de mensagens em um tópico, conceda o papel de Publicador do Pub/Sub (roles/pubsub.publisher) no projeto para o agente de serviço do Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    Substitua PROJECT_NUMBER pelo número do projeto do Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Se você tiver ativado o agente de serviço do Cloud Pub/Sub em 8 de abril de 2021 ou antes dessa data, a fim de dar suporte a solicitações de push autenticadas do Pub/Sub, conceda o papel de criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator) no projeto ao agente de serviço do Pub/Sub. Caso contrário, esse papel será concedido por padrão:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

A seguir