Gérer les insights

En plus de proposer des recommandations, l'outil de recommandation utilise le machine learning (ML) pour fournir des insights détaillés. Les insights sont des observations qui mettent en évidence des traits caractéristiques concernant l'utilisation des ressources. Par exemple, vous pouvez grâce à eux obtenir des informations supplémentaires sur l'utilisation des autorisations dans votre projet ou identifier les comptes de service inutilisés. Certains insights renvoient également à des recommandations, car ils fournissent des informations pertinentes à leurs sujets.

Identity and Access Manager (IAM) fournit les types d'insights suivants :

  • Insights sur les stratégies : observations basées sur le ML et portant sur l'utilisation des autorisations au sein de votre projet.
  • Insights sur les comptes de service : observations portant sur les comptes de service de votre projet, indiquant par exemple quels sont les comptes de service qui n'ont pas été utilisés au cours des 90 derniers jours.

Avant de commencer

Autorisations requises

Les autorisations requises pour utiliser les insights dépendent de ce que vous souhaitez faire.

Autorisations d'afficher les insights

Pour afficher les insights, vous devez disposer d'un rôle qui inclut les autorisations suivantes, où insight-type correspond soit à iamPolicyInsights, soit à iamServiceAccountInsights :

  • recommender.insight-type.get
  • recommender.insight-type.list

Pour obtenir ces autorisations tout en suivant le principe du moindre privilège, demandez à votre administrateur de vous attribuer l'un des rôles suivants :

  • Lecteur de l'outil de recommandation IAM (roles/recommender.iamViewer)
  • IAM > Examinateur de sécurité (roles/iam.securityReviewer)

Votre administrateur peut également vous attribuer un autre rôle qui inclut les autorisations requises, par exemple un rôle personnalisé ou un rôle prédéfini moins restrictif.

Autorisations de modifier les insights

Pour modifier les insights, vous devez disposer d'un rôle qui inclut les autorisations suivantes, où insight-type correspond soit à iamPolicyInsights, soit à iamServiceAccountInsights :

  • recommender.insight-type.get
  • recommender.insight-type.list
  • recommender.insight-type.update

Pour obtenir ces autorisations tout en suivant le principe du moindre privilège, demandez à votre administrateur de vous attribuer le rôle d'Administrateur de l'outil de recommandation IAM (roles/recommender.iamAdmin).

Votre administrateur peut également vous attribuer un autre rôle qui inclut les autorisations requises, par exemple un rôle personnalisé ou un rôle prédéfini moins restrictif.

Répertorier les insights

Pour répertorier tous les insights de votre projet d'un type donné, utilisez l'une des méthodes suivantes :

gcloud

Utilisez la commande gcloud recommender insights list pour afficher tous les insights de votre projet d'un type donné.

Remplacez insight-type-id par le type d'insight que vous souhaitez répertorier. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.

gcloud recommender insights list --insight-type=insight-type-id \
    --location=global

Le résultat affiche tous les insights de votre projet du type spécifié. Exemple de résultat répertoriant tous les insights sur les stratégies d'un projet :

INSIGHT_ID                            LOCATION  INSIGHT_TYPE               CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
07841f74-02ce-4de8-bbe6-fc4eabb68568  global    google.iam.policy.Insight  SECURITY  ACCEPTED       2020-07-12T07:00:00Z
0d3ce433-f067-4e78-b6ae-03d7d1f6f040  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
0e2cc488-38fb-4b9b-942c-cfe06a0ab88f  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
12b557be-d48f-49cf-a0b0-b3b73a178edf  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
279ef748-408f-44db-9a4a-1ff8865b9839  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
29a4553d-9ffb-4508-9f13-77f40fc4e8b6  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
2a00a91a-3e37-4dca-81f7-fb607d18053f  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
2baea818-df89-4ab3-8a48-0e752459d816  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
4a59da9d-cde8-46cc-9c68-6980487175fb  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
78fee8d9-c25c-4070-9f1b-ae5e4a4a164b  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z

REST

La méthode insights.list de l'API Recommender répertorie tous les insights d'un type spécifique pour votre projet.

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

  • project-id : ID de votre projet Google Cloud.
  • insight-type-id : type d'insight que vous souhaitez répertorier. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.

Méthode HTTP et URL :

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/insightTypes/insight-type-id/insights

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

La réponse répertorie tous les insights de votre projet du type spécifié. Exemple de réponse répertoriant tous les insights sur les stratégies d'un projet :

{
  "insights": [
    {
      "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
      "description": "0 permission checks were authorized by this policy binding tuple.",
      "content": {
        "role": "roles/viewer",
        "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": []
      },
      "lastRefreshTime": "2020-07-12T07:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/1234567890"
      ],
      "insightSubtype": "PERMISSIONS_USAGE",
      "etag": "\"b153ab487e4ae100\""
    },
    {
      "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/f4292f55-105b-4744-9dc3-fcacf59685bb",
      "description": "4 permission checks were authorized by this policy binding tuple.",
      "content": {
        "role": "roles/owner",
        "member": "serviceAccount:my-service-account2@my-project.iam.gserviceaccount.com",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [
          {
            "permission": "iam.roles.create"
          },
          {
            "permission": "iam.roles.delete"
          },
          {
            "permission": "iam.roles.list"
          },
          {
            "permission": "iam.roles.update"
          }
        ],
        "inferredPermissions": []
      },
      "lastRefreshTime": "2020-07-12T07:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/6ab16c1d-edce-45e5-8d82-570fdd49892a"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/1234567890"
      ],
      "insightSubtype": "PERMISSIONS_USAGE",
      "etag": "\"49bb705553338fc3\""
    }
  ]
}

Pour savoir comment est composé un insight, consultez la section Examiner les insights sur cette page.

Obtenir un seul insight

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 IAM, exécutez la commande gcloud recommender insights describe avec l'ID de l'insight.

Avant d'utiliser cette commande, effectuez les remplacements suivants :

  • insight-id : ID de l'insight que vous souhaitez afficher. Pour trouver cet ID, répertoriez les insights de votre projet.

  • insight-type-id : type de l'insight que vous souhaitez afficher. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.

gcloud recommender insights describe insight-id \
    --insight-type=insight-type-id --location=global

Le résultat affiche les détails de l'insight. Par exemple, l'insight suivant indique que le membre my-service-account@my-project.iam.gserviceaccount.com n'a utilisé aucune autorisation associée au rôle Lecteur (roles/viewer) au cours des 90 derniers jours :

associatedRecommendations:
- recommendation: projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  exercisedPermissions: []
  inferredPermissions: []
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/viewer
description: 0 permission checks were authorized by this policy binding tuple.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/1234567890

Pour savoir comment est composé un insight, consultez la section Examiner les insights 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 ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet Google Cloud.
  • insight-type-id : type de l'insight que vous souhaitez afficher. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.
  • insight-id : ID de l'insight que vous souhaitez afficher. Pour trouver cet ID, répertoriez les insights de 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/global/insightTypes/insight-type-id/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. Exemple :

{
  "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "0 permission checks were authorized by this policy binding tuple.",
  "content": {
    "role": "roles/viewer",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": []
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/1234567890"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"b153ab487e4ae100\""
}

Pour savoir comment est composé un insight, consultez la section Examiner les insights sur cette page.

Examiner les insights

Les insights sont divisés en types et en sous-types. Le type d'insight indique le type de ressource examiné. Le sous-type d'insight indique le type d'information contenu dans l'insight.

IAM propose les types et sous-types d'insights suivants :

Type de statistiques Sous-type d'insight
Insights sur les stratégies PERMISSION_USAGE : observations basées sur le ML et portant sur l'utilisation des autorisations au sein de votre projet.
Insights sur les comptes de service SERVICE_ACCOUNT_USAGE : observations indiquant quels sont les comptes de service de votre projet qui n'ont pas été utilisés au cours des 90 derniers jours.

Le contenu d'un insight est déterminé par son sous-type. Les sous-types d'insights répertoriés dans le tableau précédent sont composés des éléments suivants :

  • associatedRecommendations : identifiants de toutes les recommandations associées à l'insight. Si aucune recommandation n'est associée à l'insight, ce champ est vide.
  • category : catégorie des sous-types PERMISSION_USAGE et SERVICE_ACCOUNT_USAGE, à savoir : SECURITY.
  • content : information proprement dite. La structure du champ content dépend du sous-type d'insight :

    Sous-type d'insight Contenu
    PERMISSION_USAGE

    Rapport sur l'utilisation par un membre des autorisations associées à un rôle particulier. Ce champ contient les éléments suivants :

    • member : membre dont l'utilisation des autorisations a été analysée.
    • role : rôle pour lequel l'utilisation des autorisations a été analysée.
    • condition : une ou plusieurs conditions associées à la liaison qui attribue le rôle au membre. Si aucune condition n'est spécifiée, ce champ contient une condition vide.
    • exercisedPermissions : autorisations du rôle utilisées par le membre au cours de la période d'observation.
    • inferredPermissions : autorisations du rôle dont le membre a probablement besoin. Ces autorisations sont déterminées grâce au ML par l'outil de recommandation IAM sur la base des autorisations réellements utilisées.
    SERVICE_ACCOUNT_USAGE

    Rapport donnant la date à laquelle un compte de service a été authentifié pour la dernière fois. Ce champ contient les éléments suivants :

    • serviceAccountId : ID numérique unique du compte de service.
    • email : adresse e-mail du compte de service.
    • lastAuthenticatedTime : date et heure de la dernière authentification du compte de service. Ce champ n'est pas inclus si aucune authentification n'a été enregistrée pour le compte de service.
  • description : résumé lisible de l'insight.

  • etag : empreinte unique identifiant l'état actuel de l'insight. Chaque fois que l'insight change, une nouvelle valeur est assignée à ce champ.

    Pour modifier l'état d'un insight, vous devez indiquer la valeur de son etag. 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 d'insight, à savoir : PERMISSION_USAGE ou SERVICE_ACCOUNT_USAGE.

  • 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/global/insightTypes/insight-type-id/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é.
    • insight-type-id : type de l'insight, à savoir : google.iam.policy.Insight pour les insights sur les stratégies ou google.iam.serviceAccount.Insight pour les insights sur les comptes de service.
    • 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 du projet Google Cloud auquel l'insight est destiné. Par exemple, //cloudresourcemanager.googleapis.com/projects/1234567890.

Marquer un insight comme ACCEPTED

Si vous effectuez une action en réponse à un insight actif, vous pouvez marquer cet insight comme ACCEPTED (accepté). 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

Pour marquer un insight comme ACCEPTED, exécutez la commande gcloud recommender insights mark-accepted avec l'identifiant de l'insight.

Avant d'utiliser l'exemple de commande, remplacez les valeurs suivantes :

  • insight-id : ID de l'insight que vous souhaitez marquer comme ACCEPTED. Pour trouver cet ID, répertoriez les insights de votre projet.

  • insight-type-id : type de l'insight que vous souhaitez marquer comme ACCEPTED. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.

  • 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=insight-type-id --location=global \
    --etag=etag

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

associatedRecommendations:
- recommendation: projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  exercisedPermissions: []
  inferredPermissions: []
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/viewer
description: 0 permission checks were authorized by this policy binding tuple.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/1234567890

Pour en savoir plus sur les informations d'état d'un insight, consultez la section Examiner les insights 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 ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet Google Cloud.
  • insight-type-id : type de l'insight que vous souhaitez marquer comme ACCEPTED. Utilisez google.iam.policy.Insight pour les insights sur les stratégies et google.iam.serviceAccount.Insight pour les insights sur les comptes de service.
  • insight-id : ID de l'insight que vous souhaitez marquer comme ACCEPTED. Pour trouver cet ID, répertoriez les insights de 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/global/insightTypes/insight-type-id/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/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "0 permission checks were authorized by this policy binding tuple.",
  "content": {
    "role": "roles/viewer",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": []
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/1234567890"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"b153ab487e4ae100\""
}

Pour en savoir plus sur les informations d'état d'un insight, consultez la section Examiner les insights sur cette page.

Étapes suivantes