Funções e autorizações para destinos do Cloud Run

Este documento mostra como conceder funções e autorizações da gestão de identidade e de acesso (IAM) para suportar eventos de encaminhamento a partir do Google Cloud e de outras origens para serviços do Cloud Run através do Eventarc.

  1. Conceda autorizações ao nível do projeto ao principal que invoca as APIs Eventarc (por exemplo, o criador do acionador do Eventarc):

    1. A função Eventarc Admin permite-lhe ter controlo total sobre todos os recursos do Eventarc, incluindo a especificação de uma conta de serviço para o acionador quando o cria.
    2. A função utilizador da conta de serviço permite que um principal use a identidade e use uma conta de serviço. A conta de serviço está associada a um acionador do Eventarc e representa a identidade do acionador.
  2. Conceda autorizações de acionadores do Eventarc à conta de serviço do acionador: A função Recetor de eventos do Eventarc permite que o acionador do Eventarc receba eventos de fornecedores de eventos. Não precisa de conceder a função se estiver a encaminhar eventos diretos do Cloud Pub/Sub.

  3. Conceda autorizações de serviço do Cloud Run à conta de serviço do acionador: A função Invocador do Cloud Run permite que o acionador do Eventarc chame o serviço do Cloud Run de destino. Isto aplica-se se estiver a encaminhar eventos para um serviço do Cloud Run autenticado.

  4. Conceda autorizações aos agentes de serviços Google:

    1. Se estiver a criar um acionador para eventos diretos do Cloud Storage, conceda a função de Publicador do Pub/Sub.
    2. Se ativou o agente de serviço do Cloud Pub/Sub a 8 de abril de 2021 ou antes, conceda a função Criador de tokens de conta de serviço.

Para mais informações sobre a concessão de funções de IAM, consulte o artigo Gerir acesso. Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Conceda autorizações ao nível do projeto

Se for o criador do projeto, é-lhe atribuída a função básica de proprietário (roles/owner). Por predefinição, esta função inclui as autorizações necessárias para acesso total à maioria dosGoogle Cloud recursos. Caso contrário, as funções necessárias têm de ser concedidas por um administrador no recurso adequado ao principal adequado (também conhecido como membro).

Por exemplo, um principal pode ser uma Conta Google (para utilizadores finais) ou uma conta de serviço (para aplicações e cargas de trabalho de computação). Cada principal tem o seu próprio identificador, que é normalmente um endereço de email.

  1. A função de administrador do Eventarc (roles/eventarc.admin) permite-lhe ter controlo total sobre todos os recursos do Eventarc.

    Conceda a função no projeto:

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu Google Cloud projeto.
    • PRINCIPAL: um identificador do criador do acionador que normalmente tem o seguinte formato: PRINCIPAL_TYPE:ID. Por exemplo, user:[email protected]. Para ver uma lista completa dos valores PRINCIPAL_TYPE possíveis, consulte a referência de associação de políticas.
  2. A função de utilizador da conta de serviço (roles/iam.serviceAccountUser) permite que um principal execute operações como uma conta de serviço.

    Por exemplo, precisa desta função para poder associar uma conta de serviço gerida pelo utilizador a um acionador do Eventarc. Também precisa desta função para poder atuar como a conta de serviço de tempo de execução quando implementar um serviço do Cloud Run. Para mais informações, consulte o artigo Funções para autenticação de contas de serviço.

    Pode conceder a função no projeto para permitir que o principal se faça passar por várias contas de serviço ou conceder a função na conta de serviço para permitir que o principal se faça passar apenas por uma conta de serviço específica.

    Conceda a função no projeto:

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

    Em alternativa, conceda a função 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 o seguinte:

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

Conceda autorizações do acionador do Eventarc

Cada acionador do Eventarc está associado a uma conta de serviço do IAM no momento em que o acionador é criado. Pode especificar uma conta de serviço gerida pelo utilizador que o acionador usa como identidade predefinida. Se não especificar uma conta de serviço durante a criação do acionador, o acionador usa a conta de serviço predefinida do Compute Engine para a sua identidade.

Recomendamos que crie a sua própria conta de serviço gerida pelo utilizador para ter maior controlo e flexibilidade na gestão do seu acionador.

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

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

    Substitua o seguinte:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço. Este nome é apresentado no endereço de email que identifica a conta de serviço.
    • DESCRIPTION: uma descrição opcional da conta de serviço
    • DISPLAY_NAME: um nome da conta de serviço a apresentar na consola Google Cloud
  2. Conceda a função Eventarc Event Receiver (roles/eventarc.eventReceiver) no projeto à conta de serviço associada ao acionador do Eventarc para que o acionador possa receber eventos de fornecedores de eventos.

    Tenha em atenção que não precisa de conceder a função Eventarc Event Receiver se estiver a encaminhar 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 sua conta de serviço que anotou no passo anterior.

Conceda autorizações do serviço do Cloud Run

Por predefinição, todos os serviços do Cloud Run são implementados de forma privada, o que significa que não é possível aceder a eles sem fornecer credenciais de autenticação no pedido. Para projetos com políticas organizacionais de partilha restrita por domínio, use um serviço de destino do Cloud Run autenticado em vez de um que permita acesso público (não autenticado).

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

  1. Se estiver a encaminhar eventos para um serviço de destino do Cloud Run autenticado, conceda a função de invocador do Cloud Run (run.invoker) no serviço do Cloud Run à conta de serviço gerida pelo utilizador associada ao seu acionador 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. Opcionalmente, pode conceder a função em todos os serviços e tarefas do Cloud Run num Google Cloud projeto. Para mais informações, consulte o artigo Controle o acesso a todos os serviços e tarefas num projeto.

Tenha em atenção que, se criar um acionador para um serviço do Cloud Run autenticado sem conceder a função de invocador do Cloud Run, o acionador é criado com êxito e está ativo. No entanto, o acionador não funciona como esperado e é apresentada uma mensagem semelhante à seguinte nos registos:

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

Conceda autorizações a agentes de serviço

Alguns Google Cloud serviços têm agentes de serviço que permitem que os serviços acedam aos seus recursos. Se uma API exigir um agente de serviço, a Google cria o agente de serviço depois de ativar e usar a API.

  1. Se estiver a criar um acionador para eventos diretos do Cloud Storage, para suportar a publicação de mensagens num tópico, conceda a função de publicador do Pub/Sub (roles/pubsub.publisher) no projeto ao agente do 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 seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Se ativou o agente do serviço Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos push do Pub/Sub autenticados, conceda a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) no projeto ao agente do serviço Pub/Sub. Caso contrário, esta função é concedida por predefinição:

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

O que se segue?