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à sia una risorsa.
Se consideri un account di servizio come un'identità, puoi concedere un ruolo a un account di servizio, consentendogli di accedere a una risorsa (ad esempio un workflow).
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.
Account di servizio predefinito
Ogni workflow è associato a un service account Identity and Access Management (IAM) al momento della creazione del workflow. Se non specifichi un service account durante la creazione del workflow, il workflow utilizza il account di servizio di Compute Engine predefinito per la sua identità. Puoi verificare il account di servizio associato a un workflow. In questo documento, consulta Verifica il service account associato a un workflow.
Ti consigliamo di utilizzare il account di servizio predefinito solo per i test e lo 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 tuo account di servizio sono quelli necessari per accedere alle risorse orchestrate dai tuoi workflow. Per saperne di più, consulta Autorizzazioni service accountin 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 altra entità. Ad esempio, se vuoi consentire al tuo workflow di inviare log a
Cloud Logging, assicurati che al account di servizio che esegue il workflow sia stato
concesso un ruolo che includa l'autorizzazione logging.logEntries.create
(ad esempio, il ruolo Logs Writer). In generale, i ruoli richiesti dal tuo account di servizio dipendono dalle risorse che stai orchestrando con i tuoi workflow. Per determinare quali ruoli sono necessari, consulta la documentazione del prodotto
per la risorsa che stai orchestrando o
scegli i 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ù, consulta
Richiamare i workflow.
Per saperne di più sulla concessione dei ruoli alle entità, inclusi i service account, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Collegare i service account alle risorse
Per creare una risorsa e collegare un account di servizio, devi disporre delle autorizzazioni per creare la risorsa e per collegare il account di servizio 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 ulteriori informazioni, consulta Ruoli per account 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 workflow 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 un confronto tra le due versioni, consulta Confronta le versioni di Cloud Run Functions.
Eseguire il deployment di un workflow 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 abbiano la possibilità di collegare il account di servizio alle risorse. Se hai creato il account di servizio, ti viene concessa automaticamente questa autorizzazione. Per ulteriori informazioni, consulta Ruoli per account di servizio account.
Per ottenere l'autorizzazione necessaria per collegare un service account a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente account di servizio (
roles/iam.serviceAccountUser) nel tuo progetto o nel service account. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.Questo ruolo predefinito contiene l'
iam.serviceAccounts.actAsautorizzazione, necessaria 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 sul 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 Google Cloud progetto che contiene le risorse del workflowPRINCIPAL: un identificatore per l'utente che esegue 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' Google CloudID progetto che contiene il account di servizio.SERVICE_ACCOUNT_NAMEè il nome del service account.
Esegui il deployment del workflow utilizzando il account di servizio personalizzato.
Eseguire il deployment di un workflow con un account di servizio multiprogetto
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 un account di servizio in un progetto a un workflow in un altro progetto. Puoi quindi utilizzare il account di servizio in progetti diversi per eseguire il deployment di un workflow.
Se il account di servizio e le risorse del workflow si trovano in progetti diversi, vai al progetto in cui si trova il account di servizio e procedi come segue:
Nella Google Cloud console, vai alla pagina Policy dell'organizzazione:
Vai a Policy dell'organizzazione
Controlla la policy dell'organizzazione per il progetto e assicurati che il
iam.disableCrossProjectServiceAccountUsagevincolo booleano non venga applicato in modo forzato al progetto. Per saperne di più, consulta Consentire il collegamento 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. In questo modo, il service agent può gestire l'accesso multiprogetto per il account di servizio. Un service agent è l'identità di un determinato Google Cloud servizio per un progetto specifico. Per saperne di più, consulta Service agent.Console
Nella Google Cloud console, vai alla pagina Workflow:
Fai clic su Crea per creare un workflow o seleziona il nome del workflow 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.serviceAccountTokenCreatoral service agent Workflows.
gcloud
Concedi il ruolo
roles/iam.serviceAccountTokenCreatoral service agent 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' Google Cloud ID progetto che contiene il account di servizio.SERVICE_ACCOUNT_NAMEè il nome del account di servizio.
WORKFLOWS_PROJECT_NUMBER: il Google Cloud numero del progetto che contiene le risorse del workflow.
Assicurati che tutte le entità che eseguono il deployment dei workflow abbiano la possibilità di collegare il account di servizio alle risorse. Se hai creato il account di servizio, ti viene concessa automaticamente questa autorizzazione. Per ulteriori informazioni, consulta Ruoli per account di servizio account.
Per ottenere l'autorizzazione necessaria per collegare un service account a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente account di servizio (
roles/iam.serviceAccountUser) nel tuo progetto o nel service account. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.Questo ruolo predefinito contiene l'
iam.serviceAccounts.actAsautorizzazione, necessaria per collegare un account di servizio a una risorsa.Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Console
Nella Google Cloud console, vai alla pagina Workflow:
Fai clic su Crea per creare un workflow o seleziona il nome del workflow 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.serviceAccountUsernel 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 sul 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 che contiene le risorse del workflow Google CloudPRINCIPAL: un identificatore per l'utente che esegue 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' Google Cloud ID progetto che contiene il account di servizio.SERVICE_ACCOUNT_NAMEè il nome del account di servizio.
Esegui il deployment del workflow utilizzando il account di servizio multiprogetto.
Verificare il account di servizio associato a un workflow
Puoi verificare quale account di servizio è associato a un determinato workflow.
Console
Nella Google Cloud console, vai alla pagina Workflow:
Nella pagina Workflow, fai clic sul nome del workflow.
Nella pagina Dettagli workflow, fai clic sulla scheda Dettagli.
Viene visualizzato il account di servizio associato al workflow.
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 workflow, 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: [...]