Workflows utilise des comptes de service pour permettre aux workflows d'accéder aux Google Cloud ressources. Les comptes de service sont des comptes spéciaux qui constituent l'identité d'un utilisateur non-humain, par exemple une fonction, une application ou une VM. Ils vous permettent d'authentifier ces entités non humaines. Un compte de service peut être considéré à la fois comme une identité et comme une ressource.
Lorsque vous envisagez d'associer le compte de service à 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 accorder des rôles à d'autres utilisateurs pour 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 la page Authentification 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) 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. Pour en savoir plus, 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 à des fins de test et de développement. Pour les environnements de production, nous vous recommandons vivement de créer un nouveau compte de service et de lui attribuer un ou plusieurs rôles IAM qui contiennent les autorisations minimales requises pour gérer les 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 de compte de service.
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 exécutant le workflow dispose d'un rôle comprenant l'autorisation logging.logEntries.create (par exemple, le rôle Logs Writer). 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.
Notez que le compte de service du workflow ne nécessite pas le rôle workflows.invoker, sauf si le workflow s'appelle lui-même ou d'autres workflows (c'est-à-dire qu'il crée de nouvelles exécutions de workflow). Pour en savoir plus, consultez la section
Appeler des workflows.
Pour en savoir plus sur l'attribution de rôles aux comptes principaux, y compris aux comptes de service, consultez la page 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 rattacher 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 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 Demandeur Cloud Functions (roles/cloudfunctions.invoker). Vous devez plutôt accorder le rôle Demandeur Cloud Run (roles/run.invoker).
Pour en savoir plus, consultez la page Comparer Cloud Run 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 pour contrôler plus facilement l'accès à votre workflow.
Créez un compte de service et notez son nom.
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.
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 page 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.
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 du projet contenant les ressources de workflow Google CloudPRINCIPAL: identifiant du déployeur de workflow au formatuser|group|serviceAccount:emailoudomain:domain. Par exemple :user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME: nom complet de ressource du compte de service. Par exemple :projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comOù :
SERVICE_ACCOUNT_PROJECT_IDcorrespond à l'ID du Google Cloud projet contenant le compte de service.SERVICE_ACCOUNT_NAMEcorrespond au nom du compte de service.
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, procédez comme suit dans le projet où se trouve le compte de service :
Dans la Google Cloud console, 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
iam.disableCrossProjectServiceAccountUsagecontrainte booléenne n'est pas appliquée au projet. Pour en savoir plus, consultez la section Activer l'association des comptes de service à plusieurs projets.Créez un compte de service et notez son nom.
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.
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 multiprojet pour le compte de service. Un agent de service est l'identité d'un service donné Google Cloud pour un projet particulier. Pour plus d'informations, consultez la page Agents de service.Console
Dans la Google Cloud console, accédez à la page Workflows :
Cliquez sur Créer pour créer un workflow ou sélectionnez le nom du workflow que vous souhaitez mettre à jour.
Dans la liste Compte de service, cliquez sur Changer de projet.
Sélectionnez un compte de service dans un autre projet.
Si vous y êtes invité, attribuez le rôle
roles/iam.serviceAccountTokenCreatorà l'agent de service Workflows.
gcloud
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. Par exemple :projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comOù :
SERVICE_ACCOUNT_PROJECT_IDcorrespond à l'ID du Google Cloud projet contenant le compte de service.SERVICE_ACCOUNT_NAMEcorrespond au nom du compte de service.
WORKFLOWS_PROJECT_NUMBER: numéro du projet contenant les ressources de workflow Google Cloud .
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 page 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.
Console
Dans la Google Cloud console, accédez à la page Workflows :
Cliquez sur Créer pour créer un workflow ou sélectionnez le nom du workflow que vous souhaitez mettre à jour.
Dans la liste Compte de service, cliquez sur Changer de projet.
Sélectionnez un compte de service dans un autre projet.
Si vous y êtes invité, attribuez le rôle
roles/iam.serviceAccountUserau 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 du projet contenant les ressources de workflow Google CloudPRINCIPAL: identifiant du déployeur de workflow au formatuser|group|serviceAccount:emailoudomain:domain. Par exemple :user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME: nom complet de ressource du compte de service. Par exemple :projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comOù :
SERVICE_ACCOUNT_PROJECT_IDcorrespond à l'ID du Google Cloud projet contenant le compte de service.SERVICE_ACCOUNT_NAMEcorrespond au nom du compte de service.
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
Dans la Google Cloud console, accédez à la page Workflows :
Sur la page Workflows, cliquez sur le nom du workflow.
Sur la page Détails du workflow, cliquez sur l'onglet Détails.
Le compte de service associé au workflow s'affiche.
gcloud
Ouvrez un terminal.
Saisissez la commande suivante :
gcloud workflows describe MY_WORKFLOW
Remplacez
MY_WORKFLOWpar le nom de votre workflow.Une description complète du workflow, y compris le compte de service associé, est renvoyée. Par 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: [...]