Workflows utilizza gli account di servizio per fornire l'accesso dei flussi di lavoro alle risorse Google Cloud. Gli account di servizio sono speciali account che fungono da identità di una persona diversa, ad esempio una funzione, un'applicazione o una VM. Ti offrono un modo per autenticare queste persone. R l'account di servizio può essere considerato sia un'identità sia una risorsa.
Quando pensi a un account di servizio come a un'identità, puoi concedere un ruolo a un account di servizio, consentendogli di accedere a una risorsa (ad esempio un flusso di lavoro).
Quando si considera un account di servizio come una risorsa, è possibile concedere ruoli ad accedere all'account di servizio o a gestirlo.
Un account di servizio è identificato dal suo indirizzo email, che è univoco per .
Per ulteriori informazioni sulla configurazione dell'autenticazione con un account vedi l'applicazione Autentica come account di servizio.
Account di servizio predefinito
Ogni flusso di lavoro è associato a un servizio Identity and Access Management (IAM) al momento della creazione del flusso di lavoro. Se non specifichi un servizio durante la creazione del flusso di lavoro, quest'ultimo utilizza il valore predefinito l'account di servizio Compute Engine per la propria identità. Puoi verificare lo stato del flusso di lavoro e l'account di servizio associato. In questo documento, vedi Verifica l'account di servizio associato a un flusso di lavoro.
Ti consigliamo di utilizzare l'account di servizio predefinito per i test e lo sviluppo . Per gli ambienti di produzione, consigliamo vivamente di creare una nuova account di servizio e la concessione di uno o più ruoli IAM contengono autorizzazioni minime richieste per la gestione dei flussi di lavoro.
Autorizzazioni account di servizio
Poiché gli account di servizio sono identità, puoi consentire a un account di servizio di accedere
risorse del tuo progetto assegnandogli un ruolo, proprio come faresti per qualsiasi
un'altra entità. Ad esempio, se vuoi consentire al tuo flusso di lavoro di inviare log
Cloud Logging, assicurati che l'account di servizio che esegue il flusso di lavoro abbia
ti è stato concesso un ruolo che include l'autorizzazione logging.logEntries.create
(ad esempio, il ruolo Logs Writer
).
Tieni presente che l'account di servizio del flusso di lavoro non richiede il workflows.invoker
, a meno che il flusso di lavoro non richiami se stesso o altri flussi di lavoro (ovvero crei
nuove esecuzioni del flusso di lavoro). Per ulteriori informazioni, vedi
Richiama Workflows.
Per saperne di più sulla concessione dei ruoli alle entità, inclusi gli account di servizio, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Collegamento degli account di servizio alle risorse
Per creare una risorsa e collegare un account di servizio, devi disporre delle autorizzazioni necessarie
creare la risorsa e collegare l'account di servizio alla risorsa.
L'autorizzazione per collegare l'account di servizio a una risorsa è fornita da qualsiasi ruolo
che include l'autorizzazione iam.serviceAccounts.actAs
.
Per ulteriori informazioni, vedi Ruoli per l'autenticazione dell'account di servizio.
Richiama Cloud Functions (2nd gen)
In Cloud Functions (2nd gen), le autorizzazioni di chiamata sono disponibili gestendo
dal servizio Cloud Run sottostante. Se il tuo flusso di lavoro richiama un
al servizio Cloud Function (2ª generazione.), non è necessario concedere
l'account di servizio del chiamante, l'invoker di Cloud Functions
(roles/cloudfunctions.invoker
). Devi invece concedere
Ruolo Invoker di Cloud Run (roles/run.invoker
).
Per ulteriori informazioni, vedi Confronto tra le versioni di Cloud 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 flessibilità nel controllare l'accesso al flusso di lavoro.
Crea l'account di servizio e annotarne il nome.
Concedere l'account di servizio i ruoli appropriati, in base alle risorse a cui deve accedere il flusso di lavoro per svolgere il proprio lavoro.
Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro abbiano la possibilità di collegare l'account di servizio alle risorse. Se hai creato tu l'account di servizio, ha concesso automaticamente questa autorizzazione. Per ulteriori informazioni, vedi Ruoli per l'autenticazione basata su account di servizio.
Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti Ruolo IAM Utente account di servizio (
roles/iam.serviceAccountUser
) nel progetto o nell'account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.Questo ruolo predefinito contiene
iam.serviceAccounts.actAs
, che è necessario per collegare un account di servizio a una risorsa.Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati altri ruoli predefiniti.
Concedi il ruolo nel progetto:
gcloud projects add-iam-policy-binding WORKFLOWS_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 SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Sostituisci quanto segue:
WORKFLOWS_PROJECT_ID
: il tuo progetto Google Cloud ID che contiene le risorse del flusso di lavoroPRINCIPAL
: un identificatore per l'utente che ha eseguito il 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
: la risorsa completa del nome dell'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
è Google Cloud all'ID progetto che contiene l'account di servizio.SERVICE_ACCOUNT_NAME
è il nome del servizio .
Esegui il deployment del flusso di lavoro utilizzando l'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 risorsa in un altro progetto. Le seguenti istruzioni mostrano come allegare da un account di servizio in un progetto a un flusso di lavoro in un altro progetto. Puoi quindi usare l'account di servizio 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 quanto segue:
Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione:
Vai a Criteri dell'organizzazione
Consulta i criteri dell'organizzazione per il progetto e garantire che Il vincolo booleano
iam.disableCrossProjectServiceAccountUsage
non è per il progetto. Per ulteriori informazioni, vedi Abilita il collegamento degli account di servizio tra progetti.Crea l'account di servizio e annotarne il nome.
Concedere l'account di servizio i ruoli appropriati, in base alle risorse a cui deve accedere il flusso di lavoro per svolgere il proprio lavoro.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator
) a Workflows dell'agente di servizio di servizio di Google Cloud. Consente all'agente di servizio di gestire i progetti l'accesso per l'account di servizio. Un agente di servizio è l'identità di un servizio Google Cloud per un particolare progetto. Per ulteriori informazioni, vedi Agenti di servizio.Console
Nella console Google Cloud, vai a Workflows pagina:
Fai clic su
Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che che vuoi aggiornare.Nell'elenco Account di servizio, fai clic su Cambia progetto.
Seleziona un account di servizio da un altro progetto.
Se richiesto, concedi il ruolo
roles/iam.serviceAccountTokenCreator
a l'agente di servizio Workflows.
gcloud
Concedi il ruolo
roles/iam.serviceAccountTokenCreator
a 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
: la totalità nome risorsa dell'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
è il ID progetto Google Cloud che contiene l'account di servizio.SERVICE_ACCOUNT_NAME
è il nome del l'account di servizio.
WORKFLOWS_PROJECT_NUMBER
: il Numero di progetto Google Cloud che contiene le risorse del flusso di lavoro.
Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro abbiano la possibilità di collegare l'account di servizio alle risorse. Se hai creato tu l'account di servizio, ha concesso automaticamente questa autorizzazione. Per ulteriori informazioni, vedi Ruoli per l'autenticazione basata su account di servizio.
Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti Ruolo IAM Utente account di servizio (
roles/iam.serviceAccountUser
) nel progetto o nell'account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.Questo ruolo predefinito contiene
iam.serviceAccounts.actAs
, che è necessario per collegare un account di servizio a una risorsa.Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati altri ruoli predefiniti.
Console
Nella console Google Cloud, vai a Workflows pagina:
Fai clic su
Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che che vuoi aggiornare.Nell'elenco Account di servizio, fai clic su Cambia progetto.
Seleziona un account di servizio da un altro progetto.
Se richiesto, concedi il ruolo
roles/iam.serviceAccountUser
nella progetto.
gcloud
Concedi il ruolo nel progetto:
gcloud projects add-iam-policy-binding WORKFLOWS_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 SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Sostituisci quanto segue:
WORKFLOWS_PROJECT_ID
: il tuo account Google Cloud ID progetto che contiene le risorse del flusso di lavoroPRINCIPAL
: un identificatore per il flusso di lavoro deployment 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
: la totalità nome risorsa dell'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
è il ID progetto Google Cloud che contiene l'account di servizio.SERVICE_ACCOUNT_NAME
è il nome del l'account di servizio.
Esegui il deployment del flusso di lavoro utilizzando l'account di servizio tra progetti.
Verificare l'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 Flussi di lavoro:
Nella pagina Flussi di lavoro, fai clic sul flusso di lavoro. .
Nella pagina Dettagli flusso di lavoro, fai clic sulla scheda Dettagli.
Viene visualizzato l'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 nel tuo flusso di lavoro.Una descrizione completa del flusso di lavoro, incluso l'account di servizio associato, restituito. 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: [...]