Concedi l'autorizzazione dei flussi di lavoro per accedere alle risorse Google Cloud

Workflows utilizza gli account di servizio per concedere ai flussi di lavoro l'accesso alle risorse Google Cloud. Gli account di servizio sono account speciali che fungono da identità di una persona, ad esempio una funzione, un'applicazione o una VM. Offrono un modo per autenticare questi non individui. Un account di servizio può essere considerato sia un'identità che 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 pensi a un account di servizio come a una risorsa, puoi concedere ruoli ad altri utenti in modo che possano accedervi o gestirli.

Un account di servizio è identificato dal relativo indirizzo email, univoco dell'account.

Per ulteriori informazioni sulla configurazione dell'autenticazione con un'applicazione di produzione, consulta Autentica come account di servizio.

Account di servizio 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 account di servizio durante la creazione del flusso di lavoro, quest'ultimo utilizza l'account di servizio predefinito di Compute Engine per l'identità. Puoi verificare l'account di servizio associato a un flusso di lavoro. In questo documento, consulta Verificare l'account di servizio associato di un flusso di lavoro.

Ti consigliamo di utilizzare l'account di servizio predefinito solo per test e sviluppo.

Autorizzazioni account di servizio

Poiché gli account di servizio sono identità, puoi consentire a un account di servizio di accedere alle risorse nel tuo progetto assegnando un ruolo, proprio come faresti per qualsiasi altra entità. Ad esempio, se vuoi consentire al tuo flusso di lavoro di inviare log a Cloud Logging, assicurati che all'account di servizio che esegue il flusso di lavoro sia 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 ruolo workflows.invoker, a meno che il flusso di lavoro non richiami se stesso o altri flussi di lavoro (ovvero, crei nuove esecuzioni di flussi di lavoro). Per ulteriori informazioni, consulta Richiamare flussi di lavoro.

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 per 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 maggiori informazioni, consulta Ruoli per l'autenticazione degli account di servizio.

Richiama Cloud Functions (2nd gen)

In Cloud Functions (2nd gen), le autorizzazioni di chiamata sono disponibili gestendo il servizio Cloud Run sottostante. Se il tuo flusso di lavoro richiama un servizio Cloud Function (2ª generazione), non è necessario concedere all'account di servizio del chiamante il ruolo Invoker di Cloud Functions (roles/cloudfunctions.invoker). Devi concedere il ruolo Invoker di Cloud Run (roles/run.invoker).

Per maggiori informazioni, consulta Confronto delle versioni di Cloud 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 una maggiore flessibilità nel controllo dell'accesso al tuo flusso di lavoro.

  1. Crea il tuo account di servizio e prendi nota del nome.

  2. Concedi all'account di servizio i ruoli appropriati in base alle risorse a cui il flusso di lavoro deve accedere per svolgere il suo lavoro.

  3. Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro possano collegare l'account di servizio alle risorse. Se hai creato tu l'account di servizio, questa autorizzazione ti viene concessa automaticamente. Per ulteriori informazioni, consulta Ruoli per l'autenticazione degli account di servizio.

    Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente account di servizio (roles/iam.serviceAccountUser) per il tuo progetto o l'account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

    Questo ruolo predefinito contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per collegare un account di servizio a una risorsa.

    Potresti anche essere in grado di ottenere questa autorizzazione con i 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 progetto Google Cloud che contiene le risorse del flusso di lavoro
    • PRINCIPAL: un identificatore dell'autore del deployment del flusso di lavoro nel formato user|group|serviceAccount:email o domain: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 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 è l'ID progetto Google Cloud che contiene l'account di servizio.
      • SERVICE_ACCOUNT_NAME è il nome dell'account di servizio.
  4. 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 una risorsa in un altro progetto. Le istruzioni seguenti mostrano come collegare un account di servizio in un progetto a un flusso di lavoro in un altro progetto. In seguito, puoi utilizzare 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, nel progetto in cui si trova l'account di servizio, completa quanto segue:

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione:

    Vai a Criteri dell'organizzazione

    Controlla il criterio dell'organizzazione per il progetto e assicurati che il vincolo booleano iam.disableCrossProjectServiceAccountUsage non sia applicato al progetto. Per maggiori informazioni, consulta Abilitare il collegamento degli account di servizio tra progetti.

  2. Crea il tuo account di servizio e prendi nota del nome.

  3. Concedi all'account di servizio i ruoli appropriati in base alle risorse a cui il flusso di lavoro deve accedere per svolgere il suo lavoro.

  4. Concedi il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) all'agente di servizio Workflows. In questo modo l'agente di servizio può gestire l'accesso tra progetti per l'account di servizio. Un agente di servizio è l'identità di un determinato servizio Google Cloud per un particolare progetto. Per ulteriori informazioni, consulta Agenti di servizio.

    Console

    1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

      Vai a Workflows

    2. Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro da aggiornare.

    3. Nell'elenco Account di servizio, fai clic su Cambia progetto.

    4. Seleziona un account di servizio da un altro progetto.

    5. Se richiesto, concedi il ruolo roles/iam.serviceAccountTokenCreator all'agente di servizio Workflows.

    gcloud

    1. 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 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 è l'ID progetto Google Cloud che contiene l'account di servizio.
        • SERVICE_ACCOUNT_NAME è il nome dell'account di servizio.
      • WORKFLOWS_PROJECT_NUMBER: il numero di progetto Google Cloud che contiene le risorse del flusso di lavoro.

  5. Assicurati che tutte le entità che eseguono il deployment dei flussi di lavoro possano collegare l'account di servizio alle risorse. Se hai creato tu l'account di servizio, questa autorizzazione ti viene concessa automaticamente. Per ulteriori informazioni, consulta Ruoli per l'autenticazione degli account di servizio.

    Per ottenere l'autorizzazione necessaria per collegare un account di servizio a una risorsa, chiedi all'amministratore di concederti il ruolo IAM Utente account di servizio (roles/iam.serviceAccountUser) per il tuo progetto o l'account di servizio. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

    Questo ruolo predefinito contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per collegare un account di servizio a una risorsa.

    Potresti anche essere in grado di ottenere questa autorizzazione con i ruoli personalizzati o altri ruoli predefiniti.

    Console

    1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

      Vai a Workflows

    2. Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro da aggiornare.

    3. Nell'elenco Account di servizio, fai clic su Cambia progetto.

    4. Seleziona un account di servizio da un altro progetto.

    5. Se richiesto, concedi il ruolo roles/iam.serviceAccountUser nel 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 del progetto Google Cloud che contiene le risorse del flusso di lavoro
    • PRINCIPAL: un identificatore del deployment del flusso di lavoro nel formato user|group|serviceAccount:email o domain: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 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 è l'ID progetto Google Cloud che contiene l'account di servizio.
      • SERVICE_ACCOUNT_NAME è il nome dell'account di servizio.
  6. 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

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

    Vai a Workflows

  2. Nella pagina Flussi di lavoro, fai clic sul nome del flusso di lavoro.

  3. Nella pagina Dettagli flusso di lavoro, fai clic sulla scheda Dettagli.

    Viene visualizzato l'account di servizio associato al flusso di lavoro.

gcloud

  1. Apri un terminale.

  2. 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 che include l'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: [...]

Passaggi successivi