Workflows utilizza i service account per concedere ai workflow l'accesso alle Google Cloud risorse. I service account sono account speciali che fungono da identità non corrispondenti a una persona, ad esempio una funzione, un'applicazione o una VM. Ti offrono un modo per autenticare questi tipi di identità. Un account di servizio può essere considerato sia un'identità che una risorsa.
Se consideri un account di servizio come un'identità, puoi concedere un ruolo a unaccount di serviziot, consentendogli di accedere a una risorsa (ad esempio un flusso di lavoro).
Se consideri un account di servizio come una risorsa, puoi concedere ruoli ad altri utenti per accedere o gestire quel account di servizio.
Un account di servizio è identificato dal rispettivo indirizzo email, che è univoco per l'account.
Per saperne di più sulla configurazione dell'autenticazione con un'applicazione di produzione, consulta Autenticarsi come service account.
Service account predefinito
Ogni flusso di lavoro è associato a un service account Identity and Access Management (IAM) al momento della creazione. Se non specifichi un service account durante la creazione del flusso di lavoro, quest'ultimo utilizza il account di servizio Compute Engine predefinito per la sua identità. Puoi verificare il account di servizio associato a un workflow. In questo documento, consulta Verificare il service account associato a un flusso di lavoro.
Ti consigliamo di utilizzare il account di servizio predefinito solo per test e sviluppo. Per gli ambienti di produzione, ti consigliamo vivamente di creare un nuovo account di servizio e di concedergli uno o più ruoli IAM che contengano le autorizzazioni minime richieste per la gestione dei workflow.
Gli unici ruoli richiesti dal account di servizio sono quelli necessari per accedere alle risorse orchestrate dai flussi di lavoro. Per saperne di più, consulta la sezione Autorizzazioni del service account di questo documento.
Autorizzazioni service account
Poiché i service account sono identità, puoi consentire a un account di servizio di accedere
alle risorse del tuo progetto concedendogli un ruolo, proprio come faresti per qualsiasi
altro principal. Ad esempio, se vuoi consentire al tuo flusso di lavoro di inviare log a Cloud Logging, assicurati che al account di servizio che esegue il flusso di lavoro sia stato concesso un ruolo che includa l'autorizzazione logging.logEntries.create (ad esempio, il ruolo Logs Writer). In generale, i ruoli richiesti dal account di servizio dipendono dalle risorse che orchestri con i tuoi workflow. Per determinare quali ruoli sono necessari, consulta la documentazione del prodotto per la risorsa che stai orchestrando oppure scegli ruoli predefiniti.
Tieni presente che il account di servizio del workflow non richiede il ruolo workflows.invoker, a meno che il workflow non richiami se stesso o altri workflow (ovvero crei nuove esecuzioni del workflow). Per saperne di più, vedi
Richiamare i workflow.
Per saperne di più sulla concessione dei ruoli alle entità, inclusi i service account, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Collegamento di service account alle risorse
Per creare una risorsa e collegare un account di servizio, devi disporre delle autorizzazioni per
creare la risorsa e collegare ilaccount di serviziot alla risorsa.
L'autorizzazione per collegare il account di servizio a una risorsa viene fornita da qualsiasi ruolo
che includa l'autorizzazione iam.serviceAccounts.actAs.
Per saperne di più, consulta Ruoli per laccount di servizio account.
Richiamare Cloud Run Functions
In Cloud Run Functions, le autorizzazioni di chiamata sono disponibili gestendo il servizio Cloud Run sottostante. Se il tuo flusso di lavoro richiama un servizio Cloud Run Functions, non devi concedere al account di servizio del chiamante il ruolo Cloud Functions Invoker (roles/cloudfunctions.invoker). Devi invece concedere il ruolo
Cloud Run Invoker (roles/run.invoker).
Per saperne di più, consulta la pagina Confronta le versioni di Cloud Run Functions.
Esegui il deployment di un flusso di lavoro con un account di servizio personalizzato
Puoi creare il tuo account di servizio gestito dall'utente per avere una maggiore flessibilità nel controllo dell'accesso al tuo workflow.
Crea il service account e annota il suo nome.
Concedi al service account i ruoli appropriati, in base alle risorse a cui deve accedere il workflow per svolgere le sue operazioni.
Assicurati che tutte le entità che eseguono il deployment dei workflow possano collegare il account di servizio alle risorse. Se hai creato il account di servizio, questa autorizzazione ti viene concessa automaticamente. Per saperne di più, consulta Ruoli per laccount di servizio account.
Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente service account (
roles/iam.serviceAccountUser) sul tuo progetto o sul account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Questo ruolo predefinito contiene l'autorizzazione
iam.serviceAccounts.actAsnecessaria per collegare un account di servizio a una risorsa.Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Concedi il ruolo sul progetto:
gcloud projects add-iam-policy-binding WORKFLOWS_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 SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Sostituisci quanto segue:
WORKFLOWS_PROJECT_ID: l'ID del tuo progetto Google Cloud che contiene le risorse del flusso di lavoroPRINCIPAL: un identificatore per il deployment del workflow nel formatouser|group|serviceAccount:emailodomain:domain. Ad esempio:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME: il nome completo della risorsa del account di servizio. Ad esempio:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comDove:
SERVICE_ACCOUNT_PROJECT_IDè l'ID progetto Google Cloud che contiene ilaccount di serviziot.SERVICE_ACCOUNT_NAMEè il nome del service account.
Esegui il deployment del flusso di lavoro utilizzando il account di servizio personalizzato.
Esegui il deployment di un flusso di lavoro con un account di servizio tra progetti
Per impostazione predefinita, non puoi creare un account di servizio in un progetto e collegarlo a una risorsa in un altro progetto. Le seguenti istruzioni mostrano come collegare unaccount di serviziot in un progetto a un flusso di lavoro in un altro progetto. Puoi quindi utilizzare ilaccount di serviziot in diversi progetti per eseguire il deployment di un flusso di lavoro.
Se il account di servizio e le risorse del flusso di lavoro si trovano in progetti diversi, dal progetto in cui si trova ilaccount di serviziot, completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Policy dell'organizzazione:
Vai a Policy dell'organizzazione
Controlla il criterio dell'organizzazione per il progetto e assicurati che il vincolo booleano
iam.disableCrossProjectServiceAccountUsagenon sia applicato in modo forzato al progetto. Per saperne di più, consulta Abilitare l'associazione dei service account tra progetti.Crea il service account e annota il suo nome.
Concedi al service account i ruoli appropriati, in base alle risorse a cui deve accedere il workflow per svolgere le sue operazioni.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator) al service agent Workflows. Ciò consente all'agente di servizio di gestire l'accesso tra progetti per ilaccount di serviziot. Un agente di servizio è l'identità di un determinato servizioGoogle Cloud per un progetto specifico. Per saperne di più, consulta Service agent.Console
Nella console Google Cloud , vai alla pagina Workflows:
Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che vuoi aggiornare.
Nell'elenco Service account, fai clic su Cambia progetto.
Seleziona un account di servizio da un altro progetto.
Se richiesto, concedi il ruolo
roles/iam.serviceAccountTokenCreatorall'agente di servizio Workflows.
gcloud
Concedi il ruolo
roles/iam.serviceAccountTokenCreatorall'agente di servizio Workflows:gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
Sostituisci quanto segue:
SERVICE_ACCOUNT_RESOURCE_NAME: il nome completo della risorsa del account di servizio. Ad esempio:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comDove:
SERVICE_ACCOUNT_PROJECT_IDè l'ID progetto Google Cloud che contiene il account di servizio.SERVICE_ACCOUNT_NAMEè il nome del account di servizio.
WORKFLOWS_PROJECT_NUMBER: il numero di progettoGoogle Cloud che contiene le risorse del flusso di lavoro.
Assicurati che tutte le entità che eseguono il deployment dei workflow possano collegare il account di servizio alle risorse. Se hai creato il account di servizio, questa autorizzazione ti viene concessa automaticamente. Per saperne di più, consulta Ruoli per laccount di servizio account.
Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente service account (
roles/iam.serviceAccountUser) sul tuo progetto o sul account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Questo ruolo predefinito contiene l'autorizzazione
iam.serviceAccounts.actAsnecessaria per collegare un account di servizio a una risorsa.Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Console
Nella console Google Cloud , vai alla pagina Workflows:
Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che vuoi aggiornare.
Nell'elenco Service account, fai clic su Cambia progetto.
Seleziona un account di servizio da un altro progetto.
Se richiesto, concedi il ruolo
roles/iam.serviceAccountUsersul progetto.
gcloud
Concedi il ruolo sul progetto:
gcloud projects add-iam-policy-binding WORKFLOWS_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 SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Sostituisci quanto segue:
WORKFLOWS_PROJECT_ID: l'ID progetto Google Cloud che contiene le risorse del flusso di lavoroPRINCIPAL: un identificatore per il deployer del workflow nel formatouser|group|serviceAccount:emailodomain:domain. Ad esempio:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME: il nome completo della risorsa del account di servizio. Ad esempio:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comDove:
SERVICE_ACCOUNT_PROJECT_IDè l'ID progetto Google Cloud che contiene il account di servizio.SERVICE_ACCOUNT_NAMEè il nome del account di servizio.
Esegui il deployment del flusso di lavoro utilizzando il account di servizio tra i progetti.
Verificare il account di servizio associato a un flusso di lavoro
Puoi verificare quale account di servizio è associato a un determinato flusso di lavoro.
Console
Nella console Google Cloud , vai alla pagina Workflow:
Nella pagina Flussi di lavoro, fai clic sul nome del workflow.
Nella pagina Dettagli del flusso di lavoro, fai clic sulla scheda Dettagli.
Viene visualizzato il account di servizio associato al flusso di lavoro.
gcloud
Apri un terminale.
Inserisci questo comando:
gcloud workflows describe MY_WORKFLOW
Sostituisci
MY_WORKFLOWcon il nome del tuo workflow.Viene restituita una descrizione completa del flusso di lavoro, incluso il account di servizio associato. Ad esempio:
createTime: '2020-06-05T23:45:34.154213774Z' name: projects/myProject/locations/us-central1/workflows/myWorkflow serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com sourceContents: [...]