Tester les modifications de rôle avec Policy Simulator

Cette page explique comment simuler une modification de stratégie d'autorisation à l'aide de Policy Simulator pour les stratégies d'autorisation Identity and Access Management. Elle explique également comment interpréter les résultats de la simulation et comment appliquer la simulation de stratégie d'autorisation si vous le souhaitez.

Avant de commencer

Autorisations requises

Avant de simuler une modification de stratégie d'autorisation, vous devez vous assurer que vous disposez des autorisations appropriées. Certaines autorisations sont requises pour exécuter une simulation. D'autres ne sont pas obligatoires, mais vous aident à obtenir les résultats les plus complets à partir de la simulation.

Pour en savoir plus sur les rôles de gestion de l'authentification et des accès (IAM), consultez la page Comprendre les rôles.

Autorisations requises pour les ressources cibles

La ressource cible de la simulation est la ressource dont vous simulez les stratégies d'autorisation.

Pour obtenir les autorisations nécessaires pour exécuter une simulation, demandez à votre administrateur de vous accorder les rôles IAM suivants sur la ressource cible:

Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour exécuter une simulation. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour exécuter une simulation:

  • cloudasset.assets.searchAllResources
  • policysimulator.replays.run
  • service.resource.getIamPolicy, où resource est le type de ressource de la ressource cible et service est le nom du service Google Cloud propriétaire de cette ressource.

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

Autorisations requises pour les ressources hôtes

La ressource hôte d'une simulation correspond au projet, au dossier ou à l'organisation qui crée et exécute la simulation. La ressource hôte n'a pas besoin d'être associée à la ressource cible.

La manière dont vous définissez la ressource hôte dépend de la plate-forme que vous utilisez.

Console

La ressource hôte correspond au projet, au dossier ou à l'organisation qui s'affiche dans le sélecteur de ressources.

Pour modifier la ressource hôte, choisissez un projet, un dossier ou une organisation différent dans le sélecteur de ressources.

gcloud

La ressource hôte est le projet de quota actuel. Pour définir le projet de quota, utilisez la commande gcloud auth application-default set-quota-project.

REST

Vous spécifiez manuellement la ressource hôte chaque fois que vous envoyez une requête. Pour en savoir plus, consultez la section Simuler un changement de stratégie sur cette page.

Pour obtenir les autorisations nécessaires pour exécuter une simulation, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de simulateur (roles/policysimulator.admin) sur la ressource hôte. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour exécuter une simulation. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour exécuter une simulation:

  • policysimulator.replayResults.list
  • policysimulator.replays.create
  • policysimulator.replays.get

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

Pour obtenir les résultats les plus complets d'une simulation, nous vous recommandons de disposer de certaines autorisations IAM et Google Workspace. Si vous ne disposez pas de toutes ces autorisations ou d'une partie d'entre elles, vous pouvez quand même exécuter une simulation. Toutefois, l'exécution d'une simulation sans ces autorisations peut entraîner une augmentation du nombre de modifications d'accès inconnus, car vous ne pourrez peut-être pas récupérer les informations susceptibles d'influer sur les résultats de la simulation.

Nous vous recommandons d'avoir le rôle d'examinateur de sécurité (roles/iam.securityReviewer) pour votre organisation lors de l'exécution d'une simulation. Si vous disposez déjà du rôle d'Administrateur de sécurité (roles/iam.securityAdmin), vous n'avez pas besoin de rôles supplémentaires.

Ces rôles vous donnent les autorisations suivantes, qui vous aideront à obtenir les résultats les plus complets de la simulation :

  • iam.roles.get et iam.roles.list sur tous les projets, dossiers ou organisations concernés sur lesquels des rôles personnalisés sont définis. Un projet, un dossier ou une organisation est concerné s'il est un ancêtre ou un descendant de la ressource dont vous simulez la stratégie d'autorisation.
  • service.resource.getIamPolicy, où resource est le nom d'un type de ressource pouvant avoir une stratégie d'autorisation et service est le nom du service Google Cloud propriétaire de cette ressource.

    Lorsque vous exécutez une simulation, nous vous recommandons d'accorder cette autorisation à chaque ressource qui répond aux critères suivants :

    Par exemple, imaginons que vous souhaitiez simuler une stratégie d'autorisation pour un projet. Si les journaux d'accès incluent une tentative d'accès à un bucket Cloud Storage du projet, vous devez disposer de l'autorisation storage.buckets.getIamPolicy sur ce bucket. Si le projet dispose d'un dossier parent comportant une stratégie d'autorisation, vous devez également disposer de l'autorisation resourcemanager.folders.getIamPolicy sur ce dossier.

Nous vous recommandons de vous attribuer un rôle permettant de récupérer les informations d'appartenance aux groupes pour chaque groupe Google dans la stratégie d'autorisation d'origine et la stratégie d'autorisation proposée.

Les super-administrateurs Google Workspace et les administrateurs de groupe ont généralement accès à l'affichage des membres du groupe. Si vous n'êtes pas un super-administrateur ou un administrateur de groupe, demandez à votre administrateur Google Workspace de créer un rôle d'administrateur Google Workspace personnalisé contenant le droit groups.read (situé sous Droits pour l'API Admin), puis de vous l'attribuer. Cela vous permet d'afficher les membres de tous les groupes de votre domaine et de simuler plus efficacement les modifications apportées à une stratégie d'autorisation.

Simuler une modification de stratégie

Simulez une modification de stratégie d'autorisation en procédant comme suit.

Console

L'exemple suivant montre comment simuler une modification de stratégie d'autorisation pour un projet. Toutefois, vous pouvez simuler une modification de stratégie d'autorisation pour toute ressource dotée d'une stratégie d'autorisation.

Modifiez les autorisations d'un compte principal, puis au lieu de cliquer sur Enregistrer, cliquez sur Tester les modifications:

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

    Accédez à la page IAM.

  2. Créez une modification proposée de la stratégie d'autorisation en modifiant les autorisations d'un compte principal existant :

    1. Recherchez le compte principal dont vous souhaitez modifier l'accès, puis cliquez sur le bouton Modifier () situé sur la droite.
    2. Modifiez l'accès du compte principal en ajoutant un nouveau rôle, ou en révoquant ou en modifiant un rôle existant.
  3. Pour simuler la modification proposée, cliquez sur Tester les modifications.

  4. Après plusieurs minutes, la console Google Cloud affiche les résultats de la simulation sous la forme d'une liste de modifications des accès. Pour plus d'informations, consultez la section Comprendre les résultats de Policy Simulator sur cette page.

    S'il n'y a pas eu de modifications d'accès entre la stratégie d'autorisation existante et la simulation de stratégie d'autorisation, la console Google Cloud n'affiche aucune modification d'accès.

gcloud

Pour simuler une modification de stratégie d'autorisation, suivez le modèle lecture-modification-écriture, mais simulez la stratégie d'autorisation plutôt que de l'écrire.

  1. Lisez la stratégie d'autorisation actuelle en exécutant la commande suivante :

    gcloud resource-type get-iam-policy resource-id --format=format > filepath

    Remplacez les valeurs suivantes :

    • resource-type : le type de ressource pour lequel vous souhaitez simuler une stratégie d'autorisation. Exemple :projects
    • resource-id : ID de la ressource dont vous souhaitez simuler la stratégie d'autorisation. Exemple :my-project
    • format : format de la réponse. Utilisez la valeur json ou yaml.
    • filepath : le chemin d'accès à un nouveau fichier de sortie pour la stratégie d'autorisation.

    Par exemple, la commande suivante récupère la stratégie d'autorisation du projet my-project au format JSON et l'enregistre dans le répertoire d'accueil de l'utilisateur :

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json
  2. Modifiez la stratégie d'autorisation JSON ou YAML renvoyée par la commande get-iam-policy pour refléter les modifications que vous souhaitez simuler.

    Vous pouvez apporter plusieurs types de modifications à la stratégie d'autorisation. Par exemple, vous pouvez ajouter ou supprimer un compte principal d'une liaison de rôle, ou supprimer une liaison de rôle de la stratégie d'autorisation.

  3. Exécutez la commande suivante pour simuler la modification de stratégie d'autorisation :

    gcloud iam simulator replay-recent-access \
        full-resource-name \
        filepath \
        --format=format

    Remplacez les valeurs suivantes :

    • full-resource-name : nom complet de la ressource dont vous souhaitez simuler la stratégie d'autorisation.

      Le nom complet de la ressource est un URI composé du nom du service et du chemin d'accès à la ressource. Par exemple, pour simuler une stratégie d'autorisation pour un projet, vous utiliseriez //cloudresourcemanager.googleapis.com/projects/project- id, où project-id correspond à l'ID du projet dont vous simulez la stratégie d'autorisation.

      Pour obtenir la liste des formats de noms de ressources complets, consultez la section Noms de ressources complets.

    • filepath : chemin d'accès au fichier contenant la stratégie d'autorisation modifiée que vous souhaitez simuler. Exemple : ~/proposed_policy.json.

    • format : format de la réponse. Par exemple, json ou yaml.

    Après quelques minutes, la commande affiche la liste des résultats de la relecture, qui explique comment l'accès du compte principal change si la stratégie d'autorisation proposée est appliquée. Ces résultats répertorient également les erreurs survenues lors de la simulation, y compris les erreurs dues à des types de ressources non compatibles.

    Pour savoir comment lire les résultats, consultez la section Comprendre les résultats de Policy Simulator sur cette page. Pour savoir comment enregistrer les résultats d'une simulation plutôt que de les imprimer, consultez la section Enregistrer les résultats d'une simulation.

    Voici un exemple de réponse pour une simulation de stratégie d'autorisation impliquant l'utilisateur my-user@example.com. Dans ce cas, si la modification proposée était appliquée, my-user@example.com ne disposerait peut-être plus des autorisations resourcemanager.projects.list et resourcemanager.projects.get pour le projet my-project, et n'aurait certainement plus l'autorisation resourcemanager.projects.update pour le projet my-project :

    [
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.list",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 12,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.get",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_MAYBE_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "UNKNOWN_INFO_DENIED",
              "errors": [
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to view group membership.",
                      "resourceName": "group:everyone@example.com",
                      "resourceType": "Google group"
                    }
                  ],
                  "message": "Missing permission to view group membership."
                },
                {
                  "code": 7,
                  "details": [
                    {
                      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                      "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                      "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                      "resourceType": "cloudresourcemanager.googleapis.com/projects"
                    }
                  ],
                  "message": "Missing permission to get relevant IAM policies."
                }
              ],
              "policies": [
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "bindingExplanations": [
                    {
                      "access": "UNKNOWN_INFO_DENIED",
                      "memberships": {
                        "group:everyone@example.com": {
                          "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                        }
                      },
                      "role": "roles/owner"
                    }
                  ],
                  "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                  "policy": {
                    "bindings": [
                      {
                        "members": [
                          "group:everyone@example.com"
                        ],
                        "role": "roles/owner"
                      }
                    ],
                    "etag": "BwWgJSIInYA=",
                    "version": 3
                  }
                },
                {
                  "access": "UNKNOWN_INFO_DENIED",
                  "policy": {}
                }
              ]
            }
          }
        },
        "lastSeenDate": {
          "day": 10,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {
          "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "permission": "resourcemanager.projects.update",
          "principal": "my-user@example.com"
        },
        "diff": {
          "accessDiff": {
            "accessChange": "ACCESS_REVOKED",
            "baseline": {
              "accessState": "GRANTED"
            },
            "simulated": {
              "accessState": "NOT_GRANTED"
            }
          }
        },
        "lastSeenDate": {
          "day": 15,
          "month": 1,
          "year": 2021
        }
      },
      {
        "accessTuple": {},
        "error": {
          "code": 12,
          "details": [
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.create"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.setIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.delete"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.update"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "pubsub.topics.publish"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.list"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.getIamPolicy"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            },
            {
              "@type": "type.googleapis.com/google.rpc.ErrorInfo",
              "domain": "policysimulator.googleapis.com",
              "metadata": {
                "permission": "storage.objects.get"
              },
              "reason": "UNSUPPORTED_RESOURCE"
            }
          ],
          "message": "Simulator does not yet support all resource types for 8 removed permissions."
        }
      }
    ]

    S'il n'y a pas eu de modifications d'accès entre la stratégie d'autorisation existante et stratégie d'autorisation simulée, la commande affiche No access changes found in the replay.

REST

Pour simuler une modification de stratégie d'autorisation, suivez le modèle lecture-modification-écriture, mais créez et exécutez une simulation plutôt que d'écrire la stratégie d'autorisation.

  1. Consultez la stratégie d'autorisation associée à la ressource.

    Pour obtenir la stratégie d'autorisation d'un projet, utilisez la méthode projects.getIamPolicy de l'API Resource Manager.

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

    • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
    • POLICY_VERSION : version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.

    Méthode HTTP et URL :

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

    Corps JSON de la requête :

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

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

    Vous devriez recevoir une réponse JSON de ce type :

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:project-owner@example.com"
          ]
        },
        {
          "role": "roles/iam.securityReviewer",
          "members": [
            "user:fatima@example.com"
          ]
        }
      ]
    }
    

  2. Modifiez la stratégie d'autorisation renvoyée pour refléter les modifications que vous souhaitez simuler.

    Vous pouvez apporter plusieurs types de modifications à la stratégie d'autorisation. Par exemple, vous pouvez ajouter ou supprimer un compte principal d'une liaison de rôle, ou supprimer une liaison de rôle de la stratégie d'autorisation.

  3. Créez une simulation ou une relecture avec la stratégie d'autorisation modifiée.

    Pour créer une relecture pour un projet, un dossier ou une organisation, utilisez la méthode replays.create de l'API Policy Simulator.

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

    • HOST_RESOURCE_TYPE : type de la ressource qui hébergera la relecture. Cette valeur doit être projects, folders ou organizations.
    • HOST_RESOURCE_ID : ID de la ressource hôte, par exemple my-project.
    • TARGET_FULL_RESOURCE_NAME : nom complet de la ressource dont vous souhaitez simuler la stratégie. Cette ressource peut être n'importe quelle ressource acceptant les stratégies IAM. Elle n'a pas besoin d'être liée à la ressource hôte.

      Le nom de ressource complet est un URI composé du nom du service et du chemin d'accès à la ressource. Par exemple, si vous simulez une stratégie pour un projet, vous devez utiliser //cloudresourcemanager.googleapis.com/projects/PROJECT_ID, où PROJECT_ID est l'ID du projet dont vous simulez la stratégie.

      Pour obtenir la liste complète des formats de noms de ressources, consultez la page Noms de ressources complets.

    • POLICY : la stratégie que vous souhaitez simuler. Pour obtenir un exemple de stratégie, consultez la documentation de référence sur les règles.

      Pour simuler plusieurs stratégies, incluez plusieurs paires "OBJECT_FULL_RESOURCE_NAME" : POLICY dans le corps de la requête.

    • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

    Méthode HTTP et URL :

    POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays

    Corps JSON de la requête :

    {
      "config": {
        "policyOverlay": {
          "TARGET_FULL_RESOURCE_NAME" : POLICY
        }
      }
    }
    

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

    La réponse contient le nom d'une opération qui représente votre relecture :

    {
      "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8",
      "metadata": {
        "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata"
      }
    }
    

  4. Interrogez la méthode operations.get jusqu'à ce que la relecture soit terminée.

    Pour interroger une opération, nous vous recommandons d'appeler plusieurs fois la méthode operations.get jusqu'à ce que la réponse affiche le champ "done": true et un champ name portant le nom de la relecture terminée. Utilisez un intervalle exponentiel tronqué entre les tentatives pour introduire un délai entre chaque requête.

    Pour obtenir l'état d'une relecture, utilisez la méthode operations.get de l'API Policy Simulator.

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

    • OPERATION_NAME : nom d'une opération de relecture, incluant le préfixe operations. Copiez cette valeur dans le champ name d'une réponse replays.create. Par exemple : operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8.
    • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

    Méthode HTTP et URL :

    GET https://policysimulator.googleapis.com/v1/OPERATION_NAME

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

    Les opérations en cours renvoient une réponse semblable à ceci :

    {
      "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata",
        "startTime": "2021-01-15T05:34:14.732Z"
      }
    }
    

    Les opérations terminées renvoient une réponse semblable à ceci :

    {
      "name": "operations/89ab4892-9605-4c84-aedb-4fce4fc5195b",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata",
        "startTime": "2021-01-15T05:40:15.922Z"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.policysimulator.v1.Replay",
        "replay": {
          "name": "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b",
          "state": SUCCEEDED,
          "config": {},
          "resultsSummary": {
            "logCount": 1319,
            "unchangedCount": 1169,
            "differenceCount": 149,
            "errorCount": 1,
            "oldestDate": {
              "year": 2020,
              "month": 10,
              "day": 15
            },
            "newestDate": {
              "year": 2021,
              "month": 1,
              "day": 12
            }
          }
        }
      }
    }
    

  5. Obtenir les résultats de la relecture

    Pour obtenir les résultats d'une relecture, utilisez la méthode replays.results.list de l'API Policy Simulator.

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

    • REPLAY_NAME : nom de la relecture dont vous souhaitez récupérer les résultats. Copiez cette valeur dans le champ response.replay.name d'une réponse operations.get. Incluez le type de ressource et les préfixes d'emplacement. Exemple : "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
    • 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 résultats est supérieur à la taille de la page, la réponse contient un jeton de pagination qui vous permet de 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 des résultats commence à la fin de la réponse précédente.
    • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.

    Méthode HTTP et URL :

    GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN

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

    La réponse contient une liste de résultats expliquant comment l'accès du compte principal serait modifié si la stratégie proposée était appliquée. Les résultats affichent également les erreurs survenues lors de la simulation, en particulier les types de ressources non compatibles.

    Pour savoir comment lire les résultats, consultez la section Comprendre les résultats de Policy Simulator sur cette page.

    Voici un exemple de réponse pour une simulation de stratégie impliquant l'utilisateur my-user@example.com. Dans ce cas, si la modification proposée était appliquée, my-user@example.com ne disposerait peut-être plus des autorisations resourcemanager.projects.list et resourcemanager.projects.get pour le projet my-project, et n'aurait certainement plus l'autorisation resourcemanager.projects.update pour le projet my-project :

    {
      "replayResults": [
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.list",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.get",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_MAYBE_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "UNKNOWN_INFO_DENIED",
                "errors": [
                  {
                    "code": 7,
                    "message": "Missing permission to view group membership.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to view group membership.",
                        "resourceName": "group:everyone@example.com",
                        "resourceType": "Google group"
                      }
                    ]
                  },
                  {
                    "code": 7,
                    "message": "Missing permission to get relevant IAM policies.",
                    "details": [
                      {
                        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
                        "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.",
                        "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                        "resourceType": "cloudresourcemanager.googleapis.com/projects"
                      }
                    ]
                  }
                ],
                "policies": [
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "bindingExplanations": [
                      {
                        "access": "UNKNOWN_INFO_DENIED",
                        "memberships": {
                          "group:everyone@example.com": {
                            "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED"
                          }
                        },
                        "role": "roles/owner"
                      }
                    ],
                    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
                    "policy": {
                      "bindings": [
                        {
                          "members": [
                            "group:everyone@example.com"
                          ],
                          "role": "roles/owner"
                        }
                      ],
                      "etag": "BwWgJSIInYA=",
                      "version": 3
                    }
                  },
                  {
                    "access": "UNKNOWN_INFO_DENIED",
                    "policy": {}
                  }
                ]
              }
            }
          }
        },
        {
          "accessTuple": {
            "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
            "permission": "resourcemanager.projects.update",
            "principal": "my-user@example.com"
          },
          "lastSeenDate": {
            "day": 27,
            "month": 3,
            "year": 2020
          },
          "diff": {
            "accessDiff": {
              "accessChange": "ACCESS_REVOKED",
              "baseline": {
                "accessState": "GRANTED"
              },
              "simulated": {
                "accessState": "NOT_GRANTED"
              }
            }
          }
        },
        {
          "accessTuple": {},
          "error": {
            "code": 12,
            "message": "Simulator does not yet support all resource types for 8 removed permissions.",
            "details": [
              {
                "@type": "type.googleapis.com/google.rpc.Status",
                "code": 12,
                "message": "Simulator does not yet support all resource types for 8 removed permissions.",
                "details": [
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.create"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.setIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.delete"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.update"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "pubsub.topics.publish"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.list"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.getIamPolicy"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  },
                  {
                    "@type": "type.googleapis.com/google.rpc.ErrorInfo",
                    "domain": "policysimulator.googleapis.com",
                    "metadata": {
                      "permission": "storage.objects.get"
                    },
                    "reason": "UNSUPPORTED_RESOURCE"
                  }
                ]
              }
            ]
          }
        }
      ],
      "nextPageToken": "AWukk3zjv80La+chWx6WNt7X8czGPLtP792gRpkNVEV/URZ/VdWzxmuJKr"
    }
    

    S'il n'y a pas eu de modifications d'accès entre la stratégie d'autorisation existante et la stratégie d'autorisation simulée, la requête renvoie une liste vide ({}).

Comprendre les résultats du simulateur de stratégie

Le simulateur de stratégie d'autorisation indique l'impact d'une modification proposée à une stratégie d'autorisation sous la forme d'une liste de modifications d'accès. Une modification d'accès représente une tentative d'accès survenue au cours des 90 derniers jours et dont les résultats de la stratégie d'autorisation proposée diffèrent de ceux de la stratégie d'autorisation actuelle.

Policy Simulator répertorie également toutes les erreurs survenues lors de la simulation, ce qui vous permet d'identifier les écarts potentiels dans la simulation.

La présentation de ces modifications et erreurs dépend de la plate-forme que vous utilisez.

Console

La page des résultats de Policy Simulator affiche les résultats de la simulation dans plusieurs sections différentes :

  • Modifications des stratégies : cette section répertorie la ressource pour laquelle vous proposez des modifications de stratégie d'autorisation, les rôles que vous proposez de supprimer et les rôles que vous proposez d'ajouter.

    Cette section contient également un bouton Afficher les différences entre les règles. Si vous cliquez sur ce bouton, vous pouvez afficher la stratégie d'autorisation de la ressource avant et après les modifications proposées.

  • Modifications des autorisations: cette section contient le nombre d'autorisations supprimées et ajoutées, qui décrivent la modification des autorisations du compte principal si vous appliquez les modifications proposées. Ces nombres sont calculés en comparant les autorisations des rôles actuels au compte principal avec les autorisations proposées dans les rôles proposés pour le compte principal, en ignorant les rôles hérités.

    Cette section contient également un bouton Afficher les différences entre autorisations. Si vous cliquez sur ce bouton, vous pouvez afficher un comparatif des autorisations dans les rôles actuels et les rôles proposés pour le compte principal.

  • Modifications d'accès au cours des 90 derniers jours : cette section indique les tentatives d'accès des 90 derniers jours qui génèrent des résultats différents avec la stratégie d'autorisation proposée et la stratégie d'autorisation actuelle. Cette section inclut à la fois un résumé des modifications d'accès et un tableau avec des résultats plus détaillés.

    Le résumé des modifications d'accès répertorie le nombre de chaque type de modification d'accès, le nombre d'erreurs et de résultats inconnus, ainsi que le nombre de tentatives d'accès ayant le même résultat conformément à la stratégie d'autorisation proposée et la stratégie d'autorisation actuelle. Le résumé indique également le nombre d'autorisations n'ayant pas pu être simulées. Pour en savoir plus, consultez la section Erreurs sur cette page.

    Cette section contient également un tableau des modifications d'accès. Ce tableau répertorie chaque tentative d'accès des 90 derniers jours qui génère un résultat différent avec la stratégie d'autorisation proposée et la stratégie d'autorisation actuelle. Chaque entrée comprend la ressource à laquelle le compte principal tentait d'accéder, la date de la demande, le compte principal à l'origine de la demande, l'autorisation incluse dans la demande et la comparaison de l'état d'accès sous la stratégie d'autorisation proposée avec l'état d'accès sous la stratégie d'autorisation actuelle.

    Il existe plusieurs types de modifications d'accès :

    Modification d'accès Détails
    Accès révoqué Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais ne le sera plus après la mise en œuvre de la modification proposée.
    Accès potentiellement révoqué

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il n'aura pas d'accès après la mise en œuvre de la modification proposée.
    Accès obtenu Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais le sera après la mise en œuvre de la modification proposée.
    Accès potentiellement obtenu

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il sera autorisé à accéder après la mise en œuvre de la modification proposée.
    Accès inconnu L'accès du compte principal avec la stratégie d'autorisation actuelle et avec la stratégie d'autorisation proposée est inconnu. Les modifications proposées peuvent affecter l'accès du compte principal.
    Erreur Une erreur s'est produite lors de la simulation.

    Pour afficher des informations supplémentaires sur une modification d'accès, cliquez sur la modification d'accès. Le panneau Détails de la modification d'accès s'ouvre. Il contient des informations supplémentaires sur la modification d'accès, y compris l'accès existant du compte principal, l'accès proposé et des détails supplémentaires sur les résultats de la modification d'accès.

gcloud

Lorsque vous exécutez la commande replay-recent-access, la réponse de gcloud CLI contient une liste de replayResults.

Chaque résultat de relecture décrit une tentative d'accès dont le résultat aurait été différent si la stratégie d'autorisation proposée avait été en place au moment de la tentative. Par exemple, le résultat de relecture suivant montre que my-user@example.com a utilisé l'autorisation resourcemanager.projects.update par le passé pour effectuer une action dans le projet my-project. Toutefois, si la stratégie d'autorisation proposée avait été en place, l'accès lui aurait été refusé.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Chaque résultat de relecture comporte les champs suivants :

  • accessTuple : tentative d'accès associée au résultat. Ce champ inclut la ressource, l'autorisation et le compte principal impliqués dans la tentative d'accès.

  • lastSeenDate : date de la dernière tentative d'accès.

  • diff.accessDiff ou error : si la relecture d'une tentative d'accès aboutit, le résultat contient un champ diff.accessDiff qui indique la différence entre les résultats de la tentative d'accès sous la stratégie d'autorisation actuelle et sous la stratégie d'autorisation proposée. Si la relecture d'une tentative échoue, le résultat de la relecture affiche un champ error contenant une description de l'erreur. Pour en savoir plus sur les erreurs de simulation, consultez la section Erreurs de cette page.

Chaque différence d'accès comporte les composants suivants :

  • baseline : résultat d'accès lors de l'utilisation de la stratégie d'autorisation actuelle. Le résultat affiche l'une des valeurs suivantes : GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED. Si le résultat est UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED, la réponse liste également les erreurs associées aux informations inconnues, ainsi que les stratégies d'autorisation associées à cette erreur. Pour en savoir plus sur les valeurs UNKNOWN, consultez la section Résultats inconnus de cette page.
  • simulated : résultat d'accès lors de l'utilisation de la stratégie d'autorisation proposée. Le résultat affiche l'une des valeurs suivantes : GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED. Si le résultat est UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED, la réponse liste également les erreurs associées aux informations inconnues, ainsi que les stratégies d'autorisation associées à cette erreur. Pour en savoir plus sur les valeurs UNKNOWN, consultez la section Résultats inconnus de cette page.
  • accessChange : différence entre l'état de l'accès de référence (baseline) et l'état de l'accès simulé. Reportez-vous au tableau suivant pour obtenir la liste des valeurs potentielles :

    Modification d'accès Détails
    ACCESS_REVOKED Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais ne le sera plus après la mise en œuvre de la modification proposée.
    ACCESS_MAYBE_REVOKED

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il n'aura pas d'accès après la mise en œuvre de la modification proposée.
    ACCESS_GAINED Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais le sera après la mise en œuvre de la modification proposée.
    ACCESS_MAYBE_GAINED

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il sera autorisé à accéder après la mise en œuvre de la modification proposée.
    UNKNOWN_CHANGE L'accès du compte principal avec la stratégie d'autorisation actuelle et avec la stratégie d'autorisation proposée est inconnu. Les modifications proposées peuvent affecter l'accès du compte principal.

REST

Lorsque vous appelez la méthode replays.results.list, la réponse contient la liste de replayResults.

Chaque résultat de relecture décrit une tentative d'accès dont le résultat aurait été différent si la stratégie d'autorisation proposée avait été en place au moment de la tentative. Par exemple, le résultat de relecture suivant montre que my-user@example.com a utilisé l'autorisation resourcemanager.projects.update par le passé pour effectuer une action dans le projet my-project. Toutefois, si la stratégie d'autorisation proposée avait été en place, l'accès lui aurait été refusé.

{
  "accessTuple": {
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
    "permission": "resourcemanager.projects.update",
    "principal": "my-user@example.com"
  },
  "lastSeenDate": {
    "day": 15,
    "month": 1,
    "year": 2021
  },
  "diff": {
    "accessDiff": {
      "baseline": {
        "accessState": "GRANTED"
      },
      "simulated": {
        "accessState": "NOT_GRANTED"
      },
      "accessChange": "ACCESS_REVOKED"
    }
  }
}

Chaque résultat de relecture comporte les champs suivants :

  • accessTuple : tentative d'accès associée au résultat. Ce champ inclut la ressource, l'autorisation et le compte principal impliqués dans la tentative d'accès.

  • lastSeenDate : date de la dernière tentative d'accès.

  • diff.accessDiff ou error : si la relecture d'une tentative d'accès aboutit, le résultat contient un champ diff.accessDiff qui indique la différence entre les résultats de la tentative d'accès sous la stratégie d'autorisation actuelle et sous la stratégie d'autorisation proposée. Si la relecture d'une tentative échoue, le résultat de la relecture affiche un champ error contenant une description de l'erreur. Pour en savoir plus sur les erreurs de simulation, consultez la section Erreurs de cette page.

Chaque différence d'accès comporte les composants suivants :

  • baseline : résultat d'accès lors de l'utilisation de la stratégie d'autorisation actuelle. Le résultat affiche l'une des valeurs suivantes : GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED. Si le résultat est UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED, la réponse liste également les erreurs associées aux informations inconnues, ainsi que les stratégies d'autorisation associées à cette erreur. Pour en savoir plus sur les valeurs UNKNOWN, consultez la section Résultats inconnus de cette page.
  • simulated : résultat d'accès lors de l'utilisation de la stratégie d'autorisation proposée. Le résultat affiche l'une des valeurs suivantes : GRANTED, NOT_GRANTED, UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED. Si le résultat est UNKNOWN_CONDITIONAL ou UNKNOWN_INFO_DENIED, la réponse liste également les erreurs associées aux informations inconnues, ainsi que les stratégies d'autorisation associées à cette erreur. Pour en savoir plus sur les valeurs UNKNOWN, consultez la section Résultats inconnus de cette page.
  • accessChange : différence entre l'état de l'accès de référence (baseline) et l'état de l'accès simulé. Reportez-vous au tableau suivant pour obtenir la liste des valeurs potentielles :

    Modification d'accès Détails
    ACCESS_REVOKED Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais ne le sera plus après la mise en œuvre de la modification proposée.
    ACCESS_MAYBE_REVOKED

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal est autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il n'aura pas d'accès après la mise en œuvre de la modification proposée.
    ACCESS_GAINED Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais le sera après la mise en œuvre de la modification proposée.
    ACCESS_MAYBE_GAINED

    Ce résultat peut se produire pour les raisons suivantes :

    • Le compte principal n'est pas autorisé à accéder avec la stratégie d'autorisation actuelle, mais son accès avec la stratégie d'autorisation proposée est inconnu.
    • L'accès du compte principal avec la stratégie d'autorisation actuelle est inconnu, mais il sera autorisé à accéder après la mise en œuvre de la modification proposée.
    UNKNOWN_CHANGE L'accès du compte principal avec la stratégie d'autorisation actuelle et avec la stratégie d'autorisation proposée est inconnu. Les modifications proposées peuvent affecter l'accès du compte principal.

Résultats inconnus

Si un résultat d'accès est inconnu, cela signifie que Policy Simulator n'a pas suffisamment d'informations pour faire une évaluation complète de la tentative d'accès.

Console

Si un résultat d'accès est inconnu, le panneau de détails de la modification d'accès en indique la raison, ainsi que les rôles, stratégies d'autorisation, informations sur l'appartenance et conditions spécifiques non accessibles ou impossibles à évaluer.

Un résultat peut être inconnu pour plusieurs raisons :

  • Refus d'afficher les informations sur le rôle : le compte principal exécutant la simulation n'a pas l'autorisation d'afficher les détails d'un ou de plusieurs des rôles simulés.
  • Impossible d'accéder à la stratégie : le compte principal exécutant la simulation n'a pas l'autorisation d'obtenir la stratégie d'autorisation pour une ou plusieurs des ressources impliquées dans la simulation.
  • Informations sur l'appartenance refusée : le compte principal qui exécute la simulation n'a pas l'autorisation d'afficher les membres d'un ou plusieurs des groupes inclus dans la simulation de stratégie d'autorisation.
  • Condition non acceptée : une liaison de rôle conditionnelle de la stratégie d'autorisation est en cours de test. Policy Simulator n'étant pas compatible avec les conditions, la liaison n'a pas pu être évaluée.

gcloud

Dans gcloud CLI, les résultats de la simulation indiquent la raison pour laquelle le résultat est inconnu dans la différence d'accès.

La raison pour laquelle le résultat de l'accès est inconnu sera l'une des suivantes :

  • UNKNOWN_INFO_DENIED : l'utilisateur n'est pas autorisé à accéder aux informations nécessaires pour évaluer l'état d'accès. Ce problème peut survenir pour l'une des raisons suivantes :

    • L'utilisateur n'est pas autorisé à récupérer la stratégie d'autorisation simulée, ou n'est pas autorisé à récupérer les stratégies d'autorisation des ressources dans les journaux d'accès.
    • L'utilisateur n'est pas autorisé à consulter une appartenance à un groupe.
    • L'utilisateur ne peut pas récupérer les informations de rôle nécessaires.

    Pour savoir quelles informations sont manquantes, consultez les informations d'erreur après l'état d'accès indiqué.

  • UNKNOWN_CONDITIONAL : il existe une liaison de rôle conditionnelle dans la stratégie d'autorisation en cours de test. Policy Simulator n'étant pas compatible avec les conditions, la liaison n'a pas pu être évaluée.

Si le résultat est inconnu, le champ de la stratégie d'autorisation (baseline ou simulated) contient un champ errors décrivant la raison pour laquelle les informations sont inconnues, et un policies répertoriant les stratégies d'autorisation associées aux erreurs. Pour en savoir plus sur les erreurs, consultez la section Erreurs de cette page.

REST

Dans l'API REST, les résultats de la simulation indiquent la raison pour laquelle le résultat est inconnu dans la différence d'accès.

La raison pour laquelle le résultat de l'accès est inconnu sera l'une des suivantes :

  • UNKNOWN_INFO_DENIED : l'utilisateur n'est pas autorisé à accéder aux informations nécessaires pour évaluer l'état d'accès. Ce problème peut survenir pour l'une des raisons suivantes :

    • L'utilisateur n'est pas autorisé à récupérer la stratégie d'autorisation simulée, ou n'est pas autorisé à récupérer les stratégies d'autorisation des ressources dans les journaux d'accès.
    • L'utilisateur n'est pas autorisé à consulter une appartenance à un groupe.
    • L'utilisateur ne peut pas récupérer les informations de rôle nécessaires.

    Pour savoir quelles informations sont manquantes, consultez les informations d'erreur après l'état d'accès indiqué.

  • UNKNOWN_CONDITIONAL : il existe une liaison de rôle conditionnelle dans la stratégie d'autorisation en cours de test. Policy Simulator n'étant pas compatible avec les conditions, la liaison n'a pas pu être évaluée.

Si le résultat est inconnu, le champ de la stratégie d'autorisation (baseline ou simulated) contient un champ errors décrivant la raison pour laquelle les informations sont inconnues, et un policies répertoriant les stratégies d'autorisation associées aux erreurs. Pour en savoir plus sur les erreurs, consultez la section Erreurs de cette page.

Erreurs

Policy Simulator signale également toute erreur survenue lors de la simulation. Il est important d'examiner ces erreurs afin de comprendre les écarts potentiels dans la simulation.

Console

Policy Simulator peut signaler plusieurs types d'erreurs :

  • Erreurs d'opération : la simulation n'a pas pu être exécutée. Policy Simulator affiche les erreurs d'opération en haut de la page de résultats.

    Si le message d'erreur indique que la simulation n'a pas pu être exécutée, car votre projet ou votre organisation comporte trop de journaux, vous ne pouvez pas exécuter de simulation sur la ressource.

    Si vous obtenez cette erreur pour une autre raison, essayez à nouveau d'exécuter la simulation. Si vous ne parvenez toujours pas à exécuter la simulation, envoyez un e-mail à l'adresse policy-simulator-feedback@google.com.

  • Erreurs de relecture : une relecture de tentative d'accès unique a échoué. Policy Simulator n'a donc pas pu déterminer si le résultat de la tentative d'accès serait modifié avec la stratégie d'autorisation proposée.

    La console Google Cloud répertorie les erreurs de relecture dans le tableau Modifications d'accès au cours des 90 derniers jours. Le panneau Détails de la modification d'accès contient un message d'erreur pour vous aider à comprendre le problème, ainsi que la ressource et l'autorisation objets de la simulation lorsque l'erreur s'est produite.

  • Erreurs de type de ressource non compatibles : la stratégie d'autorisation proposée affecte les autorisations associées à un type de ressource non compatible, que Policy Simulator ne peut pas simuler.

    Policy Simulator répertorie ces autorisations dans les résultats de la simulation pour vous permettre de savoir quelles autorisations n'ont pas pu être simulées.

gcloud

Dans les résultats de simulation de gcloud CLI, les erreurs peuvent apparaître à deux endroits :

  • Dans le champ replayResult.error : si la tentative de relecture a échoué, Policy Simulator indique l'erreur dans le champ replayResult.error. Si un résultat de relecture contient ce champ, le champ diff n'y apparaît pas.
  • Dans le champ replayResult.diff.accessDiff.policy-type.errors, où policy-type est baseline ou simulated. Si la tentative de relecture a réussi, mais que le résultat était UNKNOWN_INFO_DENIED ou UNKNOWN_CONDITIONAL, Policy Simulator indique la raison pour laquelle le résultat était inconnu dans ce champ.

 Policy Simulator génère les types d'erreurs suivants :

Erreur Code d'erreur Détails
GENERIC_INTERNAL_ERROR 13 La requête a échoué en raison d'une erreur interne. Pour résoudre ce problème, essayez d'exécuter à nouveau la simulation. Si la simulation échoue toujours, contactez policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator n'a pas pu relire la tentative d'accès, car elle contenait une autorisation, un nom de ressource ou un compte principal non valide.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator n'a pas pu évaluer l'appartenance du compte principal au groupe, car le groupe comporte trop de sous-groupes. Cette erreur est associée aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'a pas l'autorisation d'afficher l'appartenance au groupe. Cette erreur est associée aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer une stratégie d'autorisation. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer les autorisations dans un rôle IAM. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer la stratégie d'autorisation d'une ressource ancêtre. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Le tuple d'accès contient un type de compte principal non compatible avec Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Le tuple d'accès contient un compte principal non compatible avec Policy Simulator.
UNIMPLEMENTED_CONDITION 12 Le tuple d'accès contient une condition non compatible avec Policy Simulator. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 Policy Simulator n'a pas pu exécuter la simulation car la ressource est associée à un trop grand nombre de journaux d'accès. Pour en savoir plus, consultez la section Taille maximale de relecture des journaux de la page "Concepts de Policy Simulator".
UNSUPPORTED_RESOURCE 12

La stratégie d'autorisation proposée modifie les autorisations associées à des types de ressources non compatibles. Cette erreur apparaît dans le champ replayResult.error et contient une liste des autorisations associées à des types de ressources non compatibles. Exemple :

"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Pour plus d'informations sur les types de ressources non compatibles, consultez la section Niveaux de compatibilité des types de ressources de la page "Concepts de Policy Simulator".

REST

Dans les résultats de simulation de l'API REST, les erreurs peuvent apparaître à deux endroits :

  • Dans le champ replayResult.error : si la tentative de relecture a échoué, Policy Simulator indique l'erreur dans le champ replayResult.error. Si un résultat de relecture contient ce champ, le champ diff n'y apparaît pas.
  • Dans le champ replayResult.diff.accessDiff.policy-type.errors, où policy-type est baseline ou simulated. Si la tentative de relecture a réussi, mais que le résultat était UNKNOWN_INFO_DENIED ou UNKNOWN_CONDITIONAL, Policy Simulator indique la raison pour laquelle le résultat était inconnu dans ce champ.

 Policy Simulator génère les types d'erreurs suivants :

Erreur Code d'erreur Détails
GENERIC_INTERNAL_ERROR 13 La requête a échoué en raison d'une erreur interne. Pour résoudre ce problème, essayez d'exécuter à nouveau la simulation. Si la simulation échoue toujours, contactez policy-simulator-feedback@google.com.
INVALID_ACCESS_TUPLE 3 Policy Simulator n'a pas pu relire la tentative d'accès, car elle contenait une autorisation, un nom de ressource ou un compte principal non valide.
OUT_OF_RANGE_GROUP_TOO_LARGE 11 Policy Simulator n'a pas pu évaluer l'appartenance du compte principal au groupe, car le groupe comporte trop de sous-groupes. Cette erreur est associée aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'a pas l'autorisation d'afficher l'appartenance au groupe. Cette erreur est associée aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_POLICY 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer une stratégie d'autorisation. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_IAM_ROLE 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer les autorisations dans un rôle IAM. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
PERMISSION_DENIED_ON_PARENT_IAM_POLICY 7 Policy Simulator n'a pas pu évaluer l'accès d'un utilisateur, car l'appelant n'est pas autorisé à récupérer la stratégie d'autorisation d'une ressource ancêtre. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_INFO_DENIED.
UNIMPLEMENTED_MEMBER_TYPE 12 Le tuple d'accès contient un type de compte principal non compatible avec Policy Simulator.
UNIMPLEMENTED_MEMBER 12 Le tuple d'accès contient un compte principal non compatible avec Policy Simulator.
UNIMPLEMENTED_CONDITION 12 Le tuple d'accès contient une condition non compatible avec Policy Simulator. Ce type d'erreur est associé aux modifications d'accès UNKNOWN_CONDITIONAL.
LOG_SIZE_TOO_LARGE 8 Policy Simulator n'a pas pu exécuter la simulation car la ressource est associée à un trop grand nombre de journaux d'accès. Pour en savoir plus, consultez la section Taille maximale de relecture des journaux de la page "Concepts de Policy Simulator".
UNSUPPORTED_RESOURCE 12

La stratégie d'autorisation proposée modifie les autorisations associées à des types de ressources non compatibles. Cette erreur apparaît dans le champ replayResult.error et contient une liste des autorisations associées à des types de ressources non compatibles. Exemple :

"error": {
  "code": 12,
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.create"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.setIamPolicy"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    },
    {
      "@type": "type.googleapis.com/google.rpc.ErrorInfo",
      "domain": "policysimulator.googleapis.com",
      "metadata": {
        "permission": "storage.objects.get"
      },
      "reason": "UNSUPPORTED_RESOURCE"
    }
  ],
  "message": "unsupported-permissions-error-message"
}

Pour plus d'informations sur les types de ressources non compatibles, consultez la section Niveaux de compatibilité des types de ressources de la page "Concepts de Policy Simulator".

Appliquer une simulation de modification de stratégie

Pour appliquer une modification simulée à une stratégie d'autorisation, procédez comme suit :

Console

  1. Cliquez sur Appliquer les modifications proposées.

  2. Dans la boîte de dialogue de confirmation, cliquez sur Appliquer pour confirmer la modification.

gcloud

Exécutez la commande set-iam-policy et indiquez le chemin d'accès au fichier JSON contenant la simulation de stratégie que vous souhaitez appliquer :

gcloud resource-type set-iam-policy resource-id filepath

Indiquez les valeurs suivantes :

  • resource-type : type de ressource dont vous souhaitez mettre à jour la stratégie d'autorisation. Exemple :projects
  • resource-id : ID de la ressource dont vous souhaitez mettre à jour la stratégie d'autorisation. Exemple :my-project
  • filepath : chemin d'accès au fichier contenant la stratégie d'autorisation mise à jour.

La réponse contient la stratégie d'autorisation mise à jour. Si vous traitez les stratégies d'autorisation IAM comme du code et les stockez dans un système de contrôle des versions, vous devez stocker la stratégie d'autorisation renvoyée par gcloud CLI, et non le fichier JSON contenant la stratégie d'autorisation simulée.

REST

Définissez la stratégie d'autorisation proposée en tant que nouvelle stratégie d'autorisation de la ressource.

Pour définir la stratégie d'autorisation de la requête en tant que nouvelle stratégie d'autorisation du projet, utilisez la méthode projects.setIamPolicy de l'API Resource Manager.

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

  • PROJECT_ID : ID de votre projet Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project.
  • POLICY : représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": {
    POLICY
  }
}

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

La réponse contient la stratégie d'autorisation mise à jour.


Enregistrer les résultats de simulation

Si vous utilisez gcloud CLI, vous pouvez enregistrer les résultats de Policy Simulator sous forme de fichiers JSON, YAML ou CSV.

Enregistrer au format JSON ou YAML

Pour enregistrer les résultats d'une simulation sous forme de fichier JSON ou YAML, ajoutez l'option suivante à la commande replay-recent-access lors de l'exécution de la simulation :

--output=output-format > filename

Remplacez les valeurs suivantes :

  • output-format : langage du fichier exporté (json ou yaml).
  • filename : nom du fichier exporté.

Enreg. sous CSV

Pour enregistrer un fichier CSV, ajoutez l'option suivante à la commande replay-recent-access lors de l'exécution de la simulation :

--flatten="diffs[]" --format=csv(output-fields) > filename

Remplacez les valeurs suivantes :

  • output-fields : liste des champs que vous souhaitez inclure dans les résultats exportés, séparés par une virgule. Exemple : diffs.accessTuple.principal, diffs.accessTuple.permission.
  • filename : nom du fichier exporté.

Vous pouvez également ajouter des champs, tels que errors[] à l'option --flatten. L'ajout de champs à l'option --flatten permet de faire apparaître les éléments de ces champs sur des lignes distinctes du fichier CSV.

Voici un exemple de commande replay-recent-access qui enregistre les champs les plus importants des résultats de la simulation sous la forme du fichier CSV simulation-results.csv :

gcloud iam simulator replay-recent-access --flatten="diffs[]" \
    --format="csv(diffs.accessTuple.principal, diffs.accessTuple.permission, \
    diffs.accessTuple.fullResourceName, diffs.diff.accessDiff.accessChange, \
    diffs.diff.accessDiff.baseline.accessState, \
    diffs.diff.accessDiff.simulated.accessState)" \
    //cloudresourcemanager.googleapis.com/projects/my-project \
    proposed-policy.json > simulation-results.csv

Cet exemple simule proposed-policy.json pour le projet my-project et enregistre les résultats sous simulation-results.csv. Ce fichier CSV contient les champs suivants : compte principal, autorisation, ressource, modification d'accès, état d'accès de référence et état d'accès simulé.

Pour en savoir plus sur la mise en forme avec gcloud CLI, consultez la section Formats.

Étape suivante