Autoriser un workflow à accéder aux ressources Google Cloud

Workflows utilise des comptes de service pour autoriser les workflows à accéder aux ressources Google Cloud . Les comptes de service sont des comptes spéciaux qui servent d'identité à un utilisateur non-humain, par exemple une fonction, une application ou une VM. Ils vous permettent d'authentifier ces entités non humaines. Vous pouvez considérer un compte de service à la fois comme une identité et comme une ressource :

  • Lorsque vous considérez un compte de service comme une identité, vous pouvez lui attribuer un rôle lui permettant d'accéder à une ressource (un workflow, par exemple).

  • Lorsque vous considérez un compte de service comme une ressource, vous pouvez attribuer des rôles à d'autres utilisateurs pour qu'ils puissent accéder à ce compte de service 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 IAM (Identity and Access Management) lorsque vous le créez. 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é. Pour vérifier quel compte de service est associé à un workflow, consultez la section Vérifier le compte de service associé à un workflow de ce document.

  • Nous vous recommandons d'utiliser le compte de service par défaut uniquement à des fins de test et de développement. Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises pour accéder aux ressources orchestrées par vos workflows.

  • Les seuls rôles requis par votre compte de service sont ceux nécessaires pour accéder aux ressources orchestrées par vos workflows. Pour en savoir plus, consultez la section Autorisations des comptes de service de ce document.

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 que le compte de service qui exécute le workflow dispose d'un rôle incluant l'autorisation logging.logEntries.create, par exemple le rôle IAM Rédacteur de journaux (roles/logging.logWriter). En général, les rôles requis par votre compte de service dépendent des ressources que vous orchestrez avec vos workflows. Pour déterminer les rôles requis, consultez la documentation produit de la ressource que vous orchestrez ou choisissez des rôles prédéfinis.

Le compte de service du workflow ne nécessite pas le rôle IAM Demandeur de workflows (roles/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 Appeler Workflows.

Associer des comptes de service aux ressources

Pour créer un workflow et lui rattacher un compte de service, vous devez disposer des autorisations nécessaires pour créer le workflow et lui associer le compte de service.

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

Ce rôle prédéfini contient l'autorisation iam.serviceAccounts.actAs, qui est requise 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.

Lorsque vous mettez à jour le code source ou le compte de service d'un workflow existant, vous devez également disposer de l'autorisation iam.serviceAccounts.actAs :

  • Mettre à jour uniquement le code source du workflow (sans mettre à jour le compte de service) : vous devez disposer de l'autorisation iam.serviceAccounts.actAs sur le compte de service existant associé au workflow.
  • Mettre à jour le compte de service, ou à la fois le code source et le compte de service : vous devez disposer de l'autorisation iam.serviceAccounts.actAs sur le nouveau compte de service que vous associez au workflow.

Pour en savoir plus sur les rôles d'authentification des comptes de service, consultez Rôles pour l'authentification des comptes de service.

Appeler Cloud Run Functions

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

Pour en savoir plus, consultez Comparer les fonctions Cloud Run.

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 renforcer le contrôle et la flexibilité lors de la gestion de l'accès à votre workflow.

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

  2. Accordez au compte de service les rôles appropriés, en fonction des ressources auxquelles le workflow doit accéder pour accomplir ses tâches.

  3. Assurez-vous que tous les comptes principaux qui déploient ou mettent à jour des workflows sont autorisés à associer le compte de service ou à agir en tant que tel (roles/iam.serviceAccountUser). Si vous avez créé le compte de service, cette autorisation vous est automatiquement accordée.

    Attribuez le rôle au projet :

    gcloud projects add-iam-policy-binding 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 :

    • PROJECT_ID : ID du projet Google Cloud contenant le workflow et le compte de service.
    • PRINCIPAL : identifiant du déployeur de workflow au format user|group|serviceAccount:email ou domain:domain. Exemple :

      • user:dana@example.com
      • group:admins@example.com
      • serviceAccount:my-service-account@example.com
      • domain:example.com
    • SERVICE_ACCOUNT_RESOURCE_NAME : nom complet de ressource du compte de service, au format suivant :

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

      Où SERVICE_ACCOUNT_NAME est le 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 du workflow se trouvent dans des projets différents, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page Règles d'administration du projet où se trouve le compte de service :

    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 projet. Pour en savoir plus, consultez Activer l'association des comptes de service à plusieurs projets.

  2. Dans le projet où se trouve le compte de service, créez votre compte de service et notez son nom.

  3. Accordez au compte de service les rôles appropriés, en fonction des ressources auxquelles le workflow doit accéder pour accomplir ses tâches.

  4. Attribuez le rôle de créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service Workflows dans le projet du workflow. Cela permet à l'agent de service de gérer l'accès multiprojet 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 Agents de service.

    Console

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

      Accéder à "Workflows"

    2. Pour créer un workflow, cliquez sur Créer. Pour mettre à jour un workflow existant, cliquez sur son nom.

    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, au format suivant :

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

        Où :

        • SERVICE_ACCOUNT_PROJECT_ID est l'ID du projetGoogle Cloud qui contient le compte de service.
        • SERVICE_ACCOUNT_NAME est le nom du compte de service.
      • WORKFLOWS_PROJECT_NUMBER : numéro du projetGoogle Cloud contenant les ressources du workflow.

  5. Assurez-vous que tous les comptes principaux qui déploient ou mettent à jour des workflows sont autorisés à associer le compte de service ou à agir en tant que tel (roles/iam.serviceAccountUser). Si vous avez créé le compte de service, cette autorisation vous est automatiquement accordée.

    Console

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

      Accéder à "Workflows"

    2. Pour créer un workflow, cliquez sur Créer. Pour mettre à jour un workflow existant, cliquez sur son nom.

    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.serviceAccountUser au projet du compte de service.

    gcloud

    Attribuez le rôle au projet qui contient le compte de service :

    gcloud projects add-iam-policy-binding \
        SERVICE_ACCOUNT_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 :

    • SERVICE_ACCOUNT_PROJECT_ID : ID du projetGoogle Cloud qui contient le compte de service.
    • PRINCIPAL : identifiant du déployeur de workflow au format user|group|serviceAccount:email ou domain:domain. Par exemple :
      • user:dana@example.com
      • group:admins@example.com
      • serviceAccount:my-service-account@example.com
      • domain:example.com
    • SERVICE_ACCOUNT_RESOURCE_NAME : nom complet de ressource du compte de service, au format suivant :

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

      Où SERVICE_ACCOUNT_NAME est le nom du compte de service.

  6. Déployez votre workflow à l'aide du compte de service multiprojet.

Vérifier le compte de service associé à un workflow

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

Console

  1. Dans la console Google Cloud , 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.

    L'onglet Détails affiche le compte de service associé au workflow.

gcloud

Récupérez la description du workflow en exécutant la commande gcloud workflows describe :

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

Remplacez les éléments suivants :

  • WORKFLOW_NAME: Nom de votre workflow.
  • LOCATION : région dans laquelle votre workflow est déployé (par exemple, us-central1).

Le résultat ressemble à ce qui suit et inclut le compte de service associé :

createTime: '2020-06-05T23:45:34.154213774Z'
name: projects/my-project/locations/us-central1/workflows/my-workflow
serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com
sourceContents: [...]

Étapes suivantes