Accorder à un workflow l'autorisation d'accéder aux ressources Google Cloud

Workflows utilise des comptes de service pour permettre aux workflows d'accéder aux ressources Google Cloud. Les comptes de service sont des comptes spéciaux qui servent d'identité à une personne autre que personne, comme une fonction, une application ou une VM. Elles vous donnent un moyen d'authentifier ces non-personnes. Un compte de service peut être considéré à la fois comme une identité et une ressource.

  • Lorsque vous considérez un compte de service comme une identité, vous pouvez lui attribuer un rôle, ce qui lui permet d'accéder à une ressource (telle qu'un workflow).

  • Lorsque vous considérez un compte de service comme une ressource, vous pouvez attribuer des rôles à d'autres utilisateurs pour qu'ils puissent y accéder ou le gérer.

Un compte de service est identifié par son adresse e-mail, qui est unique au compte.

Pour en savoir plus sur la configuration de l'authentification avec une application de production, consultez S'authentifier en tant que compte de service.

Compte de service par défaut

Chaque workflow est associé à un compte de service Identity and Access Management (IAM) au moment de sa création. Si vous ne spécifiez pas de compte de service lors de la création du workflow, celui-ci utilise le compte de service Compute Engine par défaut pour son identité. Vous pouvez vérifier le compte de service associé à un workflow. Dans ce document, consultez la section Vérifier le compte de service associé à un workflow.

Nous vous recommandons d'utiliser le compte de service par défaut uniquement pour les tests et le développement.

Autorisations de compte de service

Comme les comptes de service sont des identités, vous pouvez autoriser un compte de service à accéder aux ressources de votre projet en lui attribuant un rôle, comme vous le feriez pour n'importe quel autre compte principal. Par exemple, si vous souhaitez autoriser votre workflow à envoyer des journaux à Cloud Logging, assurez-vous qu'un rôle comprenant l'autorisation logging.logEntries.create a été attribué au compte de service exécutant le workflow (par exemple, le rôle Logs Writer).

Notez que le compte de service de workflow ne nécessite pas le rôle workflows.invoker, sauf si le workflow s'appelle lui-même ou appelle d'autres workflows (c'est-à-dire qu'il crée des exécutions de workflow). Pour en savoir plus, consultez la page Appeler des workflows.

Pour en savoir plus sur l'attribution de rôles aux comptes principaux, y compris aux comptes de service, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Rattacher des comptes de service à des ressources

Pour créer une ressource et lui associer un compte de service, vous devez disposer des autorisations nécessaires pour créer cette ressource et lui associer le compte de service. L'autorisation d'associer le compte de service à une ressource est fournie par tout rôle comprenant l'autorisation iam.serviceAccounts.actAs.

Pour en savoir plus, consultez la section Rôles pour l'authentification des comptes de service.

Appeler Cloud Functions (2nd gen)

Dans Cloud Functions (2nd gen), les autorisations d'appel sont disponibles via la gestion du service Cloud Run sous-jacent. Si votre workflow appelle un service Cloud Functions (2e génération), vous n'avez pas besoin d'attribuer le rôle Demandeur Cloud Functions (roles/cloudfunctions.invoker) au compte de service de l'appelant. À la place, vous devez attribuer le rôle Demandeur Cloud Run (roles/run.invoker).

Pour en savoir plus, consultez la page Comparaison des versions de Cloud Functions.

Déployer un workflow avec un compte de service personnalisé

Vous pouvez créer votre propre compte de service géré par l'utilisateur afin de contrôler plus facilement l'accès à votre workflow.

  1. Créez un compte de service et notez son nom.

  2. Attribuez au compte de service les rôles appropriés, en fonction des ressources auxquelles le workflow doit avoir accès pour accomplir son travail.

  3. Assurez-vous que tous les comptes principaux qui déploient des workflows peuvent associer le compte de service aux ressources. Si vous avez créé le compte de service, cette autorisation vous est automatiquement accordée. Pour en savoir plus, consultez la section Rôles pour l'authentification des comptes de service.

    Pour obtenir l'autorisation nécessaire pour associer un compte de service à une ressource, demandez à votre administrateur de vous attribuer le rôle IAM Utilisateur du compte de service (roles/iam.serviceAccountUser) pour votre projet ou le compte de service. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Ce rôle prédéfini contient l'autorisation iam.serviceAccounts.actAs, nécessaire pour associer un compte de service à une ressource.

    Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.

    Attribuez le rôle au projet :

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Ou attribuez le rôle sur le compte de service:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Remplacez les éléments suivants :

    • WORKFLOWS_PROJECT_ID: ID de votre projet Google Cloud contenant les ressources de workflow
    • PRINCIPAL: identifiant du déployeur de workflow au format user|group|serviceAccount:email ou domain:domain. Exemple :

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
    • SERVICE_ACCOUNT_RESOURCE_NAME: nom complet de la ressource du compte de service. Exemple :

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      Où :

      • SERVICE_ACCOUNT_PROJECT_ID correspond à l'ID du projet Google Cloud contenant le compte de service.
      • SERVICE_ACCOUNT_NAME correspond au nom du compte de service.
  4. Déployez votre workflow à l'aide du compte de service personnalisé.

Déployer un workflow avec un compte de service multiprojet

Par défaut, vous ne pouvez pas créer un compte de service dans un projet et l'associer à une ressource d'un autre projet. Les instructions suivantes vous expliquent comment associer un compte de service d'un projet à un workflow d'un autre projet. Vous pouvez ensuite utiliser le compte de service dans différents projets pour déployer un workflow.

Si le compte de service et les ressources de workflow se trouvent dans des projets différents du projet où se trouve le compte de service, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Règles d'administration:

    Accéder à la page Règles d'administration

    Vérifiez la règle d'administration du projet et assurez-vous que la contrainte booléenne iam.disableCrossProjectServiceAccountUsage n'est pas appliquée au niveau du projet. Pour en savoir plus, consultez la section Activer l'association de comptes de service entre plusieurs projets.

  2. Créez un compte de service et notez son nom.

  3. Attribuez au compte de service les rôles appropriés, en fonction des ressources auxquelles le workflow doit avoir accès pour accomplir son travail.

  4. Attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service Workflows. Cela permet à l'agent de service de gérer l'accès inter-projets pour le compte de service. Un agent de service est l'identité d'un service Google Cloud donné pour un projet particulier. Pour en savoir plus, consultez la section Agents de service.

    Console

    1. Dans la console Google Cloud, accédez à la page Workflows:

      Accéder à "Workflows"

    2. Cliquez sur Créer pour créer un workflow ou sélectionnez le nom du workflow que vous souhaitez mettre à jour.

    3. Dans la liste Compte de service, cliquez sur Changer de projet.

    4. Sélectionnez un compte de service dans un autre projet.

    5. Si vous y êtes invité, attribuez le rôle roles/iam.serviceAccountTokenCreator à l'agent de service Workflows.

    gcloud

    1. Attribuez le rôle roles/iam.serviceAccountTokenCreator à l'agent de service 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'

      Remplacez les éléments suivants :

      • SERVICE_ACCOUNT_RESOURCE_NAME : nom complet de ressource du compte de service. Exemple :

        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

        Où :

        • SERVICE_ACCOUNT_PROJECT_ID correspond à l'ID du projet Google Cloud contenant le compte de service.
        • SERVICE_ACCOUNT_NAME est le nom du compte de service.
      • WORKFLOWS_PROJECT_NUMBER: numéro de projet Google Cloud contenant les ressources de workflow.

  5. Assurez-vous que tous les comptes principaux qui déploient des workflows peuvent associer le compte de service aux ressources. Si vous avez créé le compte de service, cette autorisation vous est automatiquement accordée. Pour en savoir plus, consultez la section Rôles pour l'authentification des comptes de service.

    Pour obtenir l'autorisation nécessaire pour associer un compte de service à une ressource, demandez à votre administrateur de vous attribuer le rôle IAM Utilisateur du compte de service (roles/iam.serviceAccountUser) pour votre projet ou le compte de service. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Ce rôle prédéfini contient l'autorisation iam.serviceAccounts.actAs, nécessaire pour associer un compte de service à une ressource.

    Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.

    Console

    1. Dans la console Google Cloud, accédez à la page Workflows:

      Accéder à "Workflows"

    2. Cliquez sur Créer pour créer un workflow ou sélectionnez le nom du workflow que vous souhaitez mettre à jour.

    3. Dans la liste Compte de service, cliquez sur Changer de projet.

    4. Sélectionnez un compte de service dans un autre projet.

    5. Si vous y êtes invité, accordez le rôle roles/iam.serviceAccountUser sur le projet.

    gcloud

    Attribuez le rôle au projet :

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Ou attribuez le rôle sur le compte de service:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Remplacez les éléments suivants :

    • WORKFLOWS_PROJECT_ID: ID de votre projet Google Cloud contenant les ressources du workflow
    • PRINCIPAL: identifiant du déployeur de workflow au format user|group|serviceAccount:email ou domain:domain. Par exemple :
      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com

    • SERVICE_ACCOUNT_RESOURCE_NAME : nom complet de ressource du compte de service. Exemple :

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      Où :

      • SERVICE_ACCOUNT_PROJECT_ID correspond à l'ID du projet Google Cloud contenant le compte de service.
      • SERVICE_ACCOUNT_NAME est le nom du compte de service.
  6. Déployez votre workflow à l'aide du compte de service multiprojet.

Valider le compte de service associé à un workflow

Vous pouvez vérifier quel compte de service est associé à un workflow particulier.

Console

  1. Dans Google Cloud Console, accédez à la page Workflows :

    Accéder à "Workflows"

  2. Sur la page Workflows, cliquez sur le nom du workflow.

  3. Sur la page Détails du workflow, cliquez sur l'onglet Détails.

    Le compte de service associé au workflow s'affiche.

gcloud

  1. Ouvrez un terminal.

  2. Saisissez la commande suivante :

    gcloud workflows describe MY_WORKFLOW
    

    Remplacez MY_WORKFLOW par le nom de votre workflow.

    Une description complète du workflow, y compris le compte de service associé, est renvoyée. Exemple :

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

Étapes suivantes