Contrôler l'accès aux ressources avec IAM
Ce document explique comment afficher la stratégie d'accès actuelle d'une ressource, comment accorder l'accès à une ressource et comment révoquer l'accès à une ressource.
Dans ce document, nous partons du principe que vous connaissez le système de gestion de l'authentification et des accès (IAM pour Identity and Access Management) dans Google Cloud.
Rôles requis
Pour obtenir les autorisations nécessaires pour modifier les stratégies IAM associées aux ressources, demandez à votre administrateur de vous accorder le rôle IAM Propriétaire de données BigQuery (roles/bigquery.dataOwner
) sur le projet.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour modifier les stratégies IAM des ressources. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Vous devez disposer des autorisations suivantes pour modifier les stratégies IAM des ressources:
-
Pour obtenir la stratégie d'accès d'un ensemble de données :
bigquery.datasets.get
-
Pour définir la stratégie d'accès d'un ensemble de données :
bigquery.datasets.update
-
Pour obtenir la stratégie d'accès d'un ensemble de données (la console Google Cloud uniquement), procédez comme suit :
bigquery.datasets.getIamPolicy
-
Pour définir la règle d'accès d'un ensemble de données (console uniquement), procédez comme suit :
bigquery.datasets.setIamPolicy
-
Pour obtenir la stratégie d'une table ou d'une vue :
bigquery.tables.getIamPolicy
-
Pour définir la stratégie d'une table ou d'une vue :
bigquery.tables.setIamPolicy
-
Pour créer l'outil bq ou des tâches SQL BigQuery (facultatif), procédez comme suit :
bigquery.jobs.create
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Afficher la stratégie d'accès d'une ressource
Les sections suivantes expliquent comment afficher les stratégies d'accès de différentes ressources.
Afficher la stratégie d'accès d'un ensemble de données
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet et sélectionnez un ensemble de données.
Cliquez sur > Autorisations.
PartageLes règles d'accès aux ensembles de données s'affichent dans le volet Autorisations d'ensemble de données.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour obtenir une stratégie existante et l'exporter dans un fichier local au format JSON, utilisez la commande
bq show
dans Cloud Shell :bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de votre ensemble de données.
- PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
API
Pour appliquer des contrôles d'accès lors de la création de l'ensemble de données, appelez datasets.insert
avec un élément dataset resource
défini.
Pour mettre à jour vos contrôles d'accès, appelez la méthode datasets.patch
et utilisez la propriété access
de la ressource Dataset
.
Comme la méthode datasets.update
remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch
pour mettre à jour les contrôles d'accès.
Afficher la stratégie d'accès d'une table ou d'une vue
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet et sélectionnez une table ou une vue.
Cliquez sur
Partager.Les stratégies d'accès aux tables ou aux vues s'affichent dans le volet Partager.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour obtenir une règle d'accès existante et l'exporter dans un fichier local au format JSON, utilisez la commande
bq get-iam-policy
dans Cloud Shell :bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de votre ensemble de données.
- RESOURCE : nom de la table ou de la vue dont vous souhaitez afficher la stratégie.
- PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
API
Pour récupérer la stratégie actuelle, appelez la méthode tables.getIamPolicy
.
Accorder l'accès à une ressource
Dans les sections suivantes, nous allons voir comment accorder l'accès à différentes ressources.
Accorder l'accès à un ensemble de données
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet et sélectionnez un ensemble de données à partager.
Cliquez sur > Autorisations.
PartageCliquez sur
Ajouter un compte principal.Dans le champ Nouveaux comptes principaux, saisissez un compte principal.
Dans la liste Sélectionner un rôle, sélectionnez un rôle prédéfini ou personnalisé.
Cliquez sur Enregistrer.
Pour revenir aux informations sur l'ensemble de données, cliquez sur Fermer.
SQL
Pour autoriser les comptes principaux à accéder aux ensembles de données, utilisez l'instruction LDC GRANT
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Remplacez les éléments suivants :
ROLE_LIST
: rôle ou liste de rôles (séparés par des virgules) que vous souhaitez attribuer.RESOURCE_NAME
: nom de la ressource sur laquelle vous souhaitez accorder l'autorisationUSER_LIST
: liste d'utilisateurs (séparés par une virgule) auxquels le rôle est attribué.Pour obtenir la liste des formats valides, consultez la page
user_list
.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
L'exemple suivant accorde le rôle de lecteur de données sur l'ensemble de données myDataset
:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour écrire les informations existantes sur l'ensemble de données (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de votre ensemble de données.
- PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
Apportez vos modifications à la section
access
du fichier JSON. Vous pouvez ajouter l'une des entréesspecialGroup
:projectOwners
,projectWriters
,projectReaders
etallAuthenticatedUsers
. Vous pouvez également ajouter l'un des éléments suivants :userByEmail
,groupByEmail
etdomain
.Par exemple, la section
access
du fichier JSON d'un ensemble de données ressemblerait à ceci :{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Une fois vos modifications terminées, exécutez la commande
bq update
et incluez le fichier JSON à l'aide de l'option--source
. Si l'ensemble de données se trouve dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant :PROJECT_ID:DATASET
.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande
bq show
sans écrire les informations dans un fichier :bq show --format=prettyjson PROJECT_ID:DATASET
Terraform
Utilisez les ressources google_bigquery_dataset_iam
pour modifier l'accès à un ensemble de données.
Définir la stratégie de contrôle d'accès pour un ensemble de données
L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_policy
pour définir la stratégie IAM de l'ensemble de données mydataset
. Cette opération remplace toute règle existante déjà associée à l'ensemble de données :
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Définir l'appartenance à un rôle pour un ensemble de données
L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_binding
afin de définir l'appartenance à un rôle donné pour l'ensemble de données mydataset
. Cette opération remplace toute appartenance existante à ce rôle.
Les autres rôles dans la stratégie Cloud IAM de l'ensemble de données sont conservés:
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:raha@altostrat.com", "group:analysts@altostrat.com" ] }
Définir l'appartenance à un rôle pour un seul compte principal
L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_member
pour mettre à jour la stratégie IAM de l'ensemble de données mydataset
afin d'accorder un rôle à un compte principal. La mise à jour de cette règle IAM n'a aucune incidence sur l'accès des autres administrateurs auxquels ce rôle a été attribué pour l'ensemble de données.
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:yuri@altostrat.com" }
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
Pour appliquer des contrôles d'accès lors de la création d'un ensemble de données, appelez la méthode datasets.insert
en spécifiant une ressource d'ensemble de données.
Pour mettre à jour vos contrôles d'accès, appelez la méthode datasets.patch
et utilisez la propriété access
de la ressource Dataset
.
Comme la méthode datasets.update
remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch
.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Définissez la propriétédataset.access_entries
avec les contrôles d'accès pour un ensemble de données. Appelez ensuite la fonction client.update_dataset()
pour mettre à jour la propriété.
Autoriser l'accès à une table ou à une vue
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le volet Explorateur, développez votre projet et sélectionnez une table ou une vue à partager.
Cliquez sur
Partager.Cliquez sur
Ajouter un compte principal.Dans le champ Nouveaux comptes principaux, saisissez un compte principal.
Dans la liste Sélectionner un rôle, sélectionnez un rôle prédéfini ou personnalisé.
Cliquez sur Enregistrer.
Pour revenir aux détails de la table ou de la vue, cliquez sur Fermer.
SQL
Pour accorder aux comptes principaux l'accès aux tables ou aux vues, utilisez l'instruction LCD GRANT
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
Remplacez les éléments suivants :
ROLE_LIST
: rôle ou liste de rôles (séparés par des virgules) que vous souhaitez attribuer.RESOURCE_TYPE
: type de ressource auquel le rôle est appliqué.Les valeurs autorisées incluent :
TABLE
,VIEW
,MATERIALIZED VIEW
etEXTERNAL TABLE
.RESOURCE_NAME
: nom de la ressource sur laquelle vous souhaitez accorder l'autorisationUSER_LIST
: liste d'utilisateurs (séparés par une virgule) auxquels le rôle est attribué.Pour obtenir la liste des formats valides, consultez la page
user_list
.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
L'exemple suivant accorde le rôle Lecteur de données sur la table myTable
:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour écrire les informations existantes dans la table ou la vue (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de l'ensemble de données contenant la table ou la vue que vous souhaitez mettre à jour.
- TABLE_OR_VIEW : nom de la ressource à mettre à jour.
- PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
Apportez vos modifications à la section
bindings
du fichier JSON. Une liaison associe un ou plusieursmembers
, ou comptes principaux, à un seulrole
. Les comptes principaux peuvent être des comptes utilisateur, des comptes de service, des groupes Google ou des domaines. Par exemple, la sectionbindings
du fichier JSON d'une table ou d'une vue ressemblerait à ceci :{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Pour mettre à jour votre règle d'accès, utilisez la commande
bq set-iam-policy
:bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande
bq get-iam-policy
sans écrire les informations dans un fichier :bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
Terraform
Utilisez les ressources google_bigquery_table_iam
pour mettre à jour l'accès à une table.
Définir la stratégie d'accès pour une table
L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_policy
pour définir la stratégie IAM de la table mytable
. Cette opération remplace toute règle existante déjà associée à la table :
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:raha@altostrat.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Définir l'appartenance à un rôle pour une table
L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_binding
pour définir l'appartenance à un rôle donné pour la table mytable
. Cette opération remplace toute appartenance existante à ce rôle.
Les autres rôles de la stratégie IAM pour la table sont conservés.
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:analysts@altostrat.com", ] }
Définir l'appartenance à un rôle pour un seul compte principal
L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_member
pour mettre à jour la stratégie IAM du tableau mytable
afin d'accorder un rôle à un compte principal. La mise à jour de cette règle IAM n'affecte pas l'accès des autres administrateurs auxquels ce rôle a été attribué pour l'ensemble de données.
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
- Pour récupérer la stratégie actuelle, appelez la méthode
tables.getIamPolicy
. Modifiez la stratégie pour ajouter des membres et/ou des liaisons. Pour connaître le format requis pour la stratégie, consultez la page de référence Stratégie.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Révoquer l'accès à une ressource
Dans les sections suivantes, nous allons voir comment révoquer l'accès à différentes ressources.
Révoquer l'accès à un ensemble de données
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le panneau Explorateur, développez votre projet et sélectionnez un ensemble de données.
Dans le panneau des détails, cliquez sur Partage > Autorisations.
Dans la boîte de dialogue Autorisations pour les ensembles de données, développez le compte principal dont vous souhaitez révoquer l'accès.
Cliquez sur
Supprimer le compte principal.Dans la boîte de dialogue Supprimer le rôle pour le compte principal ?, cliquez sur Supprimer.
Pour revenir aux détails de l'ensemble de données, cliquez sur Fermer.
SQL
Pour supprimer l'accès aux ensembles de données des comptes principaux, utilisez l'instruction LCD REVOKE
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
Remplacez les éléments suivants :
ROLE_LIST
: rôle ou liste de rôles (séparés par une virgule) que vous souhaitez révoquer.RESOURCE_NAME
: nom de la ressource sur laquelle vous souhaitez révoquer l'autorisation.USER_LIST
: liste des utilisateurs (séparés par une virgule) dont les rôles seront révoqués.Pour obtenir la liste des formats valides, consultez la page
user_list
.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
L'exemple suivant révoque le rôle Administrateur sur l'ensemble de données myDataset
:
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour écrire les informations existantes sur l'ensemble de données (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de votre ensemble de données.
- PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
Apportez vos modifications à la section
access
du fichier JSON. Vous pouvez supprimer n'importe quelle entréespecialGroup
:projectOwners
,projectWriters
,projectReaders
etallAuthenticatedUsers
. Vous pouvez également supprimer l'un des éléments suivants :userByEmail
,groupByEmail
etdomain
.Par exemple, la section
access
du fichier JSON d'un ensemble de données ressemblerait à ceci :{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Une fois vos modifications terminées, exécutez la commande
bq update
et incluez le fichier JSON à l'aide de l'option--source
. Si l'ensemble de données se trouve dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant :PROJECT_ID:DATASET
.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande
show
sans écrire les informations dans un fichier :bq show --format=prettyjson PROJECT_ID:DATASET
API
Appelez datasets.patch
et utilisez la propriété access
de la ressource Dataset
pour mettre à jour les contrôles d'accès.
Comme la méthode datasets.update
remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch
.
Go
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Python
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Définissez la propriétédataset.access_entries
avec les contrôles d'accès pour un ensemble de données. Appelez ensuite la fonction client.update_dataset()
pour mettre à jour la propriété.
Révoquer l'accès à une table ou à une vue
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le panneau Explorateur, développez votre projet et sélectionnez une table ou une vue.
Dans le panneau des détails, cliquez sur Partager.
Dans la boîte de dialogue Partager, développez le compte principal dont vous souhaitez révoquer l'accès.
Cliquez sur
Supprimer.Dans la boîte de dialogue Supprimer le rôle pour le compte principal ?, cliquez sur Supprimer.
Pour revenir aux détails de la table ou de la vue, cliquez sur Fermer.
SQL
Pour supprimer l'accès aux tables ou aux vues des comptes principaux, utilisez l'instruction LCD REVOKE
:
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
Remplacez les éléments suivants :
ROLE_LIST
: rôle ou liste de rôles (séparés par une virgule) que vous souhaitez révoquer.RESOURCE_TYPE
: type de ressource à partir duquel le rôle est révoquéLes valeurs autorisées incluent
TABLE
,VIEW
,MATERIALIZED VIEW
etEXTERNAL TABLE
.RESOURCE_NAME
: nom de la ressource sur laquelle vous souhaitez révoquer l'autorisation.USER_LIST
: liste des utilisateurs (séparés par une virgule) dont les rôles seront révoqués.Pour obtenir la liste des formats valides, consultez la page
user_list
.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
L'exemple suivant révoque le rôle Administrateur sur la table myTable
:
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pour écrire les informations existantes dans la table ou la vue (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- DATASET : nom de l'ensemble de données contenant la table ou la vue que vous souhaitez mettre à jour.
- TABLE_OR_VIEW : nom de la ressource à mettre à jour.
PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
Apportez vos modifications à la section
access
du fichier JSON. Vous pouvez supprimer n'importe quelle entréespecialGroup
:projectOwners
,projectWriters
,projectReaders
etallAuthenticatedUsers
. Vous pouvez également supprimer l'un des éléments suivants :userByEmail
,groupByEmail
etdomain
. Par exemple, la sectionaccess
du fichier JSON d'une table ou d'une vue ressemblerait à ceci :{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Pour mettre à jour votre règle d'accès, utilisez la commande
bq set-iam-policy
:bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande
get-iam-policy
sans écrire les informations dans un fichier :bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- Pour récupérer la stratégie actuelle, appelez la méthode
tables.getIamPolicy
. Modifiez la stratégie pour supprimer des membres et/ou des liaisons. Pour connaître le format requis pour la stratégie, consultez la page de référence Stratégie.
Appelez
tables.setIamPolicy
pour écrire la stratégie mise à jour. Attention : Les liaisons vides sans membre ne sont pas autorisées et entraînent une erreur.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Refuser l'accès à une ressource
Les stratégies de refus IAM vous permettent de définir des garde-fous pour l'accès aux ressources BigQuery. Vous pouvez définir des règles de refus qui empêchent certains comptes principaux d'utiliser certaines autorisations, quels que soient les rôles qui leur sont attribués.
Pour en savoir plus sur la création, la mise à jour et la suppression de stratégies de refus, consultez la section Refuser l'accès aux ressources.
Cas particuliers
Tenez compte des scénarios suivants lorsque vous créez des stratégies de refus IAM pour quelques autorisations BigQuery :
L'accès aux ressources autorisées (vues, routines, ensembles de données ou procédures stockées) vous permet de créer, supprimer ou manipuler une table, ainsi que de lire et de modifier ses données, même si vous n'êtes pas autorisé directement à effectuer ces opérations. Il permet également d'obtenir des données ou des métadonnées de modèle et d'appeler d'autres procédures stockées sur la table sous-jacente. Cette fonctionnalité implique que les ressources autorisées disposent des autorisations suivantes :
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
Pour refuser l'accès à ces ressources autorisées, ajoutez l'une des valeurs suivantes au champ
deniedPrincipal
lorsque vous créez la stratégie de refus :Valeur Cas d'utilisation principalSet://goog/public:all
Bloque tous les comptes principaux, y compris les ressources autorisées. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
Bloque toutes les ressources autorisées BigQuery dans le projet spécifié. PROJECT_NUMBER
est un identifiant unique généré automatiquement pour votre projet de typeINT64
.BigQuery met en cache les résultats des requêtes d'un propriétaire de job pendant 24 heures. Il peut y accéder sans avoir besoin de l'autorisation
bigquery.tables.getData
sur la table contenant les données. Par conséquent, l'ajout d'une stratégie de refus IAM à l'autorisationbigquery.tables.getData
ne bloque pas l'accès aux résultats mis en cache pour le propriétaire de job tant que le cache n'a pas expiré. Pour bloquer l'accès du propriétaire de job aux résultats mis en cache, créez une stratégie de refus distincte sur l'autorisationbigquery.jobs.create
.