Présentation des recommandations de rôle

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Les recommandations de rôle vous aident à identifier et supprimer les autorisations en excès de vos comptes principaux, améliorant ainsi les configurations de sécurité de vos ressources.

Présentation des recommandations de rôle

Les recommandations de rôle sont l'un des types de recommandations générés par l'outil de recommandation.

Chaque recommandation de rôle vous suggère de supprimer ou de remplacer un rôle accordant des autorisations en excès à vos comptes principaux. À grande échelle, ces recommandations vous aident à appliquer le principe du moindre privilège en vous assurant que les comptes principaux disposent uniquement des autorisations dont ils ont réellement besoin.

L'outil de recommandation identifie les autorisations en excès à l'aide d'insights sur les stratégies. Les insights sur les stratégies sont des résultats basés sur le ML concernant l'utilisation des autorisations d'un compte principal.

Certaines recommandations sont également associées à des insights sur les mouvements latéraux. Ces insights identifient les rôles permettant aux comptes de service d'un projet d'emprunter l'identité des comptes de service d'un autre projet. Pour en savoir plus, consultez la section Comment les insights sur les mouvements latéraux sont-ils générés ?.

Comment les insights sur les stratégies sont-ils générés ?

L'outil de recommandation génère des insights sur les stratégies en comparant les autorisations utilisées par chaque compte principal au cours des 90 derniers jours avec la totalité des autorisations dont il dispose. Un compte principal peut utiliser une autorisation de différentes manières :

  • Directement, en appelant une API nécessitant l'autorisation

    Par exemple, la méthode roles.list de l'API REST IAM nécessite l'autorisation iam.roles.list. Lorsque vous appelez la méthode roles.list, vous utilisez l'autorisation iam.roles.list.

    De même, lorsque vous appelez la méthode testIamPermissions pour une ressource, vous utilisez effectivement toutes les autorisations que vous testez.

  • Indirectement, en utilisant Google Cloud Console pour travailler avec les ressources Google Cloud

    Par exemple, dans Google Cloud Console, vous pouvez modifier une instance de machine virtuelle (VM) Compute Engine, ce qui nécessite différentes autorisations en fonction des paramètres que vous modifiez. Toutefois, Google Cloud Console affiche également les paramètres existants, ce qui nécessite l'autorisation compute.instances.get.

    Par conséquent, lorsque vous modifiez une instance de VM dans Google Cloud Console, vous utilisez l'autorisation compute.instances.get.

L'outil de recommandation utilise également le machine learning pour identifier les autorisations du rôle actuel d'un compte principal dont ce compte principal est susceptible d'avoir besoin à l'avenir, même s'il n'a pas utilisé ces autorisations au cours des 90 derniers jours. Pour plus d'informations, consultez la section Machine learning pour les insights sur les stratégies sur cette page.

Les insights sur les stratégies ne sont pas générés pour toutes les liaisons de rôles IAM. Pour en savoir plus sur la raison pour laquelle une liaison de rôle peut ne pas avoir d'insight sur les stratégies, consultez la section Disponibilité sur cette page.

Pour savoir comment gérer les insights sur les stratégies, consultez Gérer les insights sur les stratégies pour les projets, les dossiers et les organisations ou Gérer les insights sur les stratégies pour les buckets Cloud Storage.

Machine learning pour les insights sur les stratégies

Dans certains cas, un compte principal aura probablement besoin de certaines autorisations incluses dans ses rôles actuels mais qui n'ont pas été utilisées récemment. Pour identifier ces autorisations, l'outil de recommandation utilise un modèle de machine learning (ML) lors de la génération des insights sur les stratégies.

Ce modèle de machine learning est entraîné à l'aide de plusieurs ensembles de signaux :

  • Schémas de co-occurrence courants dans l'historique en cours d'observation : le fait qu'un utilisateur ait utilisé les autorisations A, B et C par le passé suggère que celles-ci sont liées d'une manière ou d'une autre et qu'elles sont toutes nécessaires pour mener à bien une tâche sur Google Cloud. Si le modèle de ML constate ce schéma suffisamment fréquemment, la prochaine fois qu'un autre utilisateur utilisera les autorisations A et B, le modèle suggérera qu'il pourrait également avoir besoin de l'autorisation C.

  • Connaissance du domaine, telle qu'elle est encodée dans les définitions de rôle : Cloud IAM fournit des centaines de rôles prédéfinis différents, spécifiques à un service. Si un rôle prédéfini contient un ensemble d'autorisations, cela signifie très probablement que ces autorisations doivent être accordées ensemble.

En plus de ces signaux, le modèle utilise également le plongement lexical pour calculer dans quelle mesure les autorisations sont sémantiquement similaires. Les autorisations sémantiquement similaires se "rapprochent" après le plongement et sont plus susceptibles d'être accordées ensemble. Par exemple, bigquery.datasets.get et bigquery.tables.list seront très proches l'une de l'autre après le plongement.

Toutes les données utilisées dans le pipeline de machine learning de l'outil de recommandation disposent du k-anonymat, ce qui signifie que l'identité des personnes de l'ensemble de données anonymisé ne peut pas être restaurée. Pour atteindre ce niveau d'anonymat, nous supprimons toutes les informations personnelles, telles que l'ID utilisateur associé à chaque modèle d'utilisation des autorisations. Nous supprimons ensuite tous les modèles d'utilisation qui ne s'affichent pas assez souvent dans Google Cloud. Le modèle global est entraîné à l'aide de ces données anonymisées.

Le modèle global peut être personnalisé davantage pour chaque organisation à l'aide de l'apprentissage fédéré, un processus de machine learning qui entraîne des modèles de machine learning sans exporter de données.

Comment les recommandations de rôle sont-elles générées ?

Si un insight sur une stratégie indique qu'un compte principal n'a pas besoin de toutes les autorisations de son rôle, l'outil de recommandation évalue le rôle pour déterminer s'il peut être révoqué ou s'il existe un autre rôle plus adapté. Si le rôle peut être révoqué, l'outil de recommandation génère une recommandation de rôle pour révoquer le rôle. Si un autre rôle est plus adapté, l'outil de recommandation génère une recommandation de rôle pour remplacer le rôle par un rôle suggéré. Ce rôle suggéré peut être un nouveau rôle personnalisé, un rôle personnalisé existant, ou un ou plusieurs rôles prédéfinis. Sauf dans le cas des recommandations pour les comptes de service gérés par Google, une recommandation de rôle ne suggère jamais de modification qui augmente le niveau d'accès d'un compte principal.

Les recommandations de rôle sont générées uniquement sur la base des contrôles d'accès IAM. Elles ne tiennent pas compte d'autres types de contrôles d'accès, tels que les listes de contrôle d'accès (LCA) et le contrôle des accès basé sur les rôles (RBAC) Kubernetes. Si vous utilisez d'autres types de contrôles d'accès, soyez particulièrement vigilant lorsque vous examinez les recommandations et prenez en compte le rapport entre ces contrôles d'accès et vos stratégies d'autorisation.

De plus, les recommandations de rôle ne sont pas générées pour toutes les liaisons de rôles IAM. Pour en savoir plus sur la raison pour laquelle une liaison de rôle peut ne pas avoir de recommandation de rôle, consultez la section Disponibilité sur cette page.

Nouveaux rôles personnalisés dans les recommandations de rôle

Lorsque l'outil de recommandation IAM suggère des remplacements pour un rôle, il suggère toujours un rôle personnalisé existant, ou un ou plusieurs rôles prédéfinis, qui semblent mieux correspondre aux besoins du compte principal.

Si l'outil de recommandation identifie un modèle d'utilisation des autorisations commun dans votre organisation qui ne correspond pas à un rôle prédéfini ou personnalisé existant, il peut également vous recommander de créer un nouveau rôle personnalisé au niveau du projet. Ce rôle personnalisé n'inclut que les autorisations recommandées. Vous pouvez modifier la recommandation de rôle personnalisé en ajoutant ou en supprimant des autorisations.

Si vous souhaitez appliquer le principe du moindre privilège aussi strictement que possible, choisissez le nouveau rôle personnalisé. L'outil de recommandation crée le rôle personnalisé au niveau du projet. Vous êtes responsable de la gestion et de la mise à jour des rôles personnalisés pour vos projets.

Si vous préférez utiliser un rôle géré par Google, choisissez le rôle prédéfini. Google Cloud met régulièrement à jour ces rôles en ajoutant ou en supprimant des autorisations. Pour être informé de ces mises à jour, abonnez-vous au flux d'actualités du journal des modifications des autorisations. Lorsque vous choisissez le rôle prédéfini, le compte principal conserve au moins quelques autorisations qu'il n'a pas utilisées, et potentiellement un grand nombre de celles-ci.

L'outil de recommandation ne recommande pas de nouveaux rôles personnalisés dans les cas suivants :

  • La recommandation concerne un rôle au niveau d'un dossier ou d'une organisation.
  • Votre organisation dispose déjà d'au moins 100 rôles personnalisés.
  • Votre projet dispose déjà d'au moins 25 rôles personnalisés.

En outre, l'outil de recommandation ne recommande pas plus de cinq nouveaux rôles personnalisés par jour dans chaque projet et pas plus de 15 nouveaux rôles personnalisés dans toute l'organisation.

Comment les insights sur les mouvements latéraux sont-ils générés ?

Le mouvement latéral se produit lorsqu'un compte de service d'un projet est autorisé à usurper l'identité d'un compte de service d'un autre projet. Par exemple, un compte de service peut avoir été créé dans le projet A, mais dispose des autorisations nécessaires pour emprunter l'identité d'un compte de service dans le projet B.

Ces autorisations peuvent entraîner une chaîne d'usurpations d'identités sur plusieurs projets, ce qui permet aux comptes principaux d'accéder de manière inattendue aux ressources. Par exemple, si un compte principal usurpe l'identité du compte de service du projet A, il peut s'en servir pour usurper l'identité du compte de service du projet B. Si le compte de service du projet B est autorisé à usurper l'identité d'autres comptes de service d'autres projets de votre organisation, le compte principal peut continuer à usurper l'identité du compte de service pour passer d'un projet à l'autre, et ainsi obtenir au fur et à mesure les autorisations nécessaires.

L'outil de recommandation génère des insights sur les mouvements latéraux en identifiant les liaisons de rôles qui répondent aux critères suivants:

  • Le compte principal figurant dans la liaison de rôle est un compte de service qui n'a pas été créé dans le projet.
  • Le rôle inclut l'une des autorisations suivantes, qui permettent à un compte principal d'emprunter l'identité d'un compte de service :

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

Si une liaison de rôle répond à ces critères, l'outil de recommandation génère un insight de mouvement ultérieur pour la liaison. Cet insight contient des informations sur les capacités d'emprunt d'identité du compte de service, y compris sur les comptes de service qu'il peut emprunter et si des autorisations d'emprunt d'identité ont été utilisées au cours des 90 derniers jours.

L'outil de recommandation n'utilise pas lui-même les insights sur les mouvements latéraux pour générer de nouvelles recommandations de rôle. En effet, si un compte de service utilise ses autorisations d'emprunt d'identité, l'outil de recommandation ne peut pas suggérer de les supprimer en toute sécurité. Toutefois, si une recommandation de rôle suggère de supprimer ces autorisations parce qu'elles ne sont pas utilisées, l'outil de recommandation associera l'insight de déplacement latéral à cette recommandation. Cette association vous permet de hiérarchiser les recommandations de rôles pour les comptes de service disposant d'autorisations d'emprunt d'identité puissantes et inutilisées pour l'ensemble des projets.

Pour savoir comment gérer les insights sur les mouvements latéraux, consultez la page Gérer les insights sur les mouvements latéraux.

Disponibilité

Les insights sur les stratégies et les recommandations de rôle ne sont pas générés pour chaque liaison de rôle. Lisez les sections suivantes pour comprendre les liaisons de rôle pour lesquelles des insights et des recommandations de stratégie sont générés.

Disponibilité des insights sur les stratégies

Pour que l'outil de recommandation génère un insight sur une stratégie pour une liaison de rôle, les conditions suivantes doivent être remplies :

  • La stratégie d'autorisation IAM contenant la liaison de rôle doit être associée à l'une des ressources suivantes:

    • Bucket Cloud Storage
    • Projet
    • Dossier
    • Organisation

    L'outil de recommandation ne génère des insights sur les stratégies que pour les rôles attribués sur ces ressources.

  • La liaison de rôle ne doit pas avoir de condition. L'outil de recommandation ne génère pas d'insights sur les stratégies pour les liaisons de rôle conditionnelles.

La génération des insights sur les stratégies pour une nouvelle liaison de rôle peut prendre jusqu'à 10 jours.

Disponibilité des informations sur les mouvements latéraux

Des insights sur les mouvements latéraux sont générés pour les liaisons de rôles sur les ressources suivantes:

  • Organisations
  • Dossiers
  • Projets
  • Comptes de service

Disponibilité des recommandations de rôle

Pour que l'outil de recommandation génère une recommandation de rôle pour une liaison de rôle, les conditions suivantes doivent être remplies :

  • La liaison de rôle doit être associée à un insight sur une stratégie. Cet insight sur une stratégie sert de base pour la recommandation.
  • La liaison de rôle doit dater de plus de 90 jours. Cela garantit que l'outil de recommandation dispose de suffisamment de données d'utilisation pour émettre une recommandation.
  • Si le compte principal dans la liaison de rôle est un compte de service géré par Google, la liaison de rôle doit être "Propriétaire", "Éditeur" ou "Lecteur". L'outil de recommandation ne génère pas de recommandations de rôle pour les comptes de service gérés par Google associés à d'autres rôles. Pour en savoir plus, consultez la section Recommandations de rôles pour les comptes de service gérés par Google.

Si une liaison de rôle n'a aucun insight ou n'a pas existé pendant 90 jours, la colonne Autorisations analysées dans Google Cloud Console affiche une icône .

Dans certains cas, l'outil de recommandation ne génère pas de recommandations de rôle pour une liaison de rôle datant de plus de 90 jours et associée à un insight. Cette situation peut se produire pour les raisons suivantes :

  • Aucun rôle IAM prédéfini n'est plus approprié que le rôle actuel : si un compte principal dispose déjà d'un rôle prédéfini qui minimise ses autorisations ou inclut moins d'autorisations que les autres rôles prédéfinis, l'outil de recommandation IAM ne peut pas recommander un rôle prédéfini différent.

    Vous pouvez peut-être réduire le nombre d'autorisations du compte principal en lui créant un rôle personnalisé.

  • Le compte principal est un compte de service géré par Google et le rôle n'est pas un rôle de base. L'outil de recommandation ne génère des recommandations de rôle pour les comptes de service gérés par Google que si le compte de service dispose d'un rôle de base (propriétaire, éditeur ou lecteur). Pour en savoir plus, consultez la section Recommandations de rôles pour les comptes de service gérés par Google.

  • Aucun autre compte principal ne dispose du rôle de base "Propriétaire" pour le projet : au moins un compte principal doit disposer du rôle "Propriétaire" (roles/owner) pour chaque projet. Si un seul compte principal dispose de ce rôle, l'outil de recommandation ne vous recommandera pas de révoquer ou de remplacer le rôle.

Dans ce cas, la colonne Autorisations analysées dans Google Cloud Console indique l'utilisation des autorisations par le compte principal, mais ne dispose pas de l'icône Recommandation disponible .

Priorité et gravité

La priorité des recommandations et le niveau de gravité des insights vous aident à comprendre l'urgence d'une recommandation ou d'un insight, et à hiérarchiser les insights en conséquence.

Priorité des recommandations de rôle

Les recommandations se voient attribuer des niveaux de priorité en fonction de leur degré d'urgence perçue. Les niveaux de priorité vont de P0 (priorité la plus élevée) à P4 (priorité la plus basse).

La priorité d'une recommandation de rôle dépend de la liaison de rôle à laquelle la recommandation est destinée:

Détails de la recommandation Priorité Explanation
Recommandations pour les liaisons de rôles qui accordent un accès public aux buckets Cloud Storage P1 Les buckets sont accessibles à tous les internautes. Supprimer l'accès public vous permet de mieux contrôler vos données.
Recommandations pour les liaisons de rôles qui accordent des rôles de base (propriétaire, éditeur et lecteur) sur un projet, un dossier ou une organisation P2 Les rôles de base sont très permissifs, et l'application de recommandations pour ces rôles peut considérablement réduire le nombre d'autorisations accordées en excès.
Recommandations qui n'accordent pas d'accès public ni de rôles de base P4 Bien que ces recommandations vous aident à réduire les autorisations en excès, elles ne suppriment pas l'accès public ni les rôles de base très permissifs, ce qui fait d'elles une priorité inférieure.

Niveau de gravité des insights

Les insights se voient attribuer des niveaux de gravité en fonction de leur degré d'urgence perçue. Les niveaux de gravité peuvent être LOW, MEDIUM, HIGH ou CRITICAL.

La gravité d'un insight sur une stratégie dépend de la liaison de rôle à laquelle celui-ci est destiné:

Détails sur l'insight Gravité Explanation
Insights sur les liaisons de rôles accordant un accès public aux buckets Cloud Storage CRITICAL Les buckets sont accessibles à tous les internautes. Supprimer l'accès public vous permet de mieux contrôler vos données.
Insights sur les liaisons de rôles qui accordent des rôles de base (propriétaire, éditeur et lecteur) sur un projet, un dossier ou une organisation HIGH Les rôles de base sont très permissifs, et la gestion des insights associés à ces rôles peut considérablement réduire le nombre d'autorisations accordées en excès.
Insights n'accordant pas d'accès public ni de rôles de base LOW Bien que ces insights mettent en évidence les autorisations en excès, ils n'impliquent pas d'accès public ni de rôles de base très permissifs, ce qui en fait une priorité inférieure.

Tous les insights sur les mouvements latéraux ont une gravité de LOW.

Comment les recommandations de rôle sont-elles appliquées ?

L'outil de recommandation n'applique pas automatiquement les recommandations. Au lieu de cela, vous devez examiner vos recommandations et décider de les appliquer ou de les ignorer. Pour savoir comment examiner, appliquer et ignorer des recommandations de rôle, consultez Examiner et appliquer les recommandations de rôle pour les projets, les dossiers et les organisations ou Examiner et appliquer les recommandations de rôle pour les buckets Cloud Storage.

Journaux d'audit

Lorsque vous appliquez ou ignorez une recommandation, l'outil de recommandation crée une entrée de journal. Vous pouvez afficher ces entrées dans l'historique des recommandations ou les consulter dans vos journaux d'audit Google Cloud.

Sous-types de recommandations de rôle

Les recommandations de rôle sont divisées en plusieurs sous-types différents en fonction de l'action qu'elles recommandent. Si vous utilisez la CLI gcloud ou l'API REST, vous pouvez utiliser ces sous-types pour filtrer vos recommandations.

Sous-type Description
REMOVE_ROLE Une recommandation pour supprimer le rôle principal au niveau du projet, du dossier ou de l'organisation.
REMOVE_ROLE_STORAGE_BUCKET Recommandation pour supprimer le rôle au niveau du bucket du compte principal.
REPLACE_ROLE Recommandation de remplacement du rôle principal au niveau du projet, du dossier ou de l'organisation par un rôle moins permissif. Le remplacement recommandé peut être un rôle personnalisé existant ou un ou plusieurs rôles prédéfinis.
REPLACE_ROLE_CUSTOMIZABLE Recommandation pour remplacer le rôle du compte principal par un nouveau rôle personnalisé, qui est moins permissif que son rôle actuel.
REPLACE_ROLE_STORAGE_BUCKET Recommandation pour remplacer le rôle principal au niveau du bucket par un rôle moins permissif. Le remplacement recommandé peut être un rôle personnalisé existant ou un ou plusieurs rôles prédéfinis.
SERVICE_AGENT_WITH_DEFAULT_ROLE Recommandation pour remplacer le rôle "Propriétaire", "Éditeur" ou "Lecteur" d'un compte de service géré par Google par le rôle attribué automatiquement au compte de service lors de sa création. Pour en savoir plus, consultez la section Recommandations pour les comptes de service gérés par Google.
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Recommandation pour remplacer le rôle "Propriétaire", "Éditeur" ou "Lecteur" d'un compte de service géré par Google par un rôle plus restrictif. Pour en savoir plus, consultez la section Recommandations pour les comptes de service gérés par Google.

Recommandations de rôle pour les comptes de service gérés par Google

Pour les comptes de service gérés par Google, l'outil de recommandation ne fournit que des recommandations pour les liaisons de rôles avec des rôles de base (propriétaire, éditeur ou lecteur).

Les recommandations pour les comptes de service gérés par Google sont divisées en deux sous-types de recommandations.

SERVICE_AGENT_WITH_DEFAULT_ROLE

Certains comptes de service gérés par Google se voient automatiquement attribuer un rôle d'agent de service lors de leur création afin de garantir le bon fonctionnement des services Google Cloud. Si vous remplacez ce rôle par un rôle de base (propriétaire, éditeur ou lecteur), l'outil de recommandation peut vous suggérer de restaurer le rôle d'agent de service d'origine pour supprimer les autorisations en excès, même si l'agent de service dispose d'autorisations qui ne sont pas incluses dans le rôle de base. Ces recommandations sont associées au sous-type SERVICE_AGENT_WITH_DEFAULT_ROLE. Elles vous aident à supprimer les autorisations en excès en toute sécurité, tout en vous assurant que l'ensemble des services Google Cloud fonctionnent correctement.

Les recommandations SERVICE_AGENT_WITH_DEFAULT_ROLE sont les seules à pouvoir suggérer des rôles dont les autorisations ne figurent pas dans le rôle actuel.

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Si un compte de service géré par Google ne se voit pas automatiquement attribuer un rôle lors de sa création, les recommandations pour ce compte sont basées exclusivement sur les autorisations utilisées par le compte de service. Ces recommandations sont associées au sous-type SERVICE_AGENT_WITHOUT_DEFAULT_ROLE.

Exemples de recommandations de rôles

Les exemples suivants illustrent les types de recommandations que vous pouvez recevoir.

Révoquer un rôle existant

Le rôle Navigateur a été attribué à l'utilisateur my-user@example.com sur un projet. Le rôle Navigateur inclut six autorisations permettant à l'utilisateur d'afficher les ressources du projet. Cependant, au cours des 90 derniers jours, my-user@example.com n'a vu aucune ressource.

Par conséquent, l'outil de recommandation génère une recommandation de rôle qui suggère de révoquer le rôle Navigateur de my-user@example.com :

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

Remplacer un rôle existant

Le rôle Éditeur (roles/editor) a été attribué à un compte de service sur un projet. Ce rôle de base comprend plus de 3 000 autorisations et accorde un accès étendu au projet. Toutefois, au cours des 90 derniers jours, le compte de service n'a utilisé que certaines de ces autorisations.

Par conséquent, l'outil de recommandation génère une recommandation de rôle qui vous suggère de révoquer le rôle Éditeur et de le remplacer par une combinaison de deux autres rôles, ce qui supprime des milliers d'autorisations en excès :

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

Créer un rôle personnalisé

L'utilisateurmy-user@example.com s'est vu attribuer le rôle Administrateur Cloud Trace (roles/cloudtrace.admin) sur un projet. Ce rôle inclut plus de 10 autorisations, mais un insight sur une stratégie indique qu'au cours des 90 derniers jours, my-user@example.com n'a utilisé que quatre de ces autorisations.

Par conséquent, l'outil de recommandation génère une recommandation de rôle suggérant de créer un rôle personnalisé qui n'inclut que les autorisations réellement utilisées par my-user@example.com :

Console

gcloud

Le sous-type REPLACE_ROLE_CUSTOMIZABLE indique que l'outil de recommandation recommande de créer un rôle personnalisé avec les autorisations utilisées. Pour afficher les autorisations utilisées, consultez la stratégie associée.

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

Le sous-type REPLACE_ROLE_CUSTOMIZABLE indique que l'outil de recommandation recommande de créer un rôle personnalisé avec les autorisations utilisées. Pour afficher les autorisations utilisées, consultez la stratégie associée.

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

L'outil de recommandation propose également une autre option, qui consiste à remplacer le rôle existant par le rôle Utilisateur Cloud Trace (roles/cloudtrace.user). Ce rôle prédéfini inclut un nombre d'autorisations légèrement inférieur à celui du rôle Administrateur Cloud Trace.

Remplacer des rôles avec des autorisations suggérées par le machine learning

Le rôle Éditeur (roles/editor) a été attribué à un compte de service sur un projet. Ce rôle de base comprend plus de 3 000 autorisations et accorde un accès étendu à un projet. Toutefois, un insight sur une stratégie indique que le compte de service a utilisé moins de 10 autorisations au cours des 90 derniers jours.

L'insight sur les stratégies met également en évidence plusieurs autorisations dont le compte de service est susceptible d'avoir besoin à l'avenir. L'outil de recommandation a identifié ces autorisations à l'aide du machine learning.

L'outil de recommandation génère une recommandation de rôle qui suggère de révoquer le rôle Éditeur et de le remplacer par le rôle Administrateur des objets de l'espace de stockage (roles/storage.objectAdmin), qui accorde un contrôle total sur les objets d'un bucket Cloud Storage. Cette modification supprime des milliers d'autorisations en excès, tout en incluant les autorisations utilisées par le compte de service et celles dont le compte de service aura probablement besoin à l'avenir:

Console

L'outil de recommandation utilise une icône de machine learning pour identifier les autorisations ajoutées en fonction du machine learning de l'outil de recommandation plutôt que de l'utilisation des autorisations. Dans cet exemple, l'autorisation resourcemanager.projects.get était basée sur le machine learning:

gcloud

Les autorisations ajoutées en fonction du machine learning de l'outil de recommandation plutôt que de l'utilisation des autorisations ne sont pas répertoriées dans la recommandation. Ils sont plutôt répertoriés dans les insights sur les règles associés à la recommandation. Toutes les autorisations basées sur le ML sont répertoriées dans le champ inferredPermissions de l'insight. Dans cet exemple, l'autorisation resourcemanager.projects.get était basée sur le machine learning:

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

Pour savoir comment obtenir un insight sur une stratégie, consultez Consulter les insights sur les règles.

REST

Les autorisations ajoutées en fonction du machine learning de l'outil de recommandation plutôt que de l'utilisation des autorisations ne sont pas répertoriées dans la recommandation. Ils sont plutôt répertoriés dans les insights sur les règles associés à la recommandation. Toutes les autorisations basées sur le ML sont répertoriées dans le champ inferredPermissions de l'insight. Dans cet exemple, l'autorisation resourcemanager.projects.get était basée sur le machine learning:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount: "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

Pour savoir comment obtenir un insight sur une stratégie, consultez Consulter les insights sur les règles.

Étapes suivantes