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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Enable the APIs

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

Accorder à Dataform l'accès requis

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

À propos des comptes de service dans Dataform

Lorsque vous créez votre premier dépôt Dataform, Dataform génère automatiquement un compte de service par défaut. Dataform utilise le compte de service par défaut pour interagir avec BigQuery en votre nom. Par défaut, aucun rôle ni autorisation BigQuery n'est attribué au compte de service Dataform par défaut. Vous devez accorder l'accès requis au compte de service Dataform par défaut.

L'ID de votre compte de service Dataform par défaut se présente sous la forme suivante:

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

Remplacez PROJECT_NUMBER par l'ID numérique de votre projet Google Cloud. Vous trouverez l'ID de votre projet Google Cloud dans le tableau de bord de la console Google Cloud. Pour en savoir plus, reportez-vous à la section Identifier les projets.

En plus du compte de service Dataform par défaut, vous pouvez utiliser d'autres comptes de service pour exécuter des workflows en votre nom. Vous pouvez configurer des comptes de service personnalisés de l'une des façons suivantes:

Lorsque vous créez un dépôt ou une configuration de workflow Dataform, vous pouvez sélectionner n'importe quel compte de service associé à votre projet Google Cloud auquel vous avez accès. Vous devez configurer les autorisations requises pour tous les comptes de service associés à vos ressources Dataform.

Un compte de service personnalisé associé à un dépôt Dataform n'est utilisé que pour exécuter des workflows à partir de ce dépôt. Toutes les autres opérations de dépôt sont toujours effectuées par le compte de service Dataform par défaut.

Rôles requis pour les comptes de service Dataform

Les comptes de service par défaut et personnalisés utilisés dans Dataform nécessitent les rôles IAM BigQuery suivants pour pouvoir exécuter des workflows dans BigQuery:

Vous devez également attribuer au compte de service Dataform par défaut le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) afin qu'il puisse accéder à tous les comptes de service personnalisés que vous souhaitez utiliser dans Dataform.

Points à prendre en compte concernant la sécurité des comptes de service Dataform

L'attribution des rôles requis par Dataform à un compte de service s'accompagne des considérations de sécurité suivantes:

  • Tout compte de service auquel les rôles requis sont attribués peut accéder à BigQuery ou à Secret Manager dans le projet auquel le compte de service appartient, quel que soit le contrôle des services VPC.

    Pour en savoir plus, consultez la section Configurer VPC Service Controls pour Dataform.

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

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

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

Attribuer les rôles BigQuery requis à un compte de service utilisé dans Dataform

Pour accorder les rôles IAM BigQuery requis à votre compte de service Dataform par défaut ou à un compte de service personnalisé que vous souhaitez utiliser dans Dataform, procédez comme suit:

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

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

  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.

Accorder l'accès à la création de jetons à un compte de service personnalisé

Pour utiliser un compte de service personnalisé dans Dataform, le compte de service Dataform par défaut doit pouvoir y accéder. Pour accorder cet accès, vous devez ajouter le compte de service Dataform par défaut en tant que compte principal au compte de service personnalisé avec le rôle Créateur de jetons de compte de service.

Pour accorder au compte 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 Dataform personnalisé.

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

  5. Dans le champ Nouveaux comptes principaux, saisissez l'ID de votre compte de service Dataform par défaut.

    L'ID de votre compte de service Dataform par défaut se présente sous la forme suivante:

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

  7. Cliquez sur Enregistrer.

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

Ce document décrit les options de contrôle des accès de Dataform et explique comment afficher et accorder des rôles Dataform. Dataform utilise la gestion de l'authentification et des accès (IAM) pour le contrôle des accès. Pour en savoir plus sur les rôles et les autorisations dans IAM, consultez la section Comprendre les rôles et les autorisations.

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.locations.get
  • dataform.locations.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.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.setIamPolicy
  • dataform.repositories.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

(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.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.locations.*

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

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.locations.*

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

dataform.repositories.*

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

Read-only access to all code resources.

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.locations.*

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

  • dataform.locations.get
  • dataform.locations.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.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 des fichiers et des répertoires dans un espace de travail de développement. Pour créer des rôles personnalisés, consultez la page 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 du compte de service Dataform par défaut et de toutes les autorisations accordées à ce compte de service. Cela inclut l'exécution des workflows Dataform.

Les autorisations dataform.repositories.create sont incluses dans les rôles IAM suivants:

Pour restreindre les données qu'un utilisateur ou un compte de service peut lire ou écrire dans BigQuery, vous pouvez accorder des autorisations IAM BigQuery précises à des ensembles de données ou des tables BigQuery sélectionnés. Pour en savoir plus, consultez les pages 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 le compte de service Dataform par défaut, ainsi que sur les rôles et les autorisations requis, consultez la section Accorder à Dataform l'accès requis.

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 les autorisations du rôle dans le volet de droite.

    Par exemple, le rôle "Administrateur Dataform" dispose d'un accès complet à toutes les ressources Dataform.

Pour en savoir plus sur l'attribution d'un rôle à un projet, consultez la page 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 repositories.setIamPolicy de l'API Dataform.

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 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 accorder 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 via un rôle Dataform avec 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 se voient attribuer le 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 d'é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/v1beta1/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 au compte principal allAuthenticatedUsers.

Lorsque vous attribuez un rôle IAM au compte principal allAuthenticatedUsers, ce rôle est accordé aux comptes de service et à tous les utilisateurs sur Internet qui se sont authentifiés avec un compte Google. Cela englobe 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 la section Tous les utilisateurs authentifiés.

Par exemple, lorsque vous attribuez le rôle Lecteur de Dataform à allAuthenticatedUsers sur le dépôt sales, tous les comptes de service et tous les 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 un 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 API Dataform repositories.setIamPolicy qui attribue le rôle de 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/v1beta1/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 n'est accordé au public sur 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 la section Restreindre les identités par domaine.

Fédération d'identité de personnel 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 limite connue.

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

Cette section 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 la page 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 LDD GRANT au fichier de définition .sqlx de la table ou de la vue sélectionnée.

Pour accorder 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 page.

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

    • RESOURCE_TYPE : TABLE ou VIEW.

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

      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é un 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 page.

    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 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 d'utilisateurs séparés par des virgules 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 dans le 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 de 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 de BigQuery à des tables et des vues individuelles dans un seul emplacement, vous pouvez créer un fichier type: "operations" dédié avec des instructions DCL GRANT et REVOKE.

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

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

    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 nouvellement créé.

  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 accorder ou révoquer.
    • RESOURCE_TYPE : TABLE ou VIEW.
    • RESOURCE_NAME: nom de la table ou de la vue.
    • USER_LIST: liste d'utilisateurs séparés par une virgule auxquels le rôle est attribué ou dont il est révoqué. Pour obtenir la liste des formats valides, consultez user_list.
  9. Ajoutez les instructions GRANT et REVOKE si nécessaire.

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

      Supprimer l'instruction GRANT sans ajouter l'instruction REVOKE ne révoque pas l'accès.

  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.

Étape suivante