Examiner et appliquer les recommandations

Cette page explique comment afficher, comprendre et appliquer les recommandations de l'outil de recommandation Cloud IAM. L'outil de recommandation IAM vous aide à appliquer le principe du moindre privilège en vous assurant que les membres disposent uniquement des autorisations dont ils ont réellement besoin.

Avant de commencer

Examiner et appliquer les recommandations

La façon la plus simple d'examiner et d'appliquer vos recommandations consiste à utiliser Google Cloud Console. Vous devez utiliser Cloud Console pour effectuer certaines tâches :

  • Afficher les détails expliquant pourquoi vous avez reçu une recommandation
  • Ignorer des recommandations
  • Créer automatiquement un rôle personnalisé lorsque vous appliquez une recommandation

Vous pouvez également examiner et appliquer des recommandations à l'aide de l'outil de ligne de commande gcloud et de l'API Recommender.

Console

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Dans la liste des membres du projet, recherchez la colonne Autorisations analysées.

    Pour chaque rôle accordé à un membre, cette colonne indique le nombre d'autorisations en excès, suivi du nombre total d'autorisations dans le rôle :

    L'icône Recommandation disponible  indique qu'une recommandation est disponible pour un rôle : soit pour révoquer le rôle, soit pour le remplacer par un rôle comportant moins d'autorisations.

  3. Si des recommandations sont à vérifier, cliquez sur l'icône Recommandation disponible  pour en savoir plus sur la recommandation.

    Si la recommandation consiste à remplacer le rôle, l'outil de recommandation IAM vous présente toujours un ensemble de rôles prédéfinis que vous pouvez appliquer.

    Dans certains cas, l'outil de recommandation IAM suggère également de créer un rôle personnalisé au niveau du projet. Si une recommandation de rôle personnalisé est disponible, Cloud Console l'affiche par défaut. Pour passer à la recommandation de rôle prédéfini, cliquez sur Afficher le rôle prédéfini recommandé.

  4. Lisez attentivement la recommandation et assurez-vous de bien comprendre comment elle modifiera l'accès du membre aux ressources Google Cloud. Consultez la section Examiner les recommandations pour comprendre les types de modifications qu'une recommandation peut inclure.

  5. (Facultatif) Si la recommandation consiste à créer un rôle personnalisé, mettez à jour les champs Titre, Description, ID et Étape de lancement du rôle si nécessaire.

    Si vous devez ajouter des autorisations au rôle personnalisé, cliquez sur Ajouter des autorisations.

    Si vous devez supprimer des autorisations du rôle personnalisé, décochez la case correspondant à chaque autorisation à supprimer.

  6. Prenez les mesures qui s'imposent.

    Pour appliquer la recommandation, cliquez sur Appliquer ou Créer et appliquer. Si vous changez d'avis au cours des 90 prochains jours, utilisez l'historique de l'outil de recommandation IAM pour annuler votre choix.

    Pour ignorer la recommandation, cliquez sur Ignorer, puis confirmez votre choix. Vous pouvez restaurer une recommandation ignorée tant qu'elle reste valide.

  7. Répétez les étapes précédentes jusqu'à ce que vous ayez examiné toutes vos recommandations.

gcloud

Pour répertorier vos recommandations, exécutez la commande gcloud recommender recommendations list :

gcloud recommender recommendations list \
    --location=global \
    --recommender=google.iam.policy.Recommender \
    --project=project-id \
    --format=format

Remplacez les valeurs suivantes :

  • project-id : identifiant du projet, tel que project-123.
  • format : format de la réponse. Utilisez json ou yaml.

La réponse est semblable à l'exemple suivant. Dans cet exemple, un compte de service n'a utilisé aucune autorisation associée au rôle Administrateur de Compute (roles/compute.admin) au cours des 90 derniers jours. Par conséquent, l'outil de recommandation IAM vous suggère de révoquer le rôle :

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du membre aux ressources Google Cloud.

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=global \
        --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. Dans l'exemple ci-dessus, l'ID est fb927dc1-9695-4436-0000-f0f285007c0f.
    • project-id : identifiant du projet, tel que project-123.
    • 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 :

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]
  2. Obtenez la stratégie IAM pour le projet, puis modifiez la stratégie 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=global \
        --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 appliqué 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. Dans l'exemple ci-dessus, l'ID est fb927dc1-9695-4436-0000-f0f285007c0f.
    • project-id : identifiant du projet, tel que project-123.
    • 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 :

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

REST

Examiner les recommandations

La méthode recommendations.list de l'API Recommender répertorie toutes les recommandations disponibles 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.
  • 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.
  • filter : facultatif. Expression de filtre permettant de limiter les recommandations renvoyées. Vous pouvez filtrer les recommandations en fonction du champ stateInfo.state. Par exemple, stateInfo.state:"DISMISSED" ou stateInfo.state:"FAILED".

Méthode HTTP et URL :

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations?pageSize=page-size&pageToken=page-token&filter=filter

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

La réponse est semblable à l'exemple suivant. Dans cet exemple, un compte de service n'a utilisé aucune autorisation associée au rôle "Administrateur Compute" (roles/compute.admin) au cours des 90 derniers jours. Par conséquent, l'outil de recommandation IAM vous suggère de révoquer le rôle :

{
  "recommendations": [
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "description": "This role has not been used during the observation window.",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
    "etag": "\"770237e2c0decf40\"",
    "recommenderSubtype": "REMOVE_ROLE"
  ]
}

Examinez attentivement la recommandation et réfléchissez à la manière dont elle modifiera l'accès du membre aux ressources Google Cloud.

Pour appliquer une recommandation, procédez comme suit :

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

    La méthode recommendations.markClaimed de l'API Recommender définit l'état d'une recommandation sur CLAIMED, ce qui empêche la modification de la recommandation lorsque vous l'appliquez.

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

    • project-id : ID de votre projet Google Cloud.
    • 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/global/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 :

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "CLAIMED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

  2. Obtenez la stratégie IAM pour le projet, puis modifiez la stratégie 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

    La méthode recommendations.markSucceeded de l'API Recommender définit l'état d'une recommandation sur SUCCEEDED, ce qui indique que vous avez pu l'appliquer.

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

    • project-id : ID de votre projet Google Cloud.
    • 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/global/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 :

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "SUCCEEDED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

    FAILED

    La méthode recommendations.markFailed de l'API Recommender définit l'état d'une recommandation sur FAILED, ce qui indique que vous n'avez pas pu l'appliquer.

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

    • project-id : ID de votre projet Google Cloud.
    • 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/global/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 :

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "FAILED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

Afficher, rétablir et restaurer des modifications

Une fois que vous avez appliqué ou ignoré une recommandation, cette action apparaît dans l'historique des recommandations. Pour afficher l'historique des recommandations, procédez comme suit :

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. En haut de l'écran, cliquez sur Historique des recommandations.

    Cloud Console affiche une liste d'actions précédentes sur vos recommandations IAM.

  3. Pour afficher les détails d'une recommandation, cliquez sur la flèche de développement .

    Cloud Console affiche les détails de l'action effectuée, y compris concernant le membre ayant effectué l'action :

  4. (Facultatif) Si nécessaire, vous pouvez rétablir la recommandation, ce qui annule les modifications effectuées au sein de la recommandation, ou restaurer une recommandation que vous avez ignorée.

    Pour annuler une modification précédemment appliquée sur une recommandation, cliquez sur Rétablir. Cloud Console rétablit les modifications apportées aux rôles du membre. La recommandation n'apparaît plus dans Cloud Console.

    Pour restaurer une recommandation qui a été ignorée, cliquez sur Restaurer. La recommandation devient visible sur la page IAM de Cloud Console. Aucun rôle ni aucune autorisation n'a été modifié.

Étape suivante