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

Ce document décrit les options de contrôle des accès disponibles pour Dataform, et 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 la page 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 autorisent à accéder aux ressources Dataform:

Role Permissions

(roles/dataform.admin)

Full access to all Dataform resources.

dataform.*

  • 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.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.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.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.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.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.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 d'administration spécifiques, telles que la création d'espaces de travail de développement ou la création de fichiers et de répertoires dans un espace de travail de développement. Pour créer des rôles personnalisés, consultez la section Créer et gérer les rôles personnalisés.

Remarques de sécurité concernant 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 SQL Dataform.

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

Pour limiter 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 aux ensembles de données ou 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 page Accorder l'accès requis à 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

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 Filter (Filtre), sélectionnez Used in (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 d'administrateur Dataform dispose d'un accès complet à toutes les ressources Dataform.

Pour en savoir plus sur l'attribution d'un rôle sur un projet, consultez Attribuer un rôle. Vous pouvez attribuer des rôles prédéfinis ou personnalisés de cette manière.

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 les rôles IAM Dataform dans 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, liez un utilisateur, un groupe, un domaine ou un compte de service à un rôle sélectionné en respectant le 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 via un rôle Dataform disposant de l'autorisation dataform.repositories.list.

  4. Dans IAM, assurez-vous que seuls les utilisateurs ayant besoin d'un accès complet à tous les dépôts Dataform se voient attribuer le rôle d'administrateur Dataform pour tous les dépôts.

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

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 sur le dépôt au compte principal allAuthenticatedUsers.

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

Par exemple, lorsque vous attribuez le rôle Lecteur Dataform à allAuthenticatedUsers sur le dépôt sales, tous les comptes de service et les utilisateurs d'Internet qui se sont authentifiés avec un compte Google disposent 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 les éléments suivants :

    • ROLE: 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 accorde 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 public n'est accordé au dépôt Dataform, vous pouvez restreindre le compte principal allAuthenticatedUsers dans votre projet.

Pour restreindre allAuthenticatedUsers dans votre projet, vous pouvez définir la règle iam.allowedPolicyMemberDomains et supprimer allAuthenticatedUsers de la liste des allowed_values.

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

Pour en savoir plus sur la règle iam.allowedPolicyMemberDomains et pour obtenir des instructions sur sa définition, consultez la page 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é externe (IdP) pour authentifier et autoriser des utilisateurs à accéder aux services Google Cloud avec IAM.

Dataform est compatible avec la fédération des identités des employés, sans limites connues.

Étapes suivantes