Questo documento mostra come concedere i ruoli e le autorizzazioni di Identity and Access Management (IAM) per supportare il routing degli eventi da Google Cloud e da altre origini ai servizi Cloud Run utilizzando Eventarc.
Concedi le autorizzazioni a livello di progetto al principale che invoca le API Eventarc (ad esempio, il creatore dell'attivatore Eventarc):
- Il ruolo Amministratore Eventarc ti consente di avere il controllo completo su tutte le risorse Eventarc, inclusa la possibilità di specificare un service account per l'attivatore al momento della creazione.
- Il ruolo Utente account di servizio consente a un'entità di simulare l'identità e utilizzare un account di servizio. L'account di servizio è associato a un attivatore Eventarc e rappresenta l'identità dell'attivatore.
Concede le autorizzazioni di trigger Eventarc all'account di servizio dell'trigger: Il ruolo Eventarc Event Receiver consente all'trigger Eventarc di ricevere eventi dai provider di eventi. Non è necessario concedere il ruolo se inoltri gli eventi diretti da Cloud Pub/Sub.
Concedi le autorizzazioni di servizio Cloud Run all'account di servizio dell'attivatore: Il ruolo Invoker di Cloud Run consente all'attivatore Eventarc di chiamare il servizio Cloud Run di destinazione. Questo vale se inoltri gli eventi a un servizio Cloud Run autenticato.
Concedere le autorizzazioni agli agenti di servizio Google:
- Se stai creando un trigger per gli eventi diretti da Cloud Storage, concedi il ruolo Editore Pub/Sub.
- Se hai attivato l'agente di servizio Cloud Pub/Sub il giorno 8 aprile 2021 o in una data precedente, concedi il ruolo Creatore token account di servizio.
Per ulteriori informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso. Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Concedi autorizzazioni a livello di progetto
Se sei il creator del progetto, ti viene concesso il ruolo di proprietario di base (roles/owner
). Per impostazione predefinita, questo ruolo include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle risorseGoogle Cloud . In caso contrario, i ruoli richiesti devono essere concessi da un amministratore della risorsa appropriata all'entità (noto anche come membro) appropriata.
Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per le applicazioni e i carichi di lavoro di calcolo). Ogni entità ha il proprio identificatore, che in genere è un indirizzo email.
Il ruolo Amministratore Eventarc (
roles/eventarc.admin
) ti consente di avere il controllo completo su tutte le risorse Eventarc.Concedi il ruolo al progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/eventarc.admin
Sostituisci quanto segue:
PROJECT_ID
: il tuo Google Cloud ID progetto.PRINCIPAL
: un identificatore per l'autore dell'attivatore, solitamente nella forma seguente:PRINCIPAL_TYPE:ID
. Ad esempio,user:my-user@example.com
. Per un elenco completo dei possibili valori diPRINCIPAL_TYPE
, consulta la documentazione di riferimento sull'associazione dei criteri.
Il ruolo Utente account di servizio (
roles/iam.serviceAccountUser
) consente a un'entità di eseguire operazioni come account di servizio.Ad esempio, hai bisogno di questo ruolo per associare un account di servizio gestito dall'utente a un trigger Eventarc. Inoltre, ti serve per poter agire come account di servizio di runtime quando esegui il deployment di un servizio Cloud Run. Per ulteriori informazioni, consulta Ruoli per l'autenticazione degli account di servizio.
Puoi concedere il ruolo nel progetto per consentire all'entità di assumere il ruolo di più account di servizio oppure concedere il ruolo nell'account di servizio per consentire all'entità di assumere il ruolo di un solo account di servizio specifico.
Concedi il ruolo al progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
In alternativa, concedi il ruolo all'account di servizio:
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
Sostituisci quanto segue:
SERVICE_ACCOUNT_PROJECT_ID
: Google Cloud l'ID progetto che contiene l'account di servizio.SERVICE_ACCOUNT_NAME
: il nome dell'account del servizio.
Concedi le autorizzazioni per gli trigger Eventarc
Ogni attivatore Eventarc è associato a un account di servizio IAM al momento della creazione. Puoi specificare un account di servizio gestito dall'utente che l'attivatore utilizza come identità predefinita. Se non specifichi un account di servizio durante la creazione dell'attivatore, questo utilizza l'account di servizio predefinito di Compute Engine per la propria identità.
Ti consigliamo di creare il tuo service account gestito dall'utente per avere maggiore controllo e flessibilità nella gestione dell'attivatore.
Crea un account di servizio e prendine nota del nome:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME
: il nome dell'account del servizio. Questo nome viene visualizzato nell'indirizzo email che identifica il service account.DESCRIPTION
: una descrizione facoltativa dell'account di servizioDISPLAY_NAME
: un nome dell'account di servizio da visualizzare nella console Google Cloud
Concedi il ruolo Event Receiver Eventarc (
roles/eventarc.eventReceiver
) nel progetto all'account di servizio associato al tuo trigger Eventarc in modo che l'trigger possa ricevere eventi dai provider di eventi.Tieni presente che non è necessario concedere il ruolo Eventarc Event Receiver se stai instradando eventi diretti da 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
Sostituisci
SERVICE_ACCOUNT_NAME
con il nome del tuo account di servizio che hai annotato nel passaggio precedente.
Concedi le autorizzazioni per il servizio Cloud Run
Per impostazione predefinita, tutti i servizi Cloud Run vengono di cui vengono eseguiti il deployment in privato, il che significa che non è possibile accedervi senza fornire le credenziali di autenticazione nella richiesta. Per i progetti con criteri dell'organizzazione per la condivisione limitata per i domini, utilizza un servizio target Cloud Run autenticato anziché uno che consente l'accesso pubblico (non autenticato).
Per impostazione predefinita, i servizi Cloud Run possono essere chiamati solo da proprietari di progetti, editor di progetti, amministratori di Cloud Run e invocatori di Cloud Run.
Se inoltri gli eventi a un servizio di destinazione Cloud Run autenticato, concedi il ruolo Invoker di Cloud Run (
run.invoker
) sul servizio Cloud Run all'account di servizio gestito dall'utente associato al tuo trigger Eventarc:gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Sostituisci
SERVICE_NAME
con il nome del servizio Cloud Run.Facoltativamente, puoi concedere il ruolo a tutti i servizi e i job Cloud Run in un Google Cloud progetto. Per scoprire di più, consulta Controllare l'accesso a tutti i servizi e i job di un progetto.
Tieni presente che se crei un trigger per un servizio Cloud Run autenticato senza concedere il ruolo Invoker di Cloud Run, l'trigger viene creato correttamente ed è attivo. Tuttavia, l'attivatore non funzionerà come previsto e nei log viene visualizzato un messaggio simile al seguente:
The request was not authenticated. Either allow unauthenticated
invocations or set the proper Authorization header.
Concedi le autorizzazioni agli agenti di servizio
Alcuni Google Cloud servizi hanno agenti di servizio che consentono ai servizi di accedere alle tue risorse. Se un'API richiede un agente di servizio, Google lo crea dopo che hai attivato e utilizzato l'API.
Se stai creando un trigger per gli eventi diretti da Cloud Storage, per supportare la pubblicazione di messaggi in un argomento, concedi all'agente di servizio Cloud Storage il ruolo Publisher Pub/Sub (
roles/pubsub.publisher
) nel progetto:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
Sostituisci
PROJECT_NUMBER
con il numero Google Cloud del tuo progetto. Puoi trovare il numero del progetto nella pagina Welcome della console Google Cloud o eseguendo il seguente comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Se hai attivato l'agente di servizio Cloud Pub/Sub il giorno 8 aprile 2021 o in una data precedente, per supportare le richieste push Pub/Sub autenticate, concedi all'agente di servizio Pub/Sub il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator
) nel progetto. In caso contrario, questo ruolo viene concesso per impostazione predefinita:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Passaggi successivi
Scopri le best practice per l'utilizzo degli account di servizio.
Scopri come descrivere un attivatore e verificare il relativo account di servizio associato.