Papéis e permissões para um endpoint HTTP interno em uma rede VPC

Neste documento, mostramos como conceder papéis e permissões do Identity and Access Management (IAM) para oferecer suporte a eventos de roteamento do Google Cloud para um endpoint HTTP interno em uma nuvem privada virtual (VPC) 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 permissões com relação aos agentes de serviço do Google:

    1. Se o URI do endpoint HTTP interno usar o nome do DNS interno de um serviço resolvível pelo Cloud DNS, conceda o papel Par do Cloud DNS.
    2. Ao criar um gatilho para eventos diretos do Cloud Storage, conceda o papel Publicador do Pub/Sub.
    3. 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 Validaçã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 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 o URI do endpoint HTTP interno na rede VPC usar o nome DNS interno de um serviço que pode ser resolvido pelo Cloud DNS, para acessar redes de destino com zonas de peering de DNS, conceda ao agente de serviço do Eventarc o papel de peering do DNS (roles/dns.peer) no projeto host da VPC:

    gcloud projects add-iam-policy-binding VPC_HOST_PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com \
        --role=roles/dns.peer

    Substitua:

    • VPC_HOST_PROJECT_ID: o ID do projeto do Google Cloud para o projeto host da VPC. Ao usar a VPC compartilhada, você anexa um ou mais projetos de serviço ao projeto host, permitindo que recursos de vários projetos se conectem a uma rede VPC comum.

      Dependendo de como você configurou a rede VPC, o projeto host da VPC também pode ser seu projeto de gatilho do Eventarc.

    • PROJECT_NUMBER: o número do projeto do Google Cloud para o projeto de gatilho do Eventarc. 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ê 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)'
  3. 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