Questo documento mostra come concedere ruoli e autorizzazioni Identity and Access Management (IAM) per supportare il routing degli eventi da Google Cloud e altre origini ai servizi Cloud Run utilizzando Eventarc.
Concedi le autorizzazioni a livello di progetto al principal che richiama le API Eventarc (ad esempio, il creatore del trigger Eventarc):
- Il ruolo Amministratore Eventarc ti consente di controllare completamente tutte le risorse Eventarc, inclusa la specifica di un service account per il trigger al momento della creazione.
- Il ruolo Utente service account consente a un'entità di simulare l'identità e utilizzare unaccount di serviziot. Il account di servizio è associato a un trigger Eventarc e rappresenta l'identità del trigger.
Concedi le autorizzazioni del trigger Eventarc al service account del trigger: il ruolo Destinatario di eventi Eventarc consente al trigger Eventarc di ricevere eventi dai provider di eventi. Non è necessario concedere il ruolo se instradate eventi diretti da Cloud Pub/Sub.
Concedi le autorizzazioni del servizio Cloud Run al service account del trigger: il ruolo Cloud Run Invoker consente al trigger Eventarc di chiamare il servizio Cloud Run di destinazione. Ciò vale se indirizzi gli eventi a un servizio Cloud Run autenticato.
Concedi autorizzazioni ai service agent Google:
- Se stai creando un trigger per eventi diretti da Cloud Storage, concedi il ruolo Pub/Sub Publisher.
- Se hai attivato l'agente di servizio Cloud Pub/Sub l'8 aprile 2021 o in una data precedente, concedi il ruolo Creatore token service account.
Per saperne di più 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 le autorizzazioni a livello di progetto
Se hai creato il 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 sulla risorsa appropriata all'entità appropriata (nota anche come membro).
Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un service account (per applicazioni e 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 controllare completamente tutte le risorse Eventarc.Concedi il ruolo sul progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/eventarc.admin
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto Google Cloud .PRINCIPAL: un identificatore per il creatore del trigger che di solito ha il seguente formato:PRINCIPAL_TYPE:ID. Ad esempiouser:my-user@example.com. Per un elenco completo dei possibili valori diPRINCIPAL_TYPE, consulta il riferimento Policy Binding.
Il ruolo Utente service account (
roles/iam.serviceAccountUser) consente a un'entità di eseguire operazioni come account di servizio.Ad esempio, ti serve questo ruolo per associare un account di servizio gestito dall'utente a un trigger Eventarc. Ti serve anche per agire come service account di runtime quando esegui il deployment di un servizio Cloud Run. Per saperne di più, consulta Ruoli per laccount di servizio account.
Puoi concedere il ruolo nel progetto per consentire all'entità di simulare l'identità di più service account oppure concedere il ruolo nel account di servizio per consentire all'entità di simulare l'identità solo di un account di servizio specifico.
Concedi il ruolo sul progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
In alternativa, concedi il ruolo al 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: l'ID progetto Google Cloud che contiene il account di servizio.SERVICE_ACCOUNT_NAME: il nome del service account.
Concedi le autorizzazioni del trigger Eventarc
Ogni trigger Eventarc è associato a un account di servizio IAM al momento della creazione del trigger. Puoi specificare un account di servizio gestito dall'utente che il trigger utilizza come identità predefinita. Se non specifichi un account di servizio durante la creazione del trigger, il trigger utilizza il service account Compute Engine predefinito per la sua identità.
Ti consigliamo di creare un service account gestito dall'utente per avere maggiore controllo e flessibilità nella gestione del trigger.
Crea un account di servizio e annota il suo nome:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME: il nome del service account. Questo nome viene visualizzato nell'indirizzo email che identifica il account di servizio.DESCRIPTION: una descrizione facoltativa del account di servizioDISPLAY_NAME: il nome di un account di servizio da visualizzare nella console Google Cloud
Concedi il ruolo Destinatario di eventi Eventarc (
roles/eventarc.eventReceiver) al account di servizio associato al trigger Eventarc in modo che il trigger possa ricevere eventi dai provider di eventi.Tieni presente che non devi concedere il ruolo Ricevitore eventi Eventarc 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_NAMEcon il nome del account di servizio che hai annotato nel passaggio precedente.
Concedere le autorizzazioni del servizio Cloud Run
Per impostazione predefinita, tutti i servizi Cloud Run vengono implementati in modalità privata, il che significa che non è possibile accedervi senza fornire le credenziali di autenticazione nella richiesta. Per i progetti con policy dell'organizzazione per la condivisione limitata dei domini, utilizza un servizio di destinazione Cloud Run autenticato anziché uno che consenta l'accesso pubblico (non autenticato).
Per impostazione predefinita, i servizi Cloud Run possono essere chiamati solo da proprietari del progetto, editor del progetto, amministratori Cloud Run e chiamanti Cloud Run.
Se indirizzi gli eventi a un servizio di destinazione Cloud Run autenticato, concedi il ruolo Cloud Run Invoker (
run.invoker) sul servizio Cloud Run al account di servizio gestito dall'utente associato al 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_NAMEcon il nome del servizio Cloud Run.Se vuoi, puoi concedere il ruolo a tutti i servizi e i job Cloud Run in un progetto Google Cloud . Per saperne di più, consulta la sezione 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 Cloud Run Invoker, il trigger viene creato correttamente ed è attivo. Tuttavia, il trigger 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 ai service agent
Alcuni servizi Google Cloud hanno agenti di servizio che consentono ai servizi di accedere alle tue risorse. Se un'API richiede un service agent, Google lo crea dopo che hai attivato e utilizzato l'API.
Se stai creando un trigger per eventi diretti da Cloud Storage, per supportare la pubblicazione di messaggi in un argomento, concedi il ruolo Pub/Sub Publisher (
roles/pubsub.publisher) nel progetto all'agente di servizio 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
Sostituisci
PROJECT_NUMBERcon il numero del tuo progetto Google Cloud. Puoi trovare il numero di progetto nella pagina Benvenuto della console Google Cloud o eseguendo questo comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Se hai attivato l'agente di servizio Cloud Pub/Sub l'8 aprile 2021 o in una data precedente, per supportare le richieste push Pub/Sub autenticate, concedi il ruolo Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) nel progetto all'agente di servizio Pub/Sub. 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 di più sulle opzioni di controllo dell'accesso in Eventarc.
Scopri di più sulle best practice per l'utilizzo dei service account.
Scopri come descrivere un trigger e verificare il service account associato.