Papéis e permissões do Eventarc

Neste documento, mostramos como definir papéis, permissões e sinalizações do Identity and Access Management (IAM) para receber eventos do Eventarc do Google Cloud e fontes de terceiros e entregar os eventos para serviços segmentados do Cloud Run autenticado ou não autenticado.

Esta página mostra como fazer o seguinte:

  • Concede papéis específicos do IAM ao usuário.
  • Concede papéis e permissões específicas à conta de serviço do gatilho. O Eventarc usa uma conta de serviço fornecida pelo cliente como identidade do gatilho.
  • Se você ativou a conta de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel iam.serviceAccountTokenCreator à conta de serviço do Pub/Sub:
  • Se você optar por usar a ferramenta de linha de comando gcloud, defina a sinalização do Cloud Run apropriadamente ao implantar imagens de contêiner ou revisões de um repositório de origem no Cloud Run.

Consulte Controle de acesso para saber mais sobre as opções de controle de acesso no Eventarc.

Tipos e papéis do gatilho do Eventarc

O Eventarc é compatível com os seguintes tipos de gatilho:

  • Gatilhos do registro de auditoria do Cloud: para receber eventos originados no Google Cloud, o Eventarc usa os registros de auditoria do Cloud.
  • Gatilhos do Cloud Pub/Sub: para receber eventos originados por terceiros, o Eventarc usa notificações do Pub/Sub.
Registros de auditoria do Cloud Pub/Sub
Invocações autenticadas do Cloud Run Usuário:
  • roles/eventarc.admin
  • roles/iam.serviceAccountUser
Usuário:
  • roles/eventarc.admin
  • roles/iam.serviceAccountUser
Conta de serviço de gatilho:
  • roles/run.invoker
  • roles/eventarc.eventReceiver
Conta de serviço de gatilho:
  • roles/run.invoker
Conta de serviço do Pub/Sub:
  • roles/iam.serviceAccountTokenCreator
Conta de serviço do Pub/Sub:
  • roles/iam.serviceAccountTokenCreator
Sinalização do Cloud Run:
  • Não relevante
Sinalização do Cloud Run:
  • N/A
Registros de auditoria do Cloud Pub/Sub
Invocações não autenticadas do Cloud Run Usuário:
  • roles/eventarc.admin
  • roles/iam.serviceAccountUser
Usuário:
  • roles/eventarc.admin
Conta de serviço de gatilho:
  • roles/eventarc.eventReceiver
Conta de serviço de gatilho:
  • N/A
Conta de serviço do Pub/Sub:
  • roles/iam.serviceAccountTokenCreator
Conta de serviço do Pub/Sub:
  • roles/iam.serviceAccountTokenCreator
Sinalização do Cloud Run:
  • --allow-unauthenticated
Sinalização do Cloud Run:
  • --allow-unauthenticated

Invocações autenticadas do Cloud Run

Registros de auditoria do Cloud

Para garantir que você receba eventos originados no Google Cloud enquanto envia para um destino autenticado do Cloud Run:

Função do usuário

eventarc.admin

Conceda o seguinte papel do IAM ao usuário:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:USER_EMAIL" \
  --role='roles/eventarc.admin'

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

iam.serviceAccountUser

Conceda o seguinte papel do IAM ao usuário:

gcloud iam service-accounts add-iam-policy-binding \
 SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
   --member="user:USER_EMAIL" \
   --role="roles/iam.serviceAccountUser"

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud
  • SERVICE_ACCOUNT_ID: o ID da conta de serviço.
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

Papéis da conta de serviço do gatilho

run.invoker

Conceda o seguinte papel do IAM à conta de serviço do gatilho:

gcloud run services add-iam-policy-binding SERVICE_ACCOUNT_NAME \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/run.invoker'

Substitua os seguintes valores:

  • SERVICE_ACCOUNT_NAME: nome da conta de serviço do gatilho.
  • SERVICE_ACCOUNT_USER_EMAIL: o endereço de e-mail da conta de serviço padrão.
eventarc.eventReceiver

Conceda o seguinte papel do IAM à conta de serviço do gatilho:

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

Substitua SERVICE_ACCOUNT_USER_EMAIL pelo endereço de e-mail da conta de serviço.

Papel da conta de serviço do Pub/Sub

iam.serviceAccountTokenCreator

Esse papel é concedido por padrão à conta de serviço do Pub/Sub.

Importante: se você ativou a conta de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel a seguir à conta de serviço do Pub/Sub por projeto.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Sinalização do Cloud Run

Implante o serviço de receptor de eventos no destino autenticado do Cloud Run usando o seguinte código:

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/helloworld-events

Substitua SERVICE_ACCOUNT_ID pelo ID da conta de serviço.

Pub/Sub

Para garantir que você receba eventos de fontes de terceiros enquanto entrega em um destino autenticado do Cloud Run:

Função do usuário

eventarc.admin

Conceda o seguinte papel do IAM ao usuário:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:USER_EMAIL" \
  --role='roles/eventarc.admin'

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

iam.serviceAccountUser

Conceda o seguinte papel do IAM ao usuário:

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
     --member="user:USER_EMAIL" \
     --role="roles/iam.serviceAccountUser"

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • SERVICE_ACCOUNT_ID: o ID da conta de serviço.
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

Papéis da conta de serviço do gatilho

run.invoker

Conceda o seguinte papel do IAM à conta de serviço do gatilho:

gcloud run services add-iam-policy-binding SERVICE_ACCOUNT_NAME \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/run.invoker'

Substitua os seguintes valores:

  • SERVICE_ACCOUNT_NAME: nome da conta de serviço;
  • SERVICE_ACCOUNT_USER_EMAIL: o endereço de e-mail da conta de serviço padrão.

Papel da conta de serviço do Pub/Sub

iam.serviceAccountTokenCreator

Esse papel é concedido por padrão à conta de serviço do Pub/Sub.

Importante: se você ativou a conta de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel a seguir à conta de serviço do Pub/Sub por projeto.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Sinalização do Cloud Run

Implante o serviço de receptor de eventos no destino autenticado do Cloud Run usando o seguinte código:

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/helloworld-events

Substitua SERVICE_ACCOUNT_ID pelo ID da conta de serviço.

Invocações não autenticadas do Cloud Run

Registros de auditoria do Cloud

Para garantir que você receba eventos originados no Google Cloud enquanto envia para um destino não autenticado do Cloud Run:

Função do usuário

eventarc.admin

Conceda o seguinte papel do IAM ao usuário:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:USER_EMAIL" \
  --role='roles/eventarc.admin'

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

iam.serviceAccountUser

Conceda o seguinte papel do IAM ao usuário:

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
    --member="user:USER_EMAIL" \
    --role="roles/iam.serviceAccountUser"

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • SERVICE_ACCOUNT_ID: o ID da conta de serviço.
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

Papéis da conta de serviço do gatilho

eventarc.eventReceiver

Conceda o seguinte papel do IAM à conta de serviço do gatilho:

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

Substitua SERVICE_ACCOUNT_USER_EMAIL pelo endereço de e-mail da conta de serviço.

Papel da conta de serviço do Pub/Sub

iam.serviceAccountTokenCreator

Esse papel é concedido por padrão à conta de serviço do Pub/Sub.

Importante: se você ativou a conta de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel a seguir à conta de serviço do Pub/Sub por projeto.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Sinalização do Cloud Run

Implante o serviço receptor de eventos no destino não autenticado do Cloud Run usando o seguinte código:

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/helloworld-events \
  --allow-unauthenticated

Substitua SERVICE_ACCOUNT_ID pelo ID da conta de serviço.

Pub/Sub

Para garantir que você receba eventos de fontes de terceiros enquanto entrega em um destino não autenticado do Cloud Run:

Função do usuário

eventarc.admin

Conceda o seguinte papel do IAM ao usuário:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:USER_EMAIL" \
  --role='roles/eventarc.admin'

Substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • USER_EMAIL: o endereço de e-mail do usuário

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com e domain:example.domain.com

Papéis da conta de serviço do gatilho

N/A

Papel da conta de serviço do Pub/Sub

iam.serviceAccountTokenCreator

Esse papel é concedido por padrão à conta de serviço do Pub/Sub.

Importante: se você ativou a conta de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel a seguir à conta de serviço do Pub/Sub por projeto.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Sinalização do Cloud Run

Implante o serviço receptor de eventos no destino não autenticado do Cloud Run usando o seguinte código:

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/helloworld-events \
  --allow-unauthenticated

Substitua SERVICE_ACCOUNT_ID pelo ID da conta de serviço.