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à di un'entità non personale, come una funzione, un'applicazione o una VM. Ti consentono di autenticare queste entità non umane. 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 ulteriori informazioni sulla configurazione dell'autenticazione con un'applicazione di produzione, consulta Autenticarsi come service account.
Service account predefinito
Ogni flusso di lavoro è associato a un account di servizio Identity and Access Management (IAM) al momento della creazione del flusso di lavoro. 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 flusso di lavoro. In questo documento, vedi Verificare il service account associato a un flusso di lavoro.
Ti consigliamo di utilizzare l'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 ulteriori informazioni, 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 che il flusso di lavoro invii i log a Cloud Logging, assicurati che all'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 tuo
account di serviziot dipendono dalle risorse che orchestri con i tuoi
flussi di lavoro. 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ù sull'assegnazione dei ruoli alle entità, inclusi i service account, consulta Gestire 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 ulteriori informazioni, consulta Ruoli per laccount di servizio account.
Richiamare Cloud Run Functions
Nelle funzioni Cloud Run, le autorizzazioni di chiamata sono disponibili
gestendo il servizio Cloud Run sottostante. Se il tuo flusso di lavoro richiama
un servizio di funzioni Cloud Run, non devi concedere all'account di servizio
del chiamante il ruolo Invoker di Cloud Functions
(roles/cloudfunctions.invoker
). Devi invece concedere il ruolo
Invoker di Cloud Run (roles/run.invoker
).
Per saperne di più, consulta la pagina Confronto tra Cloud Run Functions.
Esegui il deployment di un flusso di lavoro con un account di servizio personalizzato
Puoi creare un account di servizio gestito dall'utente per avere maggiore flessibilità nel controllo dell'accesso al tuo flusso di lavoro.
Crea il tuo service account e annota il suo nome.
Concedi al service account i ruoli appropriati, in base alle risorse a cui deve accedere il flusso di lavoro per svolgere il suo lavoro.
Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro possano collegare il account di servizio alle risorse. Se hai creato l'account di servizio, questa autorizzazione ti viene concessa automaticamente. Per ulteriori informazioni, vedi 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
) nel tuo progetto o nel 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.actAs
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 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
: il tuo ID Google Cloud progetto che contiene le risorse del flusso di lavoroPRINCIPAL
: un identificatore per il programma di deployment del flusso di lavoro nel formatouser|group|serviceAccount:email
odomain:domain
. Ad esempio:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain: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.com
Dove:
SERVICE_ACCOUNT_PROJECT_ID
è l' Google Cloud ID progetto che contiene il account di servizio.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 l'account di servizio e le risorse del flusso di lavoro si trovano in progetti diversi, dal progetto in cui si trova l'account di servizio, completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Policy dell'organizzazione:
Vai a Policy dell'organizzazione
Controlla la policy dell'organizzazione per il progetto e assicurati che il vincolo booleano
iam.disableCrossProjectServiceAccountUsage
non sia applicato in modo forzato al progetto. Per maggiori informazioni, vedi Consentire l'allegato di service account tra progetti.Crea il tuo service account e annota il suo nome.
Concedi al service account i ruoli appropriati, in base alle risorse a cui deve accedere il flusso di lavoro per svolgere il suo lavoro.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator
) all'agente di servizio Workflows. Ciò consente all'agente di servizio di gestire l'accesso tra progetti per ilaccount di serviziot. Un service agent è l'identità di un determinato servizioGoogle Cloud per un progetto specifico. Per ulteriori informazioni, consulta la sezione Agenti di servizio.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.serviceAccountTokenCreator
all'agente di servizio Workflows.
gcloud
Concedi il ruolo
roles/iam.serviceAccountTokenCreator
all'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.com
Dove:
SERVICE_ACCOUNT_PROJECT_ID
è l'ID progetto Google Cloud che contiene ilaccount di serviziot.SERVICE_ACCOUNT_NAME
è il nome dell'account di servizio.
WORKFLOWS_PROJECT_NUMBER
: il Google Cloud numero di progetto che contiene le risorse del flusso di lavoro.
Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro possano collegare il account di servizio alle risorse. Se hai creato l'account di servizio, questa autorizzazione ti viene concessa automaticamente. Per ulteriori informazioni, vedi 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
) nel tuo progetto o nel 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.actAs
necessaria 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.serviceAccountUser
sul 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
: il tuo ID progetto Google Cloud che contiene le risorse del flusso di lavoroPRINCIPAL
: un identificatore per il deployer del flusso di lavoro nel formatouser|group|serviceAccount:email
odomain:domain
. Ad esempio:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain: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.com
Dove:
SERVICE_ACCOUNT_PROJECT_ID
è l'ID progetto Google Cloud che contiene ilaccount di serviziot.SERVICE_ACCOUNT_NAME
è il nome dell'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 Workflows:
Nella pagina Flussi di lavoro, fai clic sul nome del flusso di lavoro.
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_WORKFLOW
con il nome del tuo flusso di lavoro.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: [...]