Concedi un'autorizzazione di flusso di lavoro per accedere alle risorse Google Cloud

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 entità non umane. Un account di servizio può essere considerato sia un'identità sia una risorsa.

  • Se 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).

  • Se consideri un account di servizio come una risorsa, puoi assegnare ruoli ad altri utenti per accedere o gestire l'account di servizio.

Un account di servizio è identificato dal suo indirizzo email, che è univoco per .

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

Service account predefinito

Ogni flusso di lavoro è associato a un account di servizio Identity and Access Management (IAM) al momento della creazione. Se non specifichi un account di servizio durante la creazione del flusso di lavoro, il flusso di lavoro utilizza l'account di servizio Compute Engine predefinito per la sua identità. Puoi verificare lo stato del flusso di lavoro e l'account di servizio associato. In questo documento, consulta Verificare 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 Deve contenere le autorizzazioni minime richieste per la gestione dei flussi di lavoro.

  • Gli unici ruoli richiesti dal tuo account di servizio sono quelli richiesti per accedere le risorse orchestrate dai tuoi flussi di lavoro. Per ulteriori informazioni, in questo documento, vedi Autorizzazioni dell'account di servizio.

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 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 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 le tue procedure. Per determinare quali ruoli sono necessari, esamina il prodotto documentazione per la risorsa che stai orchestrando scegli i ruoli predefiniti.

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 saperne di più, consulta Eseguire chiamate a 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 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 ulteriori informazioni, vedi Ruoli per l'autenticazione dell'account di servizio.

Richiama le funzioni di Cloud Run (2ª generazione)

Nelle funzioni Cloud Run (2ª generazione.), sono disponibili le autorizzazioni di chiamata gestendo dal servizio Cloud Run sottostante. Se il tuo flusso di lavoro richiama un servizio di funzioni Cloud Run (2ª gen.), non devi concedere all'account di servizio dell'autore della chiamata il ruolo Invoker (roles/cloudfunctions.invoker) per le funzioni Cloud Run. Devi invece concedere Ruolo Invoker di Cloud Run (roles/run.invoker).

Per ulteriori informazioni, vedi Confronto delle versioni delle funzioni di Cloud Run.

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 controllare l'accesso al tuo flusso di lavoro.

  1. Crea l'account di servizio e annotarne il nome.

  2. Concede all'account di servizio i ruoli appropriati, in base alle risorse a cui deve accedere il flusso di lavoro per svolgere la sua attività.

  3. 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 associare un account di servizio a una risorsa, chiedi all'amministratore di concederti il 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 a progetti, cartelle e organizzazioni.

    Questo ruolo predefinito contiene iam.serviceAccounts.actAs autorizzazione, che è obbligatorio 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 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 progetto Google Cloud ID che contiene le risorse del flusso di lavoro
    • PRINCIPAL: un identificatore per il programma di implementazione 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: 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 è l'ID progetto Google Cloud che contiene l'account di servizio.
      • SERVICE_ACCOUNT_NAME è il nome del 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 riportate di seguito mostrano come collegare 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 di 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

    Consulta i criteri dell'organizzazione per il progetto e garantire che Il vincolo booleano iam.disableCrossProjectServiceAccountUsage non è per il progetto. Per ulteriori informazioni, consulta Abilitare l'attacco degli account di servizio tra progetti.

  2. Crea il tuo account di servizio e annota il nome.

  3. 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.

  4. Concedi il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) a Workflows dell'agente di servizio di servizio di Google Cloud. 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 determinato progetto. Per ulteriori informazioni, vedi Agenti di servizio.

    Console

    1. Nella console Google Cloud, vai a Workflows pagina:

      Vai a Flussi di lavoro

    2. Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che vuoi 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 a l'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: 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 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 abbiano la possibilità di collegare l'account di servizio alle risorse. Se hai creato l'account di servizio, ti viene concessa automaticamente questa autorizzazione. 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 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 a progetti, cartelle e organizzazioni.

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

    Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati altri ruoli predefiniti.

    Console

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

      Vai a Flussi di lavoro

    2. Fai clic su Crea per creare un flusso di lavoro o seleziona il nome del flusso di lavoro che che vuoi 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 nella progetto.

    gcloud

    Concedi il ruolo al 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 account Google Cloud ID progetto che contiene le risorse del flusso di lavoro
    • PRINCIPAL: un identificatore per il flusso di lavoro deployment 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: 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 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 Workflows:

    Vai a Flussi di lavoro

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

  3. Nella pagina Dettagli del 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 un flusso di lavoro di machine learning.

    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: [...]

Passaggi successivi