Résoudre les problèmes liés aux autorisations IAM dans BigQuery
Ce document vous explique comment résoudre les problèmes liés aux autorisations Identity and Access Management (IAM) dans BigQuery. Les problèmes d'autorisation IAM entraînent généralement des erreurs Access Denied
telles que les suivantes :
Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
User does not have permission to query table PROJECT_ID:DATASET.TABLE.
Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.
Avant de commencer
- Pour résoudre les problèmes d'accès d'un principal à une ressource BigQuery, assurez-vous de disposer des autorisations IAM requises.
Rassemblez des informations sur le problème.
La première étape pour résoudre un problème d'accès à une ressource consiste à déterminer l'autorisation manquante, l'entité principale IAM dont l'accès a été refusé et la ressource à laquelle l'entité principale tentait d'accéder.
Obtenir des informations à partir de l'historique des erreurs ou des tâches
Pour obtenir des informations sur le principal, la ressource et les autorisations, examinez le résultat de l'outil de ligne de commande bq, la réponse de l'API ou BigQuery dans la console Google Cloud .
Par exemple, si vous tentez d'exécuter une requête avec des autorisations insuffisantes, une erreur semblable à celle ci-dessous s'affiche dans l'onglet Informations sur le job de la section Résultats de la requête de la console Google Cloud .
Examinez l'erreur pour identifier le compte principal, la ressource et les autorisations.
Dans certains cas, vous pouvez demander les autorisations manquantes directement depuis le message d'erreur. Pour en savoir plus, consultez Résoudre les messages d'erreur liés aux autorisations dans la documentation IAM.
Obtenir des informations à partir de Cloud Audit Logs
Si le message d'erreur est générique, si des informations sont manquantes ou si l'action a échoué dans un processus en arrière-plan, utilisez l'explorateur de journaux Cloud Audit Logs pour obtenir des informations sur l'erreur.
Dans la console Google Cloud , accédez à la page Explorateur de journaux.
Accéder à l'explorateur de journaux
Vous pouvez également sélectionner Surveillance> Explorateur de journaux dans le menu de navigation.
Dans l'explorateur de journaux, sélectionnez Journaux de projet comme champ d'application des journaux.
Dans la fenêtre de requête, saisissez la requête suivante pour obtenir les erreurs liées aux autorisations à partir des journaux d'accès aux données BigQuery :
resource.type="bigquery_resource" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND protoPayload.status.message:"Access Denied" OR protoPayload.status.message:"Permission denied" OR protoPayload.status.code=7
Remplacez PROJECT_ID par l'ID du projet.
Dans les résultats de la requête, développez l'entrée de journal correspondant à votre opération ayant échoué.
Dans la section
protoPayload
, développez le tableauauthorizationInfo
, puis développez chaque nœud du tableauauthorizationInfo
.Le tableau
authorizationInfo
affiche chaque vérification des autorisations effectuée lors de l'appel d'API.Pour connaître la cause de l'erreur, recherchez l'entrée
granted: false
. L'entréegranted: false
affiche les informations suivantes :permission
: chaîne d'autorisation IAM vérifiée. Exemple :bigquery.tables.getData
resource
: nom complet de la ressource à laquelle le principal a tenté d'accéder. Exemple :projects/myproject/datasets/mydataset/tables/mytable
.principalEmail
(le cas échéant) : référencé dansprotoPayload.authenticationInfo
, il s'agit du compte principal qui a tenté d'effectuer l'action.
Utiliser Policy Analyzer pour les stratégies d'autorisation
Policy Analyzer pour les stratégies d'autorisation vous permet d'identifier quels comptes principaux IAM disposent de quel accès à quelles ressources BigQuery selon vos stratégies d'autorisation IAM.
Une fois que vous avez rassemblé des informations sur l'erreur d'autorisation, vous pouvez utiliser Policy Analyzer pour comprendre pourquoi le compte principal ne dispose pas de l'accès requis. Cet outil analyse toutes les stratégies pertinentes, les appartenances à des groupes Google et l'héritage des ressources parentes telles qu'un projet, un dossier et votre organisation.
Pour utiliser Policy Analyzer avec des règles d'autorisation, vous devez créer une requête d'analyse, spécifier un champ d'application pour l'analyse, puis exécuter la requête.
Dans la console Google Cloud , accédez à la page Analyse des règles.
Vous pouvez également sélectionner IAM et administration> Analyseur de règles dans le menu de navigation.
Cliquez sur Créer une requête personnalisée.
Sur la page Configurer votre requête, saisissez les informations que vous avez collectées précédemment :
Dans la section Sélectionner le champ d'application, dans le champ Sélectionner le champ d'application de la requête, vérifiez que votre projet actuel s'affiche ou cliquez sur Parcourir pour choisir une autre ressource.
Dans la section Définir les paramètres de la requête, sélectionnez Principal pour Paramètre 1, puis saisissez l'adresse e-mail de l'utilisateur, du groupe ou du compte de service dans le champ Principal.
Cliquez sur
> Ajouter un paramètre.Pour Paramètre 2, sélectionnez Autorisation, puis dans le champ Autorisation, cliquez sur Sélectionner, choisissez l'autorisation BigQuery, puis cliquez sur Ajouter. Par exemple, sélectionnez
bigquery.tables.getData
.Cliquez sur
> Ajouter un paramètre.Pour Paramètre 3, sélectionnez Ressource, puis saisissez le nom complet de la ressource dans le champ Ressource. Le nom de la ressource doit inclure le préfixe du service, comme dans les exemples suivants :
- Projet BigQuery :
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID
- Ensemble de données BigQuery :
//bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
- Table BigQuery :
//bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
- Projet BigQuery :
Dans le volet Requête personnalisée, cliquez sur Analyser > Exécuter la requête.
Examinez les résultats de la requête. Le résultat peut être l'un des suivants :
- Une liste vide. L'absence de résultats confirme que le compte principal ne dispose pas de l'autorisation requise. Vous devrez attribuer un rôle au compte principal qui lui accorde les autorisations appropriées.
- Un ou plusieurs résultats Si l'outil d'analyse trouve une règle d'autorisation, cela signifie qu'il existe une forme d'accès. Cliquez sur Afficher la liaison pour chaque résultat afin d'afficher les rôles qui donnent accès à la ressource dont le principal est membre. La liaison de stratégie indique si l'accès est accordé par le biais de l'appartenance à un groupe ou de l'héritage, ou s'il est refusé par une condition IAM ou une stratégie de refus IAM.
Trouver le rôle IAM approprié qui accorde les autorisations requises
Après avoir confirmé que le compte principal ne dispose pas d'un accès suffisant, l'étape suivante consiste à trouver le rôle IAM prédéfini ou personnalisé approprié qui accorde les autorisations requises. Le rôle que vous choisissez doit respecter le principe du moindre privilège.
Si votre organisation utilise des rôles personnalisés, vous pouvez trouver le rôle approprié en listant tous les rôles personnalisés créés dans votre projet ou votre organisation. Par exemple, dans la console Google Cloud , sur la page Rôles, vous pouvez filtrer la liste par Type : Personnalisé pour n'afficher que les rôles personnalisés.
Pour trouver le rôle IAM prédéfini approprié, procédez comme suit.
Ouvrez la section Autorisations BigQuery de la page "Rôles et autorisations IAM BigQuery".
Dans la barre de recherche Saisissez une autorisation, saisissez l'autorisation que vous avez récupérée à partir du message d'erreur, de l'historique des tâches ou des journaux d'audit. Exemple :
bigquery.tables.getData
.Les résultats de la recherche affichent tous les rôles BigQuery prédéfinis qui accordent l'autorisation.
Appliquez le principe du moindre privilège : dans la liste des rôles, choisissez le rôle le moins permissif qui accorde les autorisations requises. Par exemple, si vous avez recherché
bigquery.tables.getData
pour accorder la possibilité d'interroger les données de table, Lecteur de données BigQuery est le rôle le moins permissif qui accorde cette autorisation.Attribuez le rôle approprié au compte principal. Pour savoir comment accorder un rôle IAM à une ressource BigQuery, consultez Contrôler l'accès aux ressources avec IAM.
Étapes suivantes
- Pour obtenir la liste de tous les rôles et autorisations IAM BigQuery, consultez Rôles et autorisations IAM BigQuery.
- Pour en savoir plus sur la résolution des problèmes liés aux stratégies d'autorisation et de refus dans IAM, consultez Résoudre les problèmes liés aux stratégies.
- Pour en savoir plus sur l'analyseur de règles Policy Intelligence, consultez Analyseur de règles pour les stratégies d'autorisation.
- Pour en savoir plus sur Policy Troubleshooter, consultez Utiliser Policy Troubleshooter.