Contrôler les accès avec IAM

Ce document vous explique comment effectuer les opérations suivantes dans Dataform :

Avant de commencer

    Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Accorder à Dataform l'accès requis

Cette section explique comment attribuer les rôles Identity and Access Management (IAM) dont les agents de service Dataform et les comptes de service personnalisés ont besoin pour exécuter des workflows dans BigQuery.

À propos des comptes de service personnalisés et des agents de service Dataform

Vous pouvez configurer des comptes de service personnalisés pour exécuter des workflows en votre nom de différentes manières :

Lorsque vous créez un dépôt ou une configuration de workflow Dataform, vous pouvez sélectionner n'importe quel compte de service pour lequel vous disposez des autorisations d'usurpation d'identité. Vous devez configurer les autorisations "Agir en tant que" requises pour tous les comptes de service associés à vos ressources Dataform.

Lorsque vous créez votre premier dépôt Dataform, Dataform génère automatiquement un agent de service. Dataform utilise l'agent de service pour interagir avec BigQuery en votre nom.

L'ID de votre agent de service Dataform est au format suivant :

service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Remplacez PROJECT_NUMBER par l'ID numérique de votre projetGoogle Cloud . Vous trouverez l'ID de votre projet Google Cloud dans le tableau de bord de la consoleGoogle Cloud . Pour en savoir plus, consultez Trouver le nom, le numéro et l'ID du projet.

Rôles requis pour les agents de service Dataform, les comptes de service personnalisés et les comptes Google

Les agents de service Dataform, les comptes de service personnalisés et les identifiants utilisateur d'un compte Google (aperçu) utilisés pour s'authentifier dans Dataform nécessitent les rôles IAM BigQuery suivants pour pouvoir exécuter des workflows dans BigQuery :

Attribuez également les rôles suivants à l'agent de service Dataform sur le compte de service effectif pour la configuration du workflow. Ces rôles sont nécessaires au fonctionnement du mode strict "Agir en tant que".

Pour les versions automatiques du dépôt et les exécutions automatiques de workflows, accordez à l'agent de service Dataform l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif.

Points à noter concernant la sécurité

L'attribution des rôles requis par Dataform à un agent de service Dataform, à un compte de service personnalisé ou à un compte Google d'utilisateur (aperçu) implique les considérations de sécurité suivantes :

  • Tout compte de service personnalisé auquel les rôles requis ont été attribués peut accéder à BigQuery ou Secret Manager dans le projet auquel il appartient, quels que soient les VPC Service Controls. Lorsque Dataform utilise un compte de service personnalisé pour exécuter des workflows, les requêtes Dataform sont traitées comme provenant du périmètre VPC Service Controls du projet contenant votre dépôt. Par conséquent, VPC Service Controls ne bloque pas la communication entre Dataform et d'autres services, tels que BigQuery ou Secret Manager, si ces ressources se trouvent dans le même périmètre de service.

    Pour en savoir plus sur la gestion de ces limites de sécurité, consultez Configurer VPC Service Controls.

  • Tout utilisateur disposant de l'autorisation IAM dataform.repositories.create peut exécuter du code à l'aide de l'agent de service Dataform et de toutes les autorisations accordées à cet agent de service ou compte de service.

    Pour en savoir plus, consultez Remarques sur la sécurité pour les autorisations Dataform.

  • Pour maintenir un modèle d'autorisations sécurisé, vérifiez régulièrement les liaisons de rôle de l'agent de service Dataform. Pour obtenir des instructions de surveillance détaillées, consultez Surveiller les autorisations des agents de service avec Security Command Center.

Pour limiter les données qu'un utilisateur, un agent de service ou un compte de service peuvent lire ou écrire dans BigQuery, vous pouvez accorder des autorisations IAM BigQuery précises à certains ensembles de données ou tables BigQuery. Pour en savoir plus, consultez Contrôler l'accès aux ensembles de données et Contrôler l'accès aux tables et aux vues.

Pour empêcher les utilisateurs d'effectuer des actions en utilisant les identifiants d'un autre utilisateur pour son compte Google, les restrictions suivantes sont appliquées :

  • Pour modifier une configuration de workflow avec les identifiants utilisateur d'un autre compte Google qui y est associé, vous devez associer les identifiants utilisateur de votre propre compte Google à la configuration de workflow ou modifier la configuration de workflow pour vous authentifier avec un compte de service personnalisé.
  • Vous ne pouvez pas modifier le résultat de la compilation pour une configuration de version si des configurations de workflow référencent la configuration de version et que les identifiants d'un autre utilisateur de compte Google y sont associés.
  • Vous ne pouvez pas définir une configuration de workflow pour vous authentifier avec les identifiants d'utilisateur d'un compte Google et référencer une configuration de version avec un calendrier. Cette limite a les conséquences suivantes :

    • Vous ne pouvez pas mettre à jour une configuration de version pour utiliser un calendrier si des configurations de workflow référencent la configuration de version et sont définies pour s'authentifier avec les identifiants utilisateur d'un compte Google.
    • Vous ne pouvez pas créer de configuration de workflow qui s'authentifie avec les identifiants d'utilisateur d'un compte Google et pointe vers une configuration de version avec un calendrier.
    • Vous ne pouvez pas créer ni mettre à jour une configuration de workflow pour utiliser les identifiants d'utilisateur d'un compte Google et pointer vers une configuration de version avec un calendrier.

Attribuer les rôles BigQuery requis

Pour accorder les rôles IAM BigQuery requis à votre agent de service Dataform, à un compte de service personnalisé que vous souhaitez utiliser dans Dataform ou à un compte Google d'utilisateur que vous souhaitez utiliser pour vous authentifier dans Dataform (aperçu), procédez comme suit :

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

    Accéder à Dataform

  2. Sélectionnez ou créez un dépôt.

  3. Dans la console Google Cloud , accédez à la page IAM.

    Accéder à IAM

  4. Cliquez sur Accorder l'accès.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'ID de l'agent de service, l'ID du compte de service ou l'adresse e-mail du compte Google de l'utilisateur (Aperçu).

  6. Dans la liste Sélectionner un rôle, sélectionnez le rôle Utilisateur de job BigQuery.

  7. Cliquez sur Ajouter un autre rôle, puis sélectionnez le rôle Éditeur de données BigQuery dans la liste Sélectionner un rôle.

  8. Cliquez sur Ajouter un autre rôle, puis sélectionnez le rôle Lecteur de données BigQuery dans la liste Sélectionner un rôle.

  9. Cliquez sur Enregistrer.

Attribuer les rôles requis pour les workflows automatiques

Pour utiliser un compte de service personnalisé dans Dataform, l'agent de service Dataform doit pouvoir accéder au compte de service personnalisé. Cela permet à Dataform d'exécuter vos workflows à l'aide des autorisations définies sur votre compte de service personnalisé au lieu de celles définies sur le compte de l'agent de service.

Pour accorder cet accès, vous devez attribuer le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service Dataform en tant que compte principal. Cela permet à l'agent de service Dataform d'emprunter l'identité du compte de service en créant des identifiants éphémères appelés jetons. Ces jetons sont nécessaires pour que Dataform exécute des workflows à l'aide de l'identité du compte de service personnalisé.

Vous devez également attribuer le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) à l'agent de service Dataform. Cela permet à l'agent de service Dataform de démarrer de nouvelles exécutions de workflow automatiques pour les configurations de workflow exécutées par le compte de service personnalisé.

Pour accorder à l'agent de service Dataform l'accès à un compte de service personnalisé, procédez comme suit :

  1. Dans la console Google Cloud , accédez à IAM > Comptes de service.

    Accéder à la page "Comptes de service"

  2. Sélectionnez le projet Google Cloud dans lequel se trouve votre compte de service personnalisé.

  3. Sur la page Comptes de service pour le projet "PROJECT_NAME", sélectionnez votre compte de service personnalisé.

  4. Accédez à Comptes principaux avec accès, puis cliquez sur Accorder l'accès.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'ID de votre agent de service Dataform.

    L'ID de votre agent de service Dataform est au format suivant :

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    
  6. Dans la liste Sélectionner un rôle, sélectionnez les rôles Créateur de jetons de compte de service et Utilisateur du compte de service.

  7. Cliquez sur Enregistrer.

Le compte de service personnalisé est maintenant prêt à être configuré dans votre dépôt Dataform.

Auditer les configurations des comptes de service

Cette section vous explique comment auditer vos ressources Dataform pour vous assurer que les comptes de service sont utilisés correctement et que les autorisations sont accordées comme il se doit. L'audit est particulièrement important lorsque vous utilisez des comptes de service personnalisés, car ils nécessitent des autorisations spécifiques pour que l'agent de service Dataform puisse fonctionner.

Lorsque vous utilisez un compte de service personnalisé pour une configuration de dépôt ou de workflow Dataform, vous devez vérifier que l'agent de service Dataform dispose du rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service personnalisé. Ce rôle accorde l'autorisation iam.serviceAccounts.actAs, qui permet aux exécutions planifiées initiées par l'agent de service Dataform d'emprunter l'identité du compte de service personnalisé. Vérifiez également que l'agent de service Dataform dispose du rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) sur le compte de service effectif.

Vérifier les comptes de service du dépôt

Commencez par identifier les ressources dataform.Repository qui sont incluses dans la planification et l'exécution de Dataform. Vérifiez ensuite les configurations des comptes de service pour les dépôts concernés.

  1. Utilisez l'inventaire des éléments cloud pour lister toutes les ressources de type dataform.Repository. Pour en savoir plus, consultez Afficher vos composants.

  2. Pour chaque dépôt dans le résultat de l'inventaire des éléments cloud, vérifiez le champ resource.data.labels pour déterminer s'il est dans le champ d'application. Le chemin d'accès exact peut varier légèrement en fonction du format d'exportation.

  3. Identifiez les dépôts hors champ en inspectant le mappage des libellés pour la clé single-file-asset-type. La présence de cette clé indique que le dépôt est utilisé par une fonctionnalité BigQuery. Si la valeur est sql ou data_canvas, le dépôt peut être exclu des vérifications des autorisations du compte de service.

    Les dépôts restants qui ne disposent pas de cette clé ni de ces valeurs sont inclus dans le champ d'application des vérifications des autorisations du compte de service.

  4. Pour chaque dépôt concerné, vérifiez le champ resource.data.serviceAccount dans la sortie inventaire des éléments cloud pour déterminer si un compte de service personnalisé est configuré :

    • Si le champ resource.data.serviceAccount est présent et que sa valeur est différente de l'adresse e-mail de l'agent de service Dataform du projet, cela signifie que le dépôt utilise un compte de service personnalisé.
    • Si le champ resource.data.serviceAccount est absent ou si sa valeur correspond à l'agent de service Dataform du projet, le dépôt utilise l'agent de service.

  5. Si un compte de service personnalisé est utilisé, vérifiez que l'agent de service Dataform dispose des rôles Utilisateur de compte de service (roles/iam.serviceAccountUser) et Créateur de jetons de compte de service (roles/iam.serviceAccountTokenCreator) sur ce compte de service personnalisé.

Valider les comptes de service de configuration de workflow

L'utilisation de comptes de service personnalisés dédiés pour les configurations de workflow Dataform est une bonne pratique de sécurité, conforme au principe du moindre privilège.

Pour vérifier l'utilisation du compte de service pour dataform.WorkflowConfig resources, procédez comme suit :

  1. Utilisez l'inventaire des éléments cloud pour lister toutes les ressources de type dataform.WorkflowConfig.

  2. Pour chaque configuration de workflow, examinez la sortie de l'inventaire des éléments Cloud pour déterminer le compte de service effectif :

    • Si le champ resource.data.serviceAccount est présent, cette valeur correspond à l'adresse e-mail du compte de service explicitement définie dans la configuration du workflow.
    • Si le champ resource.data.serviceAccount est absent, la configuration du workflow hérite du compte de service de son dépôt parent. Consultez la configuration du dépôt parent pour trouver le compte de service effectif.
  3. Pour savoir si un compte de service personnalisé est utilisé, comparez l'adresse e-mail du compte de service effectif à celle de l'agent de service Dataform du projet. Si elles sont différentes, cela signifie qu'un compte de service personnalisé est utilisé.

  4. Si un compte de service personnalisé est utilisé, assurez-vous que l'agent de service Dataform dispose des rôles Utilisateur du compte de service (roles/iam.serviceAccountUser) et Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) sur ce compte de service personnalisé. Ces autorisations permettent à l'agent de service Dataform de lancer des exécutions de workflow en empruntant l'identité du compte de service personnalisé.

Surveiller les autorisations de l'agent de service avec Security Command Center

Pour garantir le respect continu du principe du moindre privilège, surveillez activement votre projet dans Security Command Center afin d'identifier les résultats liés aux comptes de service et aux agents de service disposant de trop de droits d'accès.

Pour savoir comment examiner et appliquer les résultats de correction dans Security Command Center, consultez Résultats de l'outil de recommandation IAM et Examiner les résultats concernant l'identité dans la console.

Lorsque vous corrigez un résultat SERVICE_AGENT_GRANTED_BASIC_ROLE pour un agent de service Dataform, remplacez le rôle trop permissif par un rôle prédéfini disposant des autorisations minimales requises, limité à la ressource spécifique. Par exemple, attribuez le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur un compte de service spécifique.

Contrôler l'accès à Dataform avec IAM

Cette section décrit les options de contrôle des accès pour Dataform et vous explique comment afficher et attribuer des rôles Dataform. Dataform utilise Identity and Access Management (IAM) pour le contrôle des accès. Pour en savoir plus sur les rôles et les autorisations dans IAM, consultez l'index des rôles et autorisations IAM.

Rôles Dataform prédéfinis

Le tableau suivant répertorie les rôles prédéfinis qui vous donnent accès aux ressources Dataform :

Role Permissions

(roles/dataform.admin)

Full access to all Dataform resources.

dataform.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update
  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update
  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query
  • dataform.config.get
  • dataform.config.update
  • dataform.folders.addContents
  • dataform.folders.create
  • dataform.folders.delete
  • dataform.folders.deleteTree
  • dataform.folders.get
  • dataform.folders.getIamPolicy
  • dataform.folders.move
  • dataform.folders.queryContents
  • dataform.folders.setIamPolicy
  • dataform.folders.update
  • dataform.locations.get
  • dataform.locations.list
  • dataform.operations.cancel
  • dataform.operations.delete
  • dataform.operations.get
  • dataform.operations.list
  • dataform.releaseConfigs.create
  • dataform.releaseConfigs.delete
  • dataform.releaseConfigs.get
  • dataform.releaseConfigs.list
  • dataform.releaseConfigs.update
  • dataform.repositories.commit
  • dataform.repositories.computeAccessTokenStatus
  • dataform.repositories.create
  • dataform.repositories.delete
  • dataform.repositories.fetchHistory
  • dataform.repositories.fetchRemoteBranches
  • dataform.repositories.get
  • dataform.repositories.getIamPolicy
  • dataform.repositories.list
  • dataform.repositories.move
  • dataform.repositories.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.scheduleRelease
  • dataform.repositories.scheduleWorkflow
  • dataform.repositories.setIamPolicy
  • dataform.repositories.update
  • dataform.teamFolders.create
  • dataform.teamFolders.delete
  • dataform.teamFolders.deleteTree
  • dataform.teamFolders.get
  • dataform.teamFolders.getIamPolicy
  • dataform.teamFolders.setIamPolicy
  • dataform.teamFolders.update
  • dataform.workflowConfigs.create
  • dataform.workflowConfigs.delete
  • dataform.workflowConfigs.get
  • dataform.workflowConfigs.list
  • dataform.workflowConfigs.update
  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query
  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.editor)

Edit access to Workspaces and Read-only access to Repositories.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.config.get

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.operations.list

dataform.releaseConfigs.get

dataform.releaseConfigs.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.workflowConfigs.get

dataform.workflowConfigs.list

dataform.workflowInvocations.*

  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query

dataform.workspaces.commit

dataform.workspaces.create