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 .

Une erreur d'accès refusé s'affiche dans l'onglet "Informations sur le job" de la section "Résultats de la requête".

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.

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

  2. Dans l'explorateur de journaux, sélectionnez Journaux de projet comme champ d'application des journaux.

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

  4. Dans les résultats de la requête, développez l'entrée de journal correspondant à votre opération ayant échoué.

  5. Dans la section protoPayload, développez le tableau authorizationInfo, puis développez chaque nœud du tableau authorizationInfo.

    Le tableau authorizationInfo affiche chaque vérification des autorisations effectuée lors de l'appel d'API.

  6. Pour connaître la cause de l'erreur, recherchez l'entrée granted: false. L'entrée granted: 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é dans protoPayload.authenticationInfo, il s'agit du compte principal qui a tenté d'effectuer l'action.

    Section "authorizationInfo" de protoPayload qui affiche l'autorisation, la ressource et l'adresse e-mail de l'utilisateur principal.

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.

  1. Dans la console Google Cloud , accédez à la page Analyse des règles.

    Accéder à Policy Analyzer

    Vous pouvez également sélectionner IAM et administration> Analyseur de règles dans le menu de navigation.

  2. Cliquez sur Créer une requête personnalisée.

  3. Sur la page Configurer votre requête, saisissez les informations que vous avez collectées précédemment :

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

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

    3. Cliquez sur  > Ajouter un paramètre.

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

    5. Cliquez sur  > Ajouter un paramètre.

    6. 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
  4. Dans le volet Requête personnalisée, cliquez sur Analyser > Exécuter la requête.

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

  1. Ouvrez la section Autorisations BigQuery de la page "Rôles et autorisations IAM BigQuery".

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

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

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