Le mode "Agir en tant que" strict active une vérification de sécurité supplémentaire pour les actions utilisateur suivantes dans Dataform :
- Créer ou mettre à jour un dépôt
- Créer ou mettre à jour une configuration de workflow
- Créer un appel de workflow
- Mettre à jour une configuration de version
Cette vérification de sécurité supplémentaire exige que l'utilisateur effectuant ces actions dispose de l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif, qui est le compte de service dont les identifiants sont utilisés pour exécuter les workflows.
Pour en savoir plus, consultez
Associer des comptes de service à des ressources.
Le mode "Agir en tant que" strict est appliqué à tous les dépôts.
Rôles requis
Pour obtenir les autorisations nécessaires pour effectuer les tâches décrites dans ce document, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur le compte de service personnalisé -
Afficher les journaux dans Cloud Logging:
Visionneuse de journaux (
roles/logging.viewer) sur le projet -
Attribuer des rôles IAM à des utilisateurs ou à des comptes de service :
administrateur de compte de service (
roles/iam.serviceAccountAdmin) sur le projet
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Vérifier les autorisations "Agir en tant que" pour le compte de service effectif
Pour vous assurer que vos workflows Dataform s'exécutent de manière sécurisée et sans interruption, il est important de vérifier les autorisations "Agir en tant que" sur les comptes de service qu'ils utilisent. Cette section explique comment identifier le compte de service effectif pour vos ressources, utiliser Logging pour vérifier les problèmes d'autorisation, puis résoudre les problèmes que vous rencontrez.
Déterminer le compte de service effectif
Vous pouvez déterminer le compte de service effectif qui exécute les workflows en fonction du type de ressource et des conditions suivantes :
| Type de ressource | Compte de service effectif |
|---|---|
| Dépôts | Compte de service personnalisé configuré pour le dépôt. Un compte de service personnalisé est requis pour tous les dépôts. Ce compte de service est répertorié dans le champ |
| Configuration du workflow | Pour les nouvelles configurations de workflow, le compte de service personnalisé que vous sélectionnez lorsque vous créez une configuration de workflow est utilisé. Si aucun compte de service n'est sélectionné, le compte de service du dépôt est utilisé. |
| Appel de workflow | Si le résultat de la compilation est une ressource Si vous créez un appel de workflow à partir d'un résultat de compilation, le compte de service répertorié dans le champ Sinon, la valeur par défaut est le compte de service configuré au niveau du dépôt. |
Vérifier les problèmes d'autorisation dans Cloud Logging
Pour améliorer la sécurité, Dataform vérifie si l'autorisation iam.serviceAccounts.actAs est manquante sur les comptes de service utilisés par les ressources Dataform.
Les résultats de ces vérifications, y compris les éventuels problèmes d'autorisation, sont enregistrés dans Cloud Logging. Vous devez consulter ces journaux régulièrement pour identifier et accorder les autorisations iam.serviceAccounts.actAs manquantes. La vérification de ces journaux garantit que vos workflows et configurations Dataform continuent de fonctionner sans interruption.
Afficher les journaux dans Cloud Logging
Dans la Google Cloud console, accédez à la page Explorateur de journaux.
Sélectionnez le Google Cloud projet dans lequel vous souhaitez vérifier les journaux.
Utilisez l'éditeur de requête pour filtrer les journaux
actAsDataform avec les options suivantes :Pour n'afficher que les vérifications
actAsqui ont échoué et qui nécessitent une action, utilisez la requête suivante :logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falsePour afficher toutes les vérifications
actAs, utilisez la requête suivante :logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Remplacez
PROJECT_IDpar l'ID de votre Google Cloud projet.Cliquez sur Exécuter la requête.
Interpréter les entrées de journal
Développez une entrée de journal dans les résultats de la requête pour afficher les champs jsonPayload suivants :
| Champ | Type | Description |
|---|---|---|
dryRunResult |
Booléen | true : la vérification des autorisations a réussi.false : la vérification a échoué. Le compte principal de l'appelant ne dispose pas de l'autorisation iam.serviceAccounts.actAs sur le compte de service. |
caller |
Chaîne | Adresse e-mail du compte principal (utilisateur ou compte de service) qui a lancé l'appel d'API. |
serviceAccount |
Chaîne | Compte de service que le compte principal de l'appelant a tenté d'utiliser. Ce champ est généralement présent lorsque le champ dryRunResult est false. |
apiMethod |
Chaîne | Méthode de l'API Dataform qui a déclenché la vérification, par exemple, CreateWorkflowInvocation ou UpdateRepository. |
*_context |
Objet | Objet contenant les noms de ressources pertinents pour la méthode d'API appelée. Pour en savoir plus, consultez Objets de contexte. |
Objets de contexte
L'entrée de journal inclut un objet de contexte dans les champs jsonPayload. Les
champs de cet objet contiennent les noms de ressources complets Google Cloud des
entités Dataform impliquées. Ces noms suivent les structures standards présentées dans la liste suivante, ce qui vous permet d'identifier précisément les ressources.
create_workflow_invocation_context: présent lorsque la méthode d'API estCreateWorkflowInvocation.workflowInvocation: nom de ressource de l'appel de workflow.- Le format du nom de ressource est le suivant:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- Le format du nom de ressource est le suivant:
compilationResultouworkflowConfig: nom de ressource de la source utilisée pour l'appel.- Le format du nom de ressource pour
compilationResultest le suivant :projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - Le format du nom de ressource pour
workflowConfigest le suivant :projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Le format du nom de ressource pour
create_repository_contextouupdate_repository_context: présent lorsque la méthode d'API estCreateRepositoryouUpdateRepository.repository: nom de ressource du dépôt Dataform.- Le format du nom de ressource est le suivant :
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- Le format du nom de ressource est le suivant :
update_release_config_context: présent lorsque la méthode d'API estUpdateReleaseConfig.releaseConfig: nom de ressource de la configuration de version.- Le format du nom de ressource est le suivant :
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- Le format du nom de ressource est le suivant :
create_workflow_config_contextouupdate_workflow_config_context: présent lorsque la méthode d'API estCreateWorkflowConfigouUpdateWorkflowConfig.workflowConfig: nom de ressource de la configuration de workflow.- Le format du nom de ressource est le suivant :
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Le format du nom de ressource est le suivant :
Pour comparer les formats documentés à l'entrée de journalisation, remplacez les éléments suivants :
PROJECT_ID: identifiant unique de votre Google Cloud projet.LOCATION_ID: région dans laquelle se trouve votre dépôt Dataform.REPOSITORY_ID: ID défini par l'utilisateur du dépôt Dataform. Il s'agit du nom attribué au dépôt lors de sa création.COMPILATION_RESULT_ID: identifiant unique généré par le système pour un résultat de compilation Dataform.RELEASE_CONFIG_ID: ID défini par l'utilisateur de la configuration de version Dataform.WORKFLOW_CONFIG_ID: ID défini par l'utilisateur de la configuration de workflow Dataform.
Résoudre les problèmes d'autorisation
Pour résoudre les problèmes d'autorisation identifiés dans Logging, déterminez la cause première de l'échec, puis suivez les étapes de résolution correspondantes.
Accorder les autorisations "Agir en tant que" manquantes
Si vous trouvez des entrées de journal où le champ dryRunResult est false, procédez comme suit :
Dans les détails
jsonPayload, notez l'adresse e-mail dans le champcallerpour identifier le compte principal.Notez l'adresse e-mail dans le champ
serviceAccountpour identifier le compte de service.Vérifiez que le compte principal de l'appelant doit être autorisé à agir en tant que compte de service. L'octroi de cette autorisation permet à l'appelant d'utiliser les autorisations détenues par le compte de service.
Si l'accès est prévu, attribuez le rôle Utilisateur du compte de service (
roles/iam.serviceAccountUser) au compte principal de l'appelant sur le compte de service cible. Pour en savoir plus, consultez Attribuer les rôles IAM requis.
Une fois le rôle attribué, les futurs journaux pour cette combinaison d'appelant et de compte de service doivent afficher dryRunResult: true.
Gérer l'association de comptes de service multiprojets
Si le dépôt et le compte de service effectif se trouvent dans des projets différents, la requête visant à agir en tant que compte de service peut être bloquée par la contrainte de règle d'administration iam.disableCrossProjectServiceAccountUsage.
Pour résoudre ce problème, consultez Activer l'association des comptes de service à plusieurs projets.
Attribuer les rôles IAM requis
Le rôle Utilisateur du compte de service
(roles/iam.serviceAccountUser) contient l'iam.serviceAccounts.actAs
autorisation, qui est requise pour le mode "Agir en tant que" strict. Lorsque vous utilisez l'
API Dataform, vous devez disposer du rôle Utilisateur du compte de service
pour le compte de service effectif en fonction de la
projects.locations.repositories méthode
que vous appelez :
createoupatch- Si la propriété
Repository.ServiceAccountest définie, vous devez disposer du rôle Utilisateur du compte de service pour cette propriété. - Si vous appelez la méthode
patch, vous devez disposer du rôle Utilisateur du compte de service pour tous les comptes de service effectifs dans toutes les configurations de workflow du dépôt.
- Si la propriété
workflowConfigs.createouworkflowConfigs.patch- Vous devez disposer du rôle Utilisateur du compte de service pour le compte de service effectif utilisé dans la configuration de workflow.
releaseConfigs.patch- Vous devez disposer du rôle Utilisateur du compte de service pour tous les comptes de service effectifs utilisés dans les configurations de workflow à l'aide de cette configuration de version.
workflowInvocations.create- Vous devez disposer du rôle Utilisateur du compte de service pour le compte de service effectif utilisé dans l'appel de workflow.
Pour attribuer le rôle Utilisateur du compte de service à un compte de service personnalisé, procédez comme suit :
Dans la Google Cloud console, accédez à IAM > Comptes de service.
Sélectionnez un projet.
Sur la pagePROJECT_NAME, sélectionnez votre compte de service personnalisé.
Accédez à Comptes principaux ayant accès, puis cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, saisissez l'ID de votre agent de service Dataform par défaut.
L'ID de votre agent de service Dataform par défaut est au format suivant :
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comRemplacez
PROJECT_NUMBERpar le Google Cloud numéro de votre projet.Dans la liste Sélectionner un rôle, sélectionnez le rôle Utilisateur du compte de service.
Cliquez sur Ajouter un autre rôle , puis sélectionnez le rôle Créateur de jetons du compte de service.
Cliquez sur Enregistrer.
Pour en savoir plus, consultez les rôles requis pour créer une configuration de workflow et rôles requis pour créer une configuration de version
Effets du mode "Agir en tant que" strict sur les versions et les exécutions automatiques
Le mode "Agir en tant que" strict a l'impact suivant sur les versions automatiques des dépôts et les exécutions automatiques des workflows.
Pour les dépôts qui ne sont pas connectés à des dépôts tiers :
- Vous ne pouvez pas définir de
programmation Cron
pour les versions automatiques dans les configurations de version. Cette mesure est appliquée pour empêcher le déploiement automatique des modifications de code effectuées par un utilisateur qui ne dispose pas des autorisations
iam.serviceAccounts.actAsnécessaires sur les comptes de service en aval. - Les exécutions de workflow planifiées à l'aide d'une programmation Cron dans les configurations de workflow restent activées. Pour que ces exécutions automatisées réussissent, vous devez accorder à l'agent de service Dataform par défaut l'autorisation
iam.serviceAccounts.actAssur le compte de service effectif spécifié dans la configuration de workflow.
Pour les dépôts connectés à des dépôts tiers :
- Les versions planifiées et les exécutions de workflow planifiées sont autorisées.
- Pour activer une version automatique à partir d'une configuration de version ou une exécution automatique à partir d'une configuration de workflow, vous devez accorder à l'agent de service Dataform par défaut l'autorisation
iam.serviceAccounts.actAssur le compte de service effectif approprié:- Pour une configuration de version automatique, accordez l'autorisation sur les comptes de service effectifs de toutes les configurations de workflow déclenchées par cette configuration de version.
- Pour une configuration de workflow automatique, accordez l'autorisation sur le compte de service effectif utilisé par cette configuration de workflow.
Étape suivante
- Pour apprendre à créer un dépôt, consultez Créer un dépôt.
- Pour en savoir plus sur le fonctionnement de Dataform avec BigQuery, consultez Présentation des workflows.
- Pour apprendre à créer une configuration de workflow, consultez Planifier des exécutions.
- Pour apprendre à créer une configuration de version, consultez Configurer des compilations.