Examiner et appliquer les recommandations de rôle pour les ensembles de données BigQuery

Cette page explique comment afficher, comprendre et appliquer des recommandations de rôle IAM pour les ensembles de données BigQuery. Les recommandations de rôle vous aident à appliquer le principe du moindre privilège en vous assurant que les comptes principaux ne disposent que des autorisations dont ils ont réellement besoin.

Avant de commencer

Rôles IAM requis

Pour obtenir les autorisations nécessaires pour gérer les recommandations de rôles au niveau de l'ensemble de données, demandez à votre administrateur de vous attribuer les rôles IAM suivants:

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ces rôles prédéfinis contiennent les autorisations requises pour gérer les recommandations de rôle au niveau des ensembles de données. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer les recommandations de rôle au niveau de l'ensemble de données:

  • Pour afficher les recommandations :
    • iam.roles.get sur votre projet
    • iam.roles.list sur votre projet
    • recommender.iamPolicyRecommendations.get sur votre projet
    • recommender.iamPolicyRecommendations.list sur votre projet
    • recommender.iamPolicyInsights.get sur votre projet
    • recommender.iamPolicyInsights.list sur votre projet
    • bigquery.datasets.getIamPolicy sur votre ensemble de données
  • Pour appliquer et ignorer des recommandations :
    • recommender.iamPolicyRecommendations.update sur votre projet
    • bigquery.datasets.setIamPolicy sur votre ensemble de données

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Lire et appliquer les recommandations

Vous pouvez examiner et appliquer les recommandations de rôle au niveau de l'ensemble de données à l'aide de Google Cloud CLI et de l'API Recommender.

gcloud

Examinez les recommandations :

Pour répertorier les recommandations au niveau de l'ensemble de données, exécutez la commande gcloud recommender recommendations list en ne filtrant que les recommandations d'ensemble de données BigQuery:

gcloud recommender recommendations list \
    --location=LOCATION \
    --recommender=google.iam.policy.Recommender \
    --project=PROJECT_ID \
    --format=json \
    --filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"

Remplacez les valeurs suivantes :

  • LOCATION: région dans laquelle se trouvent vos ensembles de données Cloud Storage (par exemple, us ou us-central1).
  • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

La réponse est semblable à l'exemple suivant. Dans cet exemple, tous les utilisateurs dotés du rôle Éditeur sur le projet my-project (projectEditor:my-project) disposent du rôle Éditeur de données BigQuery (roles/bigquery.dataEditor) sur l'ensemble de données dataset-1. Cependant, ce rôle n'a pas été utilisé au cours des 90 derniers jours. Par conséquent, la recommandation de rôle vous suggère de révoquer le rôle:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "projectEditor:my-project",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataEditor",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"3b123bc08d028128\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 37
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  },
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "user:alicexz@google.com",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataOwner",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"1da285f7aa6438f1\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 64
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  }
]

Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du compte principal aux ressources Google Cloud. Pour savoir comment consulter les recommandations à partir de gcloud CLI, consultez la section Examiner les recommandations sur cette page.

Pour appliquer une recommandation, procédez comme suit :

  1. Utilisez la commande gcloud recommender recommendations mark-claimed pour définir l'état de la recommandation sur CLAIMED,, ce qui empêche la recommandation de changer lorsque vous l'appliquez :

    gcloud recommender recommendations mark-claimed \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Remplacez les valeurs suivantes :

    • RECOMMENDATION_ID : identifiant unique de la recommandation. Cette valeur apparaît à la fin du champ name de la recommandation. Par exemple, si le champ name est défini sur projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID de la recommandation est fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: région dans laquelle se trouve votre ensemble de données BigQuery (par exemple, us ou us-central1).
    • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • FORMAT : format de la réponse. Utilisez json ou yaml.
    • ETAG : valeur du champ etag dans la recommandation, telle que "dd0686e7136a4cbb". Notez que cette valeur peut inclure des guillemets.
    • STATE_METADATA : facultatif. Paires clé/valeur séparées par des virgules contenant votre choix de métadonnées relatives à la recommandation. Exemple : --state-metadata=reviewedBy=alice,priority=high. Les métadonnées remplacent le champ stateInfo.stateMetadata de la recommandation.

    Si la commande aboutit, la réponse affiche la recommandation à l'état CLAIMED, comme indiqué dans l'exemple suivant. Pour plus de clarté, l'exemple omet la plupart des champs :

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
    
  2. Obtenez la règle d'autorisation pour l'ensemble de données, puis modifiez et définissez la règle d'autorisation afin qu'elle reflète la recommandation.

  3. Mettez à jour l'état de la recommandation sur SUCCEEDED si vous avez appliqué la recommandation ou sur FAILED si vous ne pouvez pas appliquer la recommandation :

    gcloud recommender recommendations COMMAND \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Remplacez les valeurs suivantes :

    • COMMAND: utilisez mark-succeeded si vous avez pu appliquer la recommandation ou mark-failed si vous n'avez pas pu appliquer la recommandation.
    • RECOMMENDATION_ID : identifiant unique de la recommandation. Cette valeur apparaît à la fin du champ name de la recommandation. Par exemple, si le champ name est défini sur projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID de la recommandation est fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: région dans laquelle se trouve votre ensemble de données BigQuery (par exemple, us ou us-central1).
    • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • FORMAT : format de la réponse. Utilisez json ou yaml.
    • ETAG : valeur du champ etag dans la recommandation, telle que "dd0686e7136a4cbb". Notez que cette valeur peut inclure des guillemets.
    • STATE_METADATA : facultatif. Paires clé/valeur séparées par des virgules contenant votre choix de métadonnées relatives à la recommandation. Exemple : --state-metadata=reviewedBy=alice,priority=high. Les métadonnées remplacent le champ stateInfo.stateMetadata de la recommandation.

    Par exemple, si vous avez marqué la recommandation comme réussie, la réponse affiche la recommandation avec l'état SUCCEEDED. Pour plus de clarté, cet exemple omet la plupart des champs :

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "SUCCEEDED"
    }
    ...
    

REST

Ces instructions partent du principe que vous avez authentifié et défini la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

Examinez les recommandations :

Pour répertorier toutes les recommandations disponibles pour vos ensembles de données BigQuery, utilisez la méthode recommendations.list de l'API Recommender.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • LOCATION: région dans laquelle se trouvent vos ensembles de données BigQuery (par exemple, us ou us-central1).
  • PAGE_SIZE : facultatif. Nombre maximal de résultats à renvoyer pour cette requête. Si cette valeur n'est pas spécifiée, le serveur détermine le nombre de résultats à renvoyer. Si le nombre de recommandations est supérieur à la taille de la page, la réponse contient un jeton de pagination que vous pouvez utiliser pour récupérer la page de résultats suivante.
  • PAGE_TOKEN : facultatif. Jeton de pagination renvoyé dans une réponse précédente de cette méthode. Si spécifié, la liste de recommandations commence à la fin de la requête précédente.
  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

Méthode HTTP et URL :

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse est semblable à l'exemple suivant. Dans cet exemple, tous les utilisateurs dotés du rôle Éditeur pour le projet "my-project" (projectEditor:my-project) disposent du rôle Éditeur de données BigQuery (roles/bigquery.dataEditor) sur l'ensemble de données dataset-1. Cependant, ce rôle n'a pas été utilisé au cours des 90 derniers jours. Par conséquent, la recommandation de rôle vous suggère de révoquer le rôle:

{
  "recommendations": [
    {
      "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
      "description": "This role has not been used during the observation window.",
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "primaryImpact": {
        "category": "SECURITY",
        "securityProjection": {
          "details": {
            "revokedIamPermissionsCount": 37
          }
        }
      },
      "content": {
        "operationGroups": [
          {
            "operations": [
              {
                "action": "remove",
                "resourceType": "bigquery.googleapis.com/Dataset",
                "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
                "path": "/iamPolicy/bindings/*/members/*",
                "pathFilters": {
                  "/iamPolicy/bindings/*/condition/expression": "",
                  "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                  "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
                }
              }
            ]
          }
        ],
        "overview": {
          "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
          "member": "projectEditor:my-project",
          "removedRole": "roles/bigquery.dataEditor",
          "addedRoles": [],
          "minimumObservationPeriodInDays": "0"
        }
      },
      "stateInfo": {
        "state": "ACTIVE"
      },
      "etag": "\"d008ad3780bad5e0\"",
      "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
      "associatedInsights": [
        {
          "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
        }
      ],
      "priority": "P4",
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ]
    }
  ]
}

Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du compte principal aux ressources Google Cloud. Pour savoir comment consulter les recommandations à partir de l'API REST, consultez la section Examiner les recommandations sur cette page.

Pour appliquer une recommandation, procédez comme suit :

  1. Définissez l'état de la recommandation sur CLAIMED :

    Pour marquer une recommandation comme CLAIMED, ce qui l'empêche de changer lorsque vous l'appliquez, utilisez la méthode recommendations.markClaimed de l'API Recommender.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants:

    • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • LOCATION: région dans laquelle se trouve votre ensemble de données BigQuery (par exemple, us ou us-central1).
    • RECOMMENDATION_ID : identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champ name de la recommandation. Par exemple, si le champ name est projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID de la recommandation est fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG : valeur du champ etag dans la recommandation, telle que "dd0686e7136a4cbb". Utilisez des barres obliques inverses pour échapper les guillemets (par exemple, "\"df7308cca9719dcc\"").
    • STATE_METADATA : facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple : {"reviewedBy": "alice", "priority": "high"}. Les métadonnées remplacent le champ stateInfo.stateMetadata de la recommandation.

    Méthode HTTP et URL :

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed

    Corps JSON de la requête :

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse affiche la recommandation à l'état CLAIMED, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :

    ...
    "stateInfo": {
      "state": "CLAIMED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

  2. Obtenez la stratégie d'autorisation pour le projet, puis modifiez la stratégie d'autorisation afin qu'elle reflète la recommandation.

  3. Mettez à jour l'état de la recommandation sur SUCCEEDED si vous avez appliqué la recommandation ou sur FAILED si vous ne pouvez pas appliquer la recommandation :

    SUCCEEDED

    Pour marquer une recommandation comme SUCCEEDED, ce qui indique que vous avez pu l'appliquer, utilisez la méthode recommendations.markSucceeded de l'API Recommender.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants:

    • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • LOCATION: région dans laquelle se trouve votre ensemble de données BigQuery (par exemple, us ou us-central1).
    • RECOMMENDATION_ID : identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champ name de la recommandation. Par exemple, si le champ name est projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID de la recommandation est fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG : valeur du champ etag dans la recommandation, telle que "dd0686e7136a4cbb". Utilisez des barres obliques inverses pour échapper les guillemets (par exemple, "\"df7308cca9719dcc\"").
    • STATE_METADATA : facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple : {"reviewedBy": "alice", "priority": "high"}. Les métadonnées remplacent le champ stateInfo.stateMetadata de la recommandation.

    Méthode HTTP et URL :

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded

    Corps JSON de la requête :

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse affiche la recommandation à l'état SUCCEEDED, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :

    ...
    "stateInfo": {
      "state": "SUCCEEDED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

    FAILED

    Pour marquer une recommandation comme FAILED, ce qui signifie que vous n'avez pas pu l'appliquer, utilisez la méthode recommendations.markFailed de l'API Recommender.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants:

    • PROJECT_ID: ID du projet Google Cloud contenant vos ensembles de données BigQuery. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • LOCATION: région dans laquelle se trouve votre ensemble de données BigQuery (par exemple, us ou us-central1).
    • RECOMMENDATION_ID : identifiant unique de la recommandation. Cette valeur s'affiche à la fin du champ name de la recommandation. Par exemple, si le champ name est projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, l'ID de la recommandation est fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG : valeur du champ etag dans la recommandation, telle que "dd0686e7136a4cbb". Utilisez des barres obliques inverses pour échapper les guillemets (par exemple, "\"df7308cca9719dcc\"").
    • STATE_METADATA : facultatif. Objet contenant des paires clé/valeur avec les métadonnées de votre choix concernant la recommandation. Exemple : {"reviewedBy": "alice", "priority": "high"}. Les métadonnées remplacent le champ stateInfo.stateMetadata de la recommandation.

    Méthode HTTP et URL :

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed

    Corps JSON de la requête :

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse affiche la recommandation à l'état FAILED, comme illustré dans l'exemple suivant. Pour plus de clarté, cet exemple omet la plupart des champs :

    ...
    "stateInfo": {
      "state": "FAILED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

Comprendre les recommandations

Chaque recommandation inclut des informations pour vous aider à comprendre pourquoi elle a été émise.

Pour en savoir plus sur les champs d'une recommandation, consultez la documentation de référence Recommendation.

Pour afficher l'utilisation des autorisations sur laquelle cette recommandation est fondée, consultez les insights sur les stratégies associés à la recommandation. Ces insights sont répertoriés dans le champ associatedInsights. Pour afficher un insight de stratégie associé à la recommandation, procédez comme suit :

  1. Copiez l'ID de l'insight associé. L'ID d'insight correspond à tout ce qui suit insights/ dans le champ insight. Par exemple, si le champ insight indique projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, l'ID de l'insight est 7849add9-73c0-419e-b169-42b3671173fb.
  2. Suivez les instructions pour obtenir un insight sur les stratégies en utilisant l'ID d'insight que vous avez copié.

Étapes suivantes