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
-
Enable the Policy Simulator and Resource Manager APIs.
- (Facultatif) Découvrez le fonctionnement de Policy Simulator.
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:
-
Lecteur d'éléments Cloud (
roles/cloudasset.viewer
) -
Administrateur du simulateur (
roles/policysimulator.admin
) -
Examinateur de sécurité (
roles/iam.securityReviewer
)
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 etservice
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.
Autorisations recommandées
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.
Autorisations IAM recommandées
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
etiam.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 etservice
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 :
- Policy Simulator est compatible avec la ressource.
La ressource possède une stratégie d'autorisation pouvant avoir un impact sur l'accès de l'utilisateur. Cela s'applique si l'une des conditions suivantes s'applique :
- La ressource est un descendant de la ressource dont vous simulez la stratégie d'autorisation. Elle apparaît dans les journaux d'accès correspondants.
- La ressource est un ancêtre de la ressource dont vous simulez la stratégie d'autorisation.
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'autorisationresourcemanager.folders.getIamPolicy
sur ce dossier.
Autorisations Google Workspace recommandées
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:
Dans la console Google Cloud, accédez à la page IAM.
Créez une modification proposée de la stratégie d'autorisation en modifiant les autorisations d'un compte principal existant :
- Recherchez le compte principal dont vous souhaitez modifier l'accès, puis cliquez sur le bouton Modifier ( ) situé sur la droite.
- Modifiez l'accès du compte principal en ajoutant un nouveau rôle, ou en révoquant ou en modifiant un rôle existant.
Pour simuler la modification proposée, cliquez sur Tester les modifications.
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.
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 valeurjson
ouyaml
.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
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.
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
ouyaml
.
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 autorisationsresourcemanager.projects.list
etresourcemanager.projects.get
pour le projetmy-project
, et n'aurait certainement plus l'autorisationresourcemanager.projects.update
pour le projetmy-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.
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 quemy-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" ] } ] }
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.
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 êtreprojects
,folders
ouorganizations
. HOST_RESOURCE_ID
: ID de la ressource hôte, par exemplemy-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 quemy-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" } }
-
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 champname
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éfixeoperations
. Copiez cette valeur dans le champname
d'une réponsereplays.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 quemy-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 } } } } }
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 champresponse.replay.name
d'une réponseoperations.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 quemy-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 autorisationsresourcemanager.projects.list
etresourcemanager.projects.get
pour le projetmy-project
, et n'aurait certainement plus l'autorisationresourcemanager.projects.update
pour le projetmy-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
ouerror
: si la relecture d'une tentative d'accès aboutit, le résultat contient un champdiff.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 champerror
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
ouUNKNOWN_INFO_DENIED
. Si le résultat estUNKNOWN_CONDITIONAL
ouUNKNOWN_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 valeursUNKNOWN
, 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
ouUNKNOWN_INFO_DENIED
. Si le résultat estUNKNOWN_CONDITIONAL
ouUNKNOWN_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 valeursUNKNOWN
, 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
ouerror
: si la relecture d'une tentative d'accès aboutit, le résultat contient un champdiff.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 champerror
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
ouUNKNOWN_INFO_DENIED
. Si le résultat estUNKNOWN_CONDITIONAL
ouUNKNOWN_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 valeursUNKNOWN
, 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
ouUNKNOWN_INFO_DENIED
. Si le résultat estUNKNOWN_CONDITIONAL
ouUNKNOWN_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 valeursUNKNOWN
, 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 champreplayResult.error
. Si un résultat de relecture contient ce champ, le champdiff
n'y apparaît pas. - Dans le champ
replayResult.diff.accessDiff.policy-type.errors
, où policy-type estbaseline
ousimulated
. Si la tentative de relecture a réussi, mais que le résultat étaitUNKNOWN_INFO_DENIED
ouUNKNOWN_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 "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 champreplayResult.error
. Si un résultat de relecture contient ce champ, le champdiff
n'y apparaît pas. - Dans le champ
replayResult.diff.accessDiff.policy-type.errors
, où policy-type estbaseline
ousimulated
. Si la tentative de relecture a réussi, mais que le résultat étaitUNKNOWN_INFO_DENIED
ouUNKNOWN_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 "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
Cliquez sur Appliquer les modifications proposées.
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 quemy-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
ouyaml
).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
- Découvrez comment résoudre les problèmes d'accès des comptes principaux existants.
- Découvrez comment appliquer le principe du moindre privilège avec les recommandations de rôles.