Ruoli e autorizzazioni per le destinazioni di Cloud Run

Questo documento mostra come concedere ruoli e autorizzazioni di Identity and Access Management (IAM) per supportare il routing degli eventi da Google Cloud e altre origini ai servizi Cloud Run utilizzando Eventarc:

  1. Concedi le autorizzazioni a livello di progetto all'entità che richiama le API Eventarc (ad esempio, il creatore del trigger Eventarc):

    1. Il ruolo Amministratore Eventarc consente il controllo completo su tutte le risorse Eventarc, inclusa la specifica di un account di servizio per il trigger quando lo crei.
    2. Il ruolo Utente account di servizio consente a un'entità di impersonare e utilizzare un account di servizio. L'account di servizio è associato a un trigger Eventarc e rappresenta l'identità del trigger.
  2. Concedi le autorizzazioni di trigger Eventarc all'account di servizio del trigger: il ruolo Eventarc Event ricevir consente al trigger Eventarc di ricevere eventi dai provider di eventi. Non è necessario concedere il ruolo se esegui il routing di eventi diretti da Cloud Pub/Sub.

  3. Concedi le autorizzazioni di servizio Cloud Run all'account di servizio del trigger: il ruolo Invoker di Cloud Run consente al trigger Eventarc di chiamare il servizio Cloud Run di destinazione. Questo si applica se esegui il routing degli eventi a un servizio Cloud Run autenticato.

  4. Concedi le autorizzazioni agli agenti dei servizi Google:

    1. Se stai creando un trigger per eventi diretti da Cloud Storage, concedi il ruolo Publisher Pub/Sub.
    2. Se hai abilitato l'agente di servizio Cloud Pub/Sub entro l'8 aprile 2021, concedi il ruolo Creatore token account di servizio.

Per ulteriori informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso. Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.

Concedi autorizzazioni a livello di progetto

Se sei l'autore del progetto, ti viene concesso il ruolo Proprietario di base (roles/owner). Per impostazione predefinita, questo ruolo include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle risorse Google Cloud. In caso contrario, i ruoli obbligatori devono essere concessi da un amministratore della risorsa appropriata all'entità appropriata (detta anche membro).

Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per applicazioni e carichi di lavoro di computing). Ogni entità ha il proprio identificatore, che in genere è un indirizzo email.

  1. Il ruolo Amministratore Eventarc (roles/eventarc.admin) consente il controllo completo su tutte le risorse Eventarc.

    Concedi il ruolo nel 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 l'autore dell'attivatore, che in genere ha il seguente formato: PRINCIPAL_TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei possibili valori PRINCIPAL_TYPE, consulta il riferimento sull'associazione dei criteri.
  2. Il ruolo Utente account di servizio (roles/iam.serviceAccountUser) consente a un'entità di eseguire operazioni come account di servizio.

    Ad esempio, questo ruolo deve essere necessario per associare un account di servizio gestito dall'utente a un trigger Eventarc. Ti serve anche per poter agire come account di servizio di runtime durante il deployment di un servizio Cloud Run. Per saperne di più, consulta Ruoli per l'autenticazione degli account di servizio.

    Puoi concedere il ruolo nel progetto per consentire all'entità di impersonare più account di servizio o concedere il ruolo all'account di servizio per consentire all'entità di impersonare solo un account di servizio specifico.

    Concedi il ruolo nel progetto:

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

    In alternativa, concedi il ruolo nell'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 l'account di servizio.
    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio.

Concedi le autorizzazioni di 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 deve utilizzare come identità predefinita. Se non specifichi un account di servizio durante la creazione del trigger, quest'ultimo utilizza l'account di servizio predefinito di Compute Engine per la propria identità.

Ti consigliamo di creare il tuo account di servizio gestito dall'utente per avere maggiore controllo e flessibilità nella gestione del trigger.

  1. Crea un account di servizio e prendi nota del suo 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 di servizio. Questo nome viene visualizzato nell'indirizzo email che identifica l'account di servizio.
    • DESCRIPTION: una descrizione facoltativa dell'account di servizio
    • DISPLAY_NAME: il nome di un account di servizio da visualizzare nella console Google Cloud
  2. Concedi il ruolo Ricevitore eventi Eventarc (roles/eventarc.eventReceiver) nel progetto all'account di servizio associato al trigger Eventarc in modo che il trigger possa ricevere eventi dai provider di eventi.

    Tieni presente che non è necessario concedere il ruolo Eventarc Event Ricevir se esegui il routing di 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 di servizio Cloud Run

Per impostazione predefinita, il deployment di tutti i servizi Cloud Run viene eseguito privatamente, il che significa che non è possibile accedervi senza fornire credenziali di autenticazione nella richiesta. Per i progetti con criteri dell'organizzazione di condivisione limitata al dominio, utilizza un servizio di destinazione Cloud Run autenticato anziché uno che consente l'accesso pubblico (non autenticato).

Per impostazione predefinita, i servizi Cloud Run possono essere richiamati solo da proprietari di progetto, editor di progetto, amministratori di Cloud Run e Invoker di Cloud Run.

  1. Se esegui il routing degli eventi a un servizio di destinazione Cloud Run autenticato, concedi il ruolo Invoker di Cloud Run (run.invoker) nel 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.

  2. Facoltativamente, puoi concedere il ruolo su tutti i servizi e i job Cloud Run in un progetto Google Cloud. Per saperne di più, consulta Controllare l'accesso a tutti i servizi e i job in un progetto.

Tieni presente che se crei un trigger per un servizio Cloud Run autenticato senza concedere il ruolo Invoker di Cloud Run, il trigger viene creato correttamente ed è attivo. Tuttavia, il trigger non funzionerà come previsto e nei log verrà 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 dei servizi Google

Alcuni servizi Google Cloud hanno account di servizio gestiti da Google che consentono ai servizi di accedere alle tue risorse. Questi account di servizio sono noti come agenti di servizio. Se un'API richiede un agente di servizio, Google lo crea dopo che hai attivato e utilizzato l'API.

  1. Se stai creando un trigger per eventi diretti da Cloud Storage, al fine di supportare la pubblicazione di messaggi in un argomento, concedi il ruolo Publisher Pub/Sub (roles/pubsub.publisher) per il 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_NUMBER con il numero del tuo progetto Google Cloud. Puoi trovare il numero del progetto nella pagina Dashboard della console Google Cloud o eseguendo il seguente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Se hai abilitato l'agente di servizio Cloud Pub/Sub entro l'8 aprile 2021 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) per il progetto. In caso contrario, questo ruolo è 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