Contrôler les accès avec IAM

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

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. 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

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. 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 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 par défaut. Dataform utilise l'agent de service par défaut pour interagir avec BigQuery en votre nom.

    L'ID de votre agent de service Dataform par défaut se présente 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 Identifier des projets.

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

    Les agents de service Dataform par défaut, les comptes de service personnalisés et les identifiants utilisateur de 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 par défaut sur le compte de service effectif pour la configuration du workflow :

    Pour les versions automatiques du dépôt et les exécutions automatiques de workflows, accordez à l'agent de service Dataform par défaut 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) présente les considérations de sécurité suivantes :

    • Tout agent de service ou compte de service 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. Les requêtes provenant de Dataform qui utilisent un agent de service avec les rôles requis se trouvent dans le périmètre VPC Service Controls du projet auquel appartient le dépôt Dataform.

      Pour en savoir plus, 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 par défaut 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 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 de compte Google d'un autre utilisateur, les restrictions suivantes sont appliquées :

    • Pour modifier une configuration de workflow à laquelle sont associés les identifiants d'un autre utilisateur de compte Google, vous devez associer vos propres identifiants de compte Google à la configuration de workflow ou modifier la configuration de workflow pour vous authentifier avec un agent de service {dataform_name_short} ou 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 configurer un workflow pour qu'il s'authentifie avec les identifiants d'utilisateur d'un compte Google et qu'il référence 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 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 par défaut, à 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 tâche 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 par défaut 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 par défaut.

    Pour accorder cet accès, vous devez attribuer le rôle Créateur de jetons de compte de service (roles/iam.serviceAccountTokenCreator) à l'agent de service Dataform par défaut en tant que compte principal. Cela permet à l'agent de service Dataform par défaut 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 par défaut. Cela permet à l'agent de service Dataform par défaut 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 par défaut 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 un projet.

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

    4. Accédez à Comptes principaux ayant 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 par défaut.

      L'ID de votre agent de service Dataform par défaut se présente 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 par défaut fonctionne.

    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 par défaut 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 par défaut d'emprunter l'identité du compte de service personnalisé. Vérifiez également que l'agent de service Dataform par défaut 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é ou 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 par défaut 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 par défaut du projet, le dépôt utilise l'agent de service par défaut.

    5. Si un compte de service personnalisé est utilisé, vérifiez que l'agent de service Dataform par défaut 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é.

    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 le résultat 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 par défaut 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 par défaut 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 par défaut de lancer des exécutions de workflow en usurpant l'identité du compte de service personnalisé.

    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.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.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.codeCommenter)

    Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.folders.get

    dataform.folders.queryContents

    dataform.locations.get

    dataform.repositories.get

    dataform.repositories.readFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCreator)

    Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.folders.create

    dataform.locations.*

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

    dataform.repositories.create

    dataform.repositories.list

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeEditor)

    Edit access code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

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

    dataform.folders.addContents

    dataform.folders.create

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

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

    dataform.operations.get

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    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.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeOwner)

    Full access to code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

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

    dataform.folders.*

    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update

    dataform.locations.*

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

    dataform.operations.get

    dataform.operations.list

    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.setIamPolicy

    dataform.repositories.update

    dataform.workspaces.*

    • 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.codeScheduler)

    Access for scheduling workflows and releases.

    dataform.releaseConfigs.create

    dataform.workflowConfigs.create

    (roles/dataform.codeViewer)

    Read-only access to all code resources.

    dataform.compilationResults.*

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

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.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.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    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

    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.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.serviceAgent)

    Gives permission for the Dataform API to access a secret from Secret Manager

    dataform.compilationResults.create

    dataform.workflowInvocations.create

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderCommenter)

    View and comment access to a team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

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

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.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.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderContributor)

    Edit access to a team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

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

    dataform.folders.addContents

    dataform.folders.create

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

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

    dataform.operations.get

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    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.teamFolders.update

    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.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderCreator)

    Access to create new team folders.

    dataform.teamFolders.create

    (roles/dataform.teamFolderOwner)

    Full access to a team folder and its contents. Can share the team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

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

    dataform.folders.*

    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update

    dataform.locations.*

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

    dataform.operations.get

    dataform.operations.list

    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.setIamPolicy

    dataform.repositories.update

    dataform.teamFolders.delete

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.teamFolders.setIamPolicy

    dataform.teamFolders.update

    dataform.workspaces.*

    • 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.teamFolderViewer)

    View access to a team folder and its contents.

    dataform.compilationResults.*

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

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.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.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.viewer)

    Read-only access to all Dataform resources.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    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.get

    dataform.workflowInvocations.list

    dataform.workflowInvocations.query

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    Rôles Dataform personnalisés

    Les rôles personnalisés peuvent inclure toutes les autorisations que vous spécifiez. Vous pouvez créer des rôles personnalisés qui incluent des autorisations permettant d'effectuer des opérations administratives spécifiques, comme créer des espaces de travail de développement ou créer des fichiers et des répertoires dans un espace de travail de développement. Pour créer des rôles personnalisés, consultez Créer et gérer les rôles personnalisés.

    Remarques sur la sécurité pour les autorisations Dataform

    Tout utilisateur disposant de l'autorisation dataform.repositories.create peut exécuter du code dans BigQuery à l'aide de l'agent de service Dataform par défaut et de toutes les autorisations accordées à cet agent de service. Cela inclut l'exécution des workflows Dataform.

    L'autorisation dataform.repositories.create est incluse dans les rôles IAM suivants :

    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 en savoir plus sur l'agent de service Dataform par défaut, ainsi que sur les rôles et autorisations qu'il requiert, consultez Accorder l'accès requis à Dataform.

    Afficher les rôles Dataform

    Dans la console Google Cloud , procédez comme suit :

    1. Accédez à la page IAM et administration> Rôles.

      Accéder à la page "Rôles"

    2. Dans le champ Filtrer, sélectionnez Utilisé dans, saisissez Dataform, puis appuyez sur Entrée.

    3. Cliquez sur l'un des rôles répertoriés pour afficher ses autorisations dans le volet de droite.

      Par exemple, le rôle Administrateur Dataform permet d'accéder à toutes les ressources Dataform.

    Pour en savoir plus sur l'attribution d'un rôle à un projet, consultez Attribuer un rôle. Cette procédure concerne aussi bien l'attribution de rôles prédéfinis que de rôles personnalisés.

    Contrôler l'accès à un dépôt individuel

    Pour contrôler l'accès à Dataform avec des autorisations précises, vous pouvez définir des rôles IAM Dataform sur des dépôts individuels à l'aide de la requête Dataform API repositories.setIamPolicy.

    Pour définir des rôles IAM Dataform sur un dépôt Dataform individuel, procédez comme suit :

    1. Dans le terminal, transmettez la requête repositories.setIamPolicy de l'API Dataform avec une règle d'accès.

    2. Dans la stratégie, associez un utilisateur, un groupe, un domaine, un agent de service ou un compte de service à un rôle sélectionné au format suivant :

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "TYPE:IDENTIFIER",
               ]
            },
            ],
         }
      }
      

      Remplacez les éléments suivants :

      • ROLE : rôle IAM Dataform que vous souhaitez attribuer au dépôt.
      • TYPE : user, group, domain ou serviceAccount.
      • IDENTIFIER : utilisateur, groupe, domaine ou compte de service auquel vous souhaitez attribuer le rôle.
    3. Sur la page IAM, assurez-vous que tous les utilisateurs peuvent afficher la liste complète des dépôts Dataform grâce à un rôle Dataform disposant de l'autorisation dataform.repositories.list.

    4. Dans IAM, assurez-vous que seuls les utilisateurs qui ont besoin d'un accès complet à tous les dépôts Dataform disposent du rôle Administrateur Dataform sur tous les dépôts.

    La commande suivante transmet la requête de l'API Dataform repositories.setIamPolicy qui accorde le rôle Éditeur Dataform sur le dépôt sales à un seul utilisateur :

    curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    Accorder un accès public à un dépôt

    Vous pouvez accorder un accès public à un dépôt Dataform en attribuant des rôles IAM sur le dépôt au compte principal allAuthenticatedUsers.

    Lorsque vous attribuez un rôle IAM au compte principal allAuthenticatedUsers, ce rôle est accordé aux agents de service, aux comptes de service et à tous les utilisateurs sur Internet qui se sont authentifiés avec un compte Google. Cela inclut les comptes qui ne sont pas associés à un compte Google Workspace ou à un domaine Cloud Identity, tels que des comptes Gmail personnels. Les utilisateurs non authentifiés, tels que les visiteurs anonymes, ne sont pas pris en compte. Pour en savoir plus, consultez Tous les utilisateurs authentifiés.

    Par exemple, lorsque vous attribuez le rôle Lecteur Dataform à allAuthenticatedUsers sur le dépôt sales, tous les agents de service, comptes de service et utilisateurs sur Internet qui se sont authentifiés avec un compte Google bénéficient d'un accès en lecture seule à toutes les ressources de code sales.

    Pour accorder l'accès public à un dépôt Dataform, procédez comme suit :

    1. Dans le terminal, transmettez la requête repositories.setIamPolicy de l'API Dataform avec une règle d'accès.

    2. Dans la stratégie, liez le compte principal allAuthenticatedUsers à un rôle sélectionné au format suivant :

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "allAuthenticatedUsers",
               ]
            },
            ],
         }
      }
      

      Remplacez ROLE par un rôle IAM Dataform que vous souhaitez accorder à tous les utilisateurs authentifiés.

    La commande suivante transmet la requête repositories.setIamPolicy de l'API Dataform qui attribue le rôle Lecteur Dataform sur le dépôt sales à allAuthenticatedUsers :

    curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    Empêcher l'accès public aux dépôts

    Pour vous assurer qu'aucun accès public n'est accordé à un dépôt Dataform, vous pouvez limiter le compte principal allAuthenticatedUsers dans votre projet.

    Pour limiter allAuthenticatedUsers dans votre projet, vous pouvez définir la règle iam.allowedPolicyMemberDomains et supprimer allAuthenticatedUsers de la liste des valeurs autorisées (allowed_values).

    Lorsque vous définissez une limitation de allAuthenticatedUsers dans la règle iam.allowedPolicyMemberDomains, le compte principal allAuthenticatedUsers ne peut être utilisé dans aucune règle IAM de votre projet, ce qui empêche d'accorder un accès public à toutes les ressources, y compris les dépôts Dataform.

    Pour en savoir plus sur la règle iam.allowedPolicyMemberDomains et les instructions pour la définir, consultez Restreindre les identités par domaine.

    Fédération des identités des employés dans Dataform

    La fédération des identités des employés vous permet d'utiliser un fournisseur d'identité (IdP) externe pour authentifier et autoriser les utilisateurs à accéder aux services Google Cloud avec IAM.

    Dataform est compatible avec la fédération d'identité de personnel sans aucune limite connue.

    Contrôler l'accès à des tables individuelles avec IAM

    Cette section vous explique comment accorder et révoquer des rôles IAM BigQuery pour des tables et des vues Dataform individuelles.

    Lorsque Dataform exécute une table ou une vue, il crée la ressource dans BigQuery. Lors du développement dans Dataform, vous pouvez accorder des rôles BigQuery à des tables et des vues individuelles pour contrôler leur accès dans BigQuery après l'exécution.

    Pour en savoir plus sur l'attribution et la révocation des accès aux ressources, consultez Accorder l'accès à une ressource.

    Attribuer des rôles BigQuery à une table ou une vue

    Vous pouvez attribuer des rôles BigQuery à une table ou une vue dans Dataform en ajoutant un bloc post_operations avec l'instruction DCL GRANT au fichier de définition .sqlx de la table ou de la vue sélectionnée.

    Pour attribuer des rôles BigQuery à une table ou une vue sélectionnée, procédez comme suit :

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

      Accéder à Dataform

    2. Sélectionnez un dépôt, puis un espace de travail.

    3. Dans le volet Fichiers, développez le répertoire definitions/.

    4. Sélectionnez le fichier de définition .sqlx de la table ou de la vue à laquelle vous souhaitez accorder l'accès.

    5. Dans le fichier, saisissez l'extrait de code suivant :

      post_operations {
          GRANT "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          TO "USER_LIST"
      }
      

      Remplacez les éléments suivants :

      • ROLE_LIST : rôle BigQuery ou liste de rôles BigQuery séparés par une virgule que vous souhaitez attribuer.

      • RESOURCE_TYPE : TABLE ou VIEW.

      • USER_LIST : liste des utilisateurs auxquels le rôle est attribué, séparés par une virgule.

        Pour obtenir la liste des formats valides, consultez user_list.

    6. Facultatif : Cliquez sur Format.

    7. Exécutez la table ou la vue.

    8. Si vous avez accordé l'accès à une table incrémentielle, supprimez l'instruction GRANT du fichier de définition de table après la première exécution.

    L'exemple de code suivant montre le rôle Lecteur BigQuery attribué à un utilisateur sur une table :

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      GRANT `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      TO "user:222larabrown@gmail.com"
    }
    

    Révoquer des rôles BigQuery pour une table ou une vue

    Vous pouvez révoquer des rôles BigQuery d'une table ou d'une vue en ajoutant un bloc post_operations avec l'instruction DCL REVOKE au fichier de définition .sqlx de la table ou de la vue sélectionnée.

    Pour révoquer des rôles BigQuery d'une table ou d'une vue sélectionnée, procédez comme suit :

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

      Accéder à Dataform

    2. Sélectionnez un dépôt, puis un espace de travail.

    3. Dans le volet Fichiers, développez le répertoire definitions/.

    4. Sélectionnez le fichier de définition .sqlx de la table ou de la vue dont vous souhaitez révoquer l'accès.

    5. Dans le bloc post_operations, saisissez l'instruction REVOKE suivante :

          REVOKE "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          FROM "USER_LIST"
      

      Remplacez les éléments suivants :

      • ROLE_LIST : rôle BigQuery ou liste de rôles BigQuery séparés par une virgule que vous souhaitez révoquer.
      • RESOURCE_TYPE : TABLE ou VIEW.
      • USER_LIST : liste des utilisateurs (séparés par une virgule) dont le rôle est révoqué. Pour obtenir la liste des formats valides, consultez user_list.
    6. Pour révoquer l'accès accordé dans une instruction GRANT du fichier, remplacez l'instruction GRANT par une instruction REVOKE.

    7. Facultatif : Cliquez sur Format.

    8. Exécutez la table ou la vue.

    9. Si vous avez révoqué l'accès à une table incrémentielle, supprimez l'instruction REVOKE du fichier de définition de table après la première exécution.

    L'exemple de code suivant montre comment révoquer le rôle Lecteur BigQuery d'un utilisateur sur une table :

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      REVOKE `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      FROM "user:222larabrown@gmail.com"
    }
    

    Gérer collectivement les rôles BigQuery pour les tables et les vues

    Pour contrôler l'accès BigQuery aux tables et vues individuelles à un seul endroit, vous pouvez créer un fichier type: "operations" dédié avec des instructions DCL GRANT et REVOKE.

    Pour gérer l'accès aux table BigQuery dans un seul fichier type: "operations", procédez comme suit :

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

      Accéder à Dataform

    2. Sélectionnez un dépôt, puis un espace de travail.

    3. Dans le volet Fichiers, à côté de definitions/, cliquez sur le menu  Plus.

    4. Cliquez sur Créer un fichier.

    5. Dans le champ Ajouter un chemin d'accès au fichier, saisissez le nom du fichier suivi de .sqlx après definitions/. Par exemple, definitions/table-access.sqlx.

      Les noms de fichiers ne peuvent contenir que des chiffres, des lettres, des traits d'union et des traits de soulignement.

    6. Cliquez sur Créer un fichier.

    7. Dans le volet Fichiers, développez le répertoire definitions/, puis sélectionnez le fichier que vous venez de créer.

    8. Dans le fichier, saisissez l'extrait de code suivant :

        config { type: "operations" }
      
        GRANT "ROLE_LIST"
        ON RESOURCE_TYPE RESOURCE_NAME
        TO "USER_LIST"
      
        REVOKE "ROLE_LIST"
        ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME
        TO "USER_LIST"
      

      Remplacez les éléments suivants :

      • ROLE_LIST : rôle BigQuery ou liste de rôles BigQuery séparés par une virgule que vous souhaitez attribuer ou révoquer.
      • RESOURCE_TYPE : TABLE ou VIEW.
      • RESOURCE_NAME : nom de la table ou de la vue.
      • USER_LIST : liste des utilisateurs (séparés par une virgule) auxquels le rôle est attribué ou révoqué. Pour obtenir la liste des formats valides, consultez user_list.
    9. Ajoutez les conditions GRANT et REVOKE, le cas échéant.

      1. Pour révoquer l'accès accordé dans une instruction GRANT du fichier, remplacez l'instruction GRANT par une instruction REVOKE.

        Si vous supprimez l'instruction GRANT sans ajouter l'instruction REVOKE, l'accès n'est pas révoqué.

    10. Facultatif : Cliquez sur Format.

    11. Exécutez le fichier après chaque mise à jour.

      1. Si vous avez accordé ou révoqué l'accès à une table incrémentielle, supprimez l'instruction GRANT ou REVOKE du fichier après la première exécution de l'instruction.

    Utiliser l'API Config pour personnaliser le comportement d'IAM

    Vous pouvez utiliser la méthode d'API projects.locations.updateConfig Dataform pour personnaliser le comportement d'IAM et renforcer la sécurité.

    Attribuer un rôle spécifique lors de la création d'une ressource

    Lorsque vous définissez le champ setAuthenticatedUserAdmin sur true dans la ressource projects.locations.repositories, Dataform accorde automatiquement à l'utilisateur qui crée le dépôt le rôle Administrateur Dataform (roles/dataform.admin) sur ce dépôt. De plus, Dataform attribue le rôle d'administrateur Dataform à tout utilisateur qui crée un espace de travail dans ce dépôt.

    Vous pouvez utiliser le champ creator_role (aperçu) dans la méthode projects.locations.updateConfig pour remplacer ce comportement. Si setAuthenticatedUserAdmin est défini sur true et que vous configurez le champ creator_role avec un rôle personnalisé, Dataform accorde le rôle personnalisé au lieu du rôle dataform.admin par défaut.

    Implémenter des autorisations de planification améliorées

    Pour exiger que les utilisateurs disposent d'autorisations explicites pour planifier des workflows Dataform, définissez le champ enable_project_checks_for_scheduling sur true dans la méthode projects.locations.updateConfig.

    Lorsque vous activez ces vérifications pour la planification, l'utilisateur a besoin des autorisations suivantes :

    • Pour créer une configuration de workflow :

      • L'autorisation dataform.workflowConfigs.create sur le projet, accordée par le rôle Planificateur de code (roles/dataform.codeScheduler).
      • L'autorisation dataform.repositories.scheduleWorkflow sur le dépôt, accordée par le rôle Administrateur Dataform (roles/dataform.admin).
    • Pour créer une configuration de version :

    Activer les espaces de travail privés

    Pour limiter l'accès à un espace de travail Dataform afin que seul son créateur puisse lire et écrire du code dans cet espace de travail, définissez le champ enable_private_workspace sur true dans la méthode projects.locations.updateConfig.

    Cette restriction s'applique également à l'affichage des artefacts générés, tels que le code SQL compilé, les erreurs de compilation et les journaux d'exécution pour les compilations ou les appels de workflow de l'espace de travail.

    Ce paramètre remplace les rôles IAM standards qui accordent l'accès à l'espace de travail à d'autres utilisateurs du dépôt.

    Étapes suivantes