Examiner les insights sur les stratégies pour les ensembles de données BigQuery

Cette page explique comment gérer les insights sur les stratégies au niveau de l'ensemble de données. Il s'agit de résultats basés sur le machine learning (apprentissage automatique) concernant l'utilisation des autorisations pour vos ensembles de données BigQuery. Les insights sur les stratégies peuvent vous aider à identifier les comptes principaux disposant d'autorisations dont ils n'ont pas besoin.

Cette page se concentre sur les insights sur les stratégies pour les ensembles de données. L'outil fournit également des insights sur les stratégies pour les types de ressources suivants:

Les insights sur les stratégies au niveau d'un ensemble de données sont parfois liés à des recommandations de rôle. Les recommandations de rôle suggèrent des mesures que vous pouvez prendre pour résoudre les problèmes identifiés par les insights sur les stratégies au niveau de l'ensemble de données.

Avant de commencer

Rôles requis

Pour obtenir les autorisations dont vous avez besoin pour gérer les insights sur les stratégies au niveau de l'ensemble de données, demandez à votre administrateur de vous attribuer les rôles IAM suivants sur votre projet:

  • Propriétaire de données BigQuery (`roles/bigquery.dataOwner`)
  • Administrateur de l'outil de recommandation IAM ("roles/recommender.iamAdmin")
  • Gérer les insights sur les stratégies au niveau de l'ensemble de données avec la gcloud CLI ou l'API REST : Consommateur d'utilisation du service (`roles/serviceusage.serviceUsageConsumer`)

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 insights sur les stratégies 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 insights sur les stratégies au niveau de l'ensemble de données:

  • Affichez les insights sur les stratégies au niveau de l'ensemble de données :
    • recommender.iamPolicyInsights.get
    • recommender.iamPolicyInsights.list
  • Modifier les insights sur les stratégies au niveau de l'ensemble de données : recommender.iamPolicyInsights.update
  • Gérez les insights sur les stratégies au niveau de l'ensemble de données avec gcloud CLI ou l'API REST : serviceusage.services.use

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

Lister les insights sur les stratégies au niveau de l'ensemble de données

Pour répertorier tous les insights sur les stratégies au niveau de l'ensemble de données pour votre projet, utilisez l'une des méthodes suivantes:

gcloud

Utilisez la commande gcloud recommender insights list pour afficher tous les insights sur les stratégies au niveau de l'ensemble de données pour votre projet.

Avant d'exécuter la commande, remplacez les valeurs suivantes :

  • PROJECT_ID : ID du projet pour lequel vous souhaitez répertorier des insights.
  • LOCATION: emplacement des ensembles de données dont vous souhaitez répertorier les insights.
gcloud recommender insights list --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION\
    --filter="insightSubtype:PERMISSIONS_USAGE_BIGQUERY_DATASET"

Le résultat répertorie tous les insights sur les stratégies au niveau de l'ensemble de données pour votre projet, à l'emplacement spécifié. Exemple :

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE                     DESCRIPTION
101d03ad-6148-4628-943e-fcf1a3af6b57  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
15133dd9-4cbc-41e9-8990-b189241676d8  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
1590aeae-d5bf-4e3d-b7d5-e230212f5faf  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  4 of the permissions in this role binding were used in the past 90 days.
280e5a14-4d09-4ac6-8e14-be7407611ad7  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
34102078-085f-45d3-ae72-81da16c75781  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  10 of the permissions in this role binding were used in the past 90 days.

REST

La méthode insights.list de l'API Recommender répertorie tous les insights sur les stratégies au niveau de l'ensemble de données pour votre projet.

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

  • PROJECT_ID : ID du projet pour lequel vous souhaitez répertorier des insights.
  • LOCATION: emplacement des ensembles de données dont vous souhaitez répertorier les insights.

Méthode HTTP et URL :

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights?filter=insightSubtype%20%3D%20PERMISSIONS_USAGE_BIGQUERY_DATASET

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

La réponse répertorie tous les insights sur les stratégies au niveau de l'ensemble de données pour votre projet à l'emplacement spécifié. Exemple :

{
  "insights": [
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataEditor",
        "member": "projectEditor:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "37"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"35d4af47524d3f0c\"",
      "severity": "LOW"
    },
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/15133dd9-4cbc-41e9-8990-b189241676d8",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataViewer",
        "member": "projectViewer:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "17"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/bc9b4c28-cc93-4a91-97ea-ff67e3cef1b4"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-2"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"eafa79df1b329063\"",
      "severity": "LOW"
    }
  ]
}

Pour en savoir plus sur les composants d'un insight, consultez Examiner les insights sur les stratégies au niveau de l'ensemble de données sur cette page.

Obtenir un insight unique sur les stratégies au niveau de l'ensemble de données

Pour obtenir plus d'informations sur un seul insight, y compris sa description, son état et toutes les recommandations auxquelles il est associé, utilisez l'une des méthodes suivantes :

gcloud

Pour afficher les informations sur un seul insight, exécutez la commande gcloud recommender insights describe avec l'ID de l'insight.

  • INSIGHT_ID : ID de l'insight que vous souhaitez afficher. Pour trouver cet ID, répertoriez les insights de votre projet.
  • PROJECT_ID : ID du projet pour lequel vous souhaitez gérer des insights.
  • LOCATION: emplacement de l'ensemble de données dont vous souhaitez obtenir les insights.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION

Le résultat affiche les détails de l'insight. Par exemple, l'insight suivant indique que 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, mais qu'aucune des autorisations de ce rôle n'a été utilisée au cours des 90 derniers jours:

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

Pour en savoir plus sur les composants d'un insight, consultez Examiner les insights sur les stratégies au niveau de l'ensemble de données sur cette page.

REST

La méthode insights.get de l'API Recommender permet d'obtenir un seul insight.

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

  • PROJECT_ID : ID du projet pour lequel vous souhaitez gérer des insights.
  • LOCATION: emplacement de l'ensemble de données dont vous souhaitez obtenir les insights.
  • INSIGHT_ID : ID de l'insight que vous souhaitez afficher. Si vous ne connaissez pas l'ID de l'insight, vous pouvez le trouver en répertoriant les insights dans votre projet. L'ID d'un insight correspond à tout ce qui suit insights/ dans le champ name de l'insight.

Méthode HTTP et URL :

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

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

La réponse contient les détails de l'insight. Par exemple, l'insight suivant indique que 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, mais qu'aucune des autorisations de ce rôle n'a été utilisée au cours des 90 derniers jours:

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

Pour en savoir plus sur les composants d'un insight, consultez Examiner les insights sur les stratégies au niveau de l'ensemble de données sur cette page.

Examiner les insights sur les stratégies au niveau de l'ensemble de données

Après avoir obtenu un seul insight, vous pouvez consulter son contenu pour comprendre le modèle d'utilisation des ressources qu'il met en évidence.

Le contenu d'un insight est déterminé par ses sous-types. Les insights sur les stratégies au niveau de l'ensemble de données (google.iam.policy.Insight) sont associés au sous-type PERMISSIONS_USAGE_BIGQUERY_DATASET.

Les insights PERMISSIONS_USAGE_BIGQUERY_DATASET incluent les composants suivants, mais pas nécessairement dans cet ordre :

  • associatedRecommendations : identifiants de toutes les recommandations associées à l'insight. Si aucune recommandation n'est associée à l'insight, ce champ est vide.
  • category: la catégorie des insights IAM est toujours SECURITY.
  • content : rapport sur l'utilisation par un compte principal des autorisations associées à un rôle particulier. Ce champ contient les éléments suivants :

    • condition : une ou plusieurs conditions associées à la liaison qui attribue le rôle au compte principal. Si aucune condition n'est définie, ce champ contient une condition vide.
    • exercisedPermissions: autorisations du rôle utilisé par le compte principal pendant la période d'observation.
    • inferredPermissions: autorisations du rôle que l'outil de recommandation a déterminé, via le ML, dont le compte principal est susceptible d'avoir besoin en fonction des autorisations utilisées.
    • member : compte principal dont l'utilisation des autorisations a été analysée.
    • role : rôle pour lequel l'utilisation des autorisations a été analysée.
  • description : résumé lisible de l'insight.
  • etag : identifiant unique de l'état actuel d'un insight. Chaque fois que l'insight change, une nouvelle valeur etag est assignée à ce champ.

    Pour modifier l'état d'un insight, vous devez indiquer l'etag de l'insight existant. L'utilisation de l'etag permet de garantir que l'opération n'est effectuée que si l'insight n'a pas changé depuis qu'il a été récupéré.

  • insightSubtype : sous-type de l'insight
  • lastRefreshTime : date de la dernière actualisation de l'insight. Elle donne une idée de la fraîcheur des données utilisées pour générer l'insight.
  • name : nom de l'insight, au format suivant :

    projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

    Les espaces réservés prennent les valeurs suivantes :

    • PROJECT_ID: ID du projet dans lequel l'insight a été généré.
    • LOCATION: emplacement de l'ensemble de données auquel l'insight est destiné.
    • INSIGHT_ID : ID unique de l'insight.
  • observationPeriod : période d'observation ayant donné lieu à la génération de l'insight. Les données sources permettant de générer l'insight se terminent à la dernière actualisation (lastRefreshTime) et commencent à la dernière actualisation (lastRefreshTime) en décomptant la période d'observation (observationPeriod).
  • stateInfo : état de l'insight. Les insights passent par différents états après leur création :

    • ACTIVE (actif) : l'insight a été généré, mais aucune action n'a été effectuée, ou l'état de l'insight n'a pas été mis à jour suite à l'action qui a été effectuée. Les insights dans cet état sont mis à jour lorsque les données sous-jacentes changent.
    • ACCEPTED (accepté) : des actions ont été effectuées en réponse à l'insight. Les insights passent dans cet état lorsqu'une recommandation associée a été marquée comme CLAIMED, SUCCEEDED ou FAILED, ou lorsque l'insight a été accepté directement. Lorsqu'un insight est à l'état ACCEPTED, son contenu ne peut pas changer. Une fois dans cet état, les insights sont conservés pendant 90 jours.
  • targetResources: nom complet de la ressource de l'ensemble de données auquel l'insight est destiné. Exemple : //bigquery.googleapis.com/projects/my-project/datasets/my-dataset.

Marquer un insight sur une stratégie au niveau de l'ensemble de données comme ACCEPTED

Si vous effectuez une action en réponse à un insight actif, vous pouvez marquer cet insight comme ACCEPTED. L'état ACCEPTED indique à l'API Recommender que vous avez effectué une action sur la base de cet insight, ce qui lui permettra d'affiner ses recommandations futures.

Les insights acceptés sont conservés pendant 90 jours après avoir été marqués comme ACCEPTED.

gcloud

Exécutez la commande gcloud recommender insights mark-accepted avec l'ID de l'insight pour marquer un insight comme ACCEPTED.

  • INSIGHT_ID : ID de l'insight que vous souhaitez afficher. Pour trouver cet ID, répertoriez les insights de votre projet.
  • PROJECT_ID : ID du projet pour lequel vous souhaitez gérer des insights.
  • LOCATION: emplacement de l'ensemble de données dont vous souhaitez marquer l'insight comme ACCEPTED.
  • ETAG : identifiant d'une version de l'insight. Pour obtenir la valeur etag, procédez comme suit :

    1. Consultez l'insight à l'aide de la commande gcloud recommender insights describe.
    2. Dans le résultat, recherchez le champ etag et copiez sa valeur, guillemets compris. Exemple :"d3cdec23cc712bd0"
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION \
    --etag=ETAG

Le résultat affiche l'insight, dont l'état est maintenant ACCEPTED :

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

Pour en savoir plus sur les informations d'état d'un insight, consultez Examiner les insights sur les stratégies au niveau de l'ensemble de données sur cette page.

REST

La méthode insights.markAccepted de l'API Recommender marque un insight comme ACCEPTED.

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

  • PROJECT_ID : ID du projet pour lequel vous souhaitez gérer des insights.
  • LOCATION: emplacement de l'ensemble de données dont vous souhaitez marquer l'insight comme ACCEPTED.
  • INSIGHT_ID : ID de l'insight que vous souhaitez afficher. Si vous ne connaissez pas l'ID de l'insight, vous pouvez le trouver en répertoriant les insights dans votre projet. L'ID d'un insight correspond à tout ce qui suit insights/ dans le champ name de l'insight.
  • ETAG : identifiant d'une version de l'insight. Pour obtenir la valeur etag, procédez comme suit :
    1. Obtenez l'insight à l'aide de la méthode insights.get.
    2. Recherchez et copiez la valeur etag à partir de la réponse.

Méthode HTTP et URL :

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID:markAccepted

Corps JSON de la requête :

{
  "etag": "ETAG"
}

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

La réponse contient l'insight, dont l'état est ACCEPTED:

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACCEPTED"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

Pour en savoir plus sur les informations d'état d'un insight, consultez Examiner les insights sur les stratégies au niveau de l'ensemble de données sur cette page.

Étapes suivantes