En esta página, se describe cómo simular un cambio en una política de permiso mediante Policy Simulator para las políticas de permiso de Identity and Access Management. También se explica cómo interpretar los resultados de la simulación y cómo aplicar la política de permisos simulada si así lo deseas.
Antes de comenzar
-
Enable the Policy Simulator and Resource Manager APIs.
- Opcional: Consulta cómo funciona Policy Simulator.
Permisos necesarios
Antes de simular un cambio en una política de permisos, debes asegurarte de tener los permisos adecuados. Se requieren ciertos permisos para ejecutar una simulación; otros no son obligatorios, pero te ayudan a obtener los resultados más completos de la simulación.
Para obtener más información sobre los roles de Identity and Access Management (IAM), consulta Comprende los roles.
Permisos de recursos de destino necesarios
El recurso de destino de la simulación es el recurso cuyas políticas de permisos simulas.
Para obtener los permisos que necesitas para ejecutar una simulación, pídele a tu administrador que te otorgue los siguientes roles de IAM en el recurso de destino:
-
Visualizador de recursos de Cloud (
roles/cloudasset.viewer
) -
Administrador del simulador (
roles/policysimulator.admin
) -
Revisor de seguridad (
roles/iam.securityReviewer
)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para ejecutar una simulación. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para ejecutar una simulación:
-
cloudasset.assets.searchAllResources
-
policysimulator.replays.run
-
service.resource.getIamPolicy
, en el queresource
es el tipo de recurso del recurso de destino yservice
es el nombre del servicio de Google Cloud que posee ese recurso.
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Permisos necesarios de recursos de host
El recurso de host de una simulación es la organización, la carpeta o el proyecto que crea y ejecuta la simulación. El recurso de host no necesita estar relacionado con el recurso de destino de ninguna manera.
La forma en que configuras el recurso de host depende de la plataforma que uses.
Console
El recurso de host es el proyecto, la carpeta o la organización que aparece en el selector de recursos.
Para cambiar el recurso de host, elige un proyecto, una carpeta o una organización diferentes en el selector de recursos.
gcloud
El recurso de host es el proyecto de cuota actual. Para configurar el proyecto de cuota, usa el comando gcloud auth application-default set-quota-project
.
REST
Debes especificar manualmente el recurso de host cada vez que envías una solicitud. Consulta Simula un cambio en la política en esta página para obtener más detalles.
Para obtener los permisos que necesitas para ejecutar una simulación, pídele a tu administrador que te otorgue el rol de IAM de administrador del simulador (roles/policysimulator.admin
) en el recurso de host.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para ejecutar una simulación. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para ejecutar una simulación:
-
policysimulator.replayResults.list
-
policysimulator.replays.create
-
policysimulator.replays.get
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Permisos recomendados
Para obtener los resultados más completos de una simulación, te recomendamos que tengas ciertos permisos de IAM y de Google Workspace. Si no tienes algunos o todos los permisos, puedes ejecutar una simulación. Sin embargo, si ejecutas una simulación sin estos permisos puede generar un aumento en la cantidad de cambios de acceso desconocidos, ya que es posible que no puedas recuperar información que podría afectar los resultados de la simulación.
Permisos de IAM recomendados
Te recomendamos que tengas la función de revisor de seguridad (roles/iam.securityReviewer
) en tu organización cuando ejecutes una simulación.
Como alternativa, si ya tienes la función de administrador de seguridad (roles/iam.securityAdmin
), no necesitas tener ninguna función adicional.
Estas funciones te otorgan los siguientes permisos, que te ayudan a obtener los resultados más completos de la simulación:
iam.roles.get
yiam.roles.list
en cualquier proyecto, organización o carpeta relevante en la que se definan funciones personalizadas. Un proyecto, una carpeta o una organización es relevante si es un elemento principal o secundario del recurso cuya política de permisos simulas.service.resource.getIamPolicy
, en la queresource
es el nombre de un tipo de recurso que puede tener una política de permisos, yservice
es el nombre del servicio de Google Cloud que posee ese recurso.Cuando ejecutes una simulación, te recomendamos que tengas este permiso en cada recurso que se ajuste a estos criterios:
- Policy Simulator admite el recurso.
El recurso tiene una política de permisos que puede afectar el acceso del usuario. Esto es verdadero si se aplica una de las siguientes condiciones:
- El recurso es un elemento secundario del recurso cuya política de permisos simulas y aparece en los registros de acceso relevantes.
- El recurso es un elemento principal del recurso cuya política de permisos simulas.
Por ejemplo, imagina que quieres simular una política de permisos para un proyecto. Si los registros de acceso incluyen un intento de acceso para un bucket de Cloud Storage en el proyecto, necesitas el permiso
storage.buckets.getIamPolicy
en ese bucket. Si el proyecto tiene una carpeta superior con una política de permisos, también necesitas el permisoresourcemanager.folders.getIamPolicy
en esa carpeta.
Permisos recomendados de Google Workspace
Te recomendamos que tengas permiso a fin de recuperar información de pertenencia de cada Grupo de Google en la política de permisos original y la política de permisos propuesta.
Los administradores de grupo y los administradores avanzados de Google Workspace suelen tener acceso para ver las membresías del grupo. Si no eres administrador avanzado ni administrador de grupo, pídele al administrador de Google Workspace que cree un rol de administrador personalizado de Google Workspace que contenga el privilegio groups.read
(ubicado en Privilegios de la API de administrador) y otorgársela. Esto te permite ver la pertenencia de todos los grupos de tu dominio y simular de manera más eficaz los cambios en una política de permisos.
Simula un cambio de política
Simula un cambio en una política de permisos mediante estos pasos.
Console
En el siguiente ejemplo, se muestra cómo simular un cambio en una política de permisos para un proyecto. Sin embargo, puedes simular un cambio en una política de permisos de cualquier recurso que tenga una política de permisos.
Edita los permisos de una principal y, en lugar de hacer clic en Guardar, haz clic en Probar cambios:
En la consola de Google Cloud, ve a la página IAM.
Crea un cambio propuesto en la política de permisos mediante la edición de los permisos de una principal existente:
- Localiza la principal cuyo acceso deseas editar y haz clic en el botón Editar a la derecha.
- Para editar el acceso de la principal, agrega una función nueva, revoca o cambia una función existente.
Para simular el cambio propuesto, haz clic en Probar cambios.
Después de varios minutos, la consola de Google Cloud mostrará los resultados de la simulación como una lista de cambios de acceso. Consulta Información sobre los resultados de Policy Simulator en esta página para obtener más información.
Si no hubo ningún cambio en el acceso entre la política de permisos existente y la política de permisos simulada, la consola de Google Cloud no mostrará ningún cambio de acceso.
gcloud
Para simular un cambio en una política de permisos, sigue el patrón de lectura-modificación-escritura, pero simula la política de permisos en lugar de escribirla.
Para leer la política de permisos actual, ejecuta el siguiente comando:
gcloud resource-type get-iam-policy resource-id --format=format > filepath
Reemplaza los siguientes valores:
resource-type
: El tipo de recurso para el que deseas simular una política de permisos. Por ejemplo,projects
resource-id
: El ID del recurso cuya política de permisos deseas simular. Por ejemplo,my-project
format
: El formato de la respuesta. Usa el valorjson
oyaml
.filepath
: La ruta a un nuevo archivo de salida de la política de permisos.
Por ejemplo, el siguiente comando obtiene la política de permisos para el proyecto
my-project
en formato JSON y la guarda en el directorio principal del usuario:gcloud projects get-iam-policy my-project --format=json > ~/policy.json
Modifica la política de permisos de JSON o YAML que muestra el comando
get-iam-policy
para reflejar los cambios que deseas simular.Existen varios tipos de cambios que puedes realizar en la política de permisos. Por ejemplo, puedes agregar o quitar una principal de una vinculación de rol o quitar una vinculación de rol de la política de permisos.
Ejecuta el siguiente comando para simular el cambio en la política de permisos:
gcloud iam simulator replay-recent-access \ full-resource-name \ filepath \ --format=format
Reemplaza los siguientes valores:
full-resource-name
: Es el nombre completo del recurso cuya política de permisos deseas simular.El nombre completo del recurso es un URI que consiste en el nombre del servicio y la ruta al recurso. Por ejemplo, si simulas una política de permisos para un proyecto, debes usar
//cloudresourcemanager.googleapis.com/projects/project- id
, dondeproject-id
es el ID del proyecto cuya política de permisos simulas.Para obtener una lista de los formatos de nombres de recursos completos, consulta Nombres de recursos completos.
filepath
: La ruta al archivo que contiene la política de permisos modificada que deseas simular. Por ejemplo,~/proposed_policy.json
format
: Es el formato de la respuesta. Por ejemplo,json
oyaml
.
Después de varios minutos, el comando imprime una lista de resultados de repetición que explican cómo cambiaría el acceso de la principal si se aplicara la política de permisos propuesta. En estos resultados, también se enumera cualquier error que haya ocurrido durante la simulación, incluidos los errores debido a los tipos de recursos no compatibles.
Consulta Información sobre los resultados del simulador de políticas en esta página para aprender a leer los resultados. Para aprender a guardar los resultados de la simulación en lugar de imprimirlos, consulta Guarda los resultados de la simulación.
La siguiente es una respuesta de muestra para una simulación de política de permisos que involucra al usuario
my-user@example.com
. En este caso, si se aplicara el cambio propuesto,my-user@example.com
podría dejar de tener los permisosresourcemanager.projects.list
yresourcemanager.projects.get
del proyectomy-project
, y con seguridad no tendría el permisoresourcemanager.projects.update
para el proyectomy-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." } } ]
Si no hubo ningún cambio en el acceso entre la política de permisos existente y la política de permisos simulada, el comando imprime
No access changes found in the replay
.
REST
Para simular un cambio en una política de permisos, sigue el patrón de lectura-modificación-escritura, pero en lugar de escribir la política de permisos, crea y ejecuta una simulación.
Lee la política de permisos para el recurso.
Para obtener la política de permisos de un proyecto, usa el método
projects.getIamPolicy
de la API de Resource Manager.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID
: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, comomy-project
.POLICY_VERSION
: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
Cuerpo JSON de la solicitud:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:fatima@example.com" ] } ] }
Modifica la política de permisos que se muestra para reflejar los cambios que deseas simular.
Existen varios tipos de cambios que puedes realizar en la política de permisos. Por ejemplo, puedes agregar o quitar una principal de una vinculación de rol o quitar una vinculación de rol de la política de permisos.
Crea una simulación o repítela con la política de permisos modificada.
Para crear una repetición para un proyecto, una carpeta o una organización, usa el método
replays.create
de la API de Policy Simulator.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
-
HOST_RESOURCE_TYPE
: Es el tipo de recurso que alojará la repetición. Este valor debe serprojects
,folders
oorganizations
. HOST_RESOURCE_ID
: Es el ID del recurso del host, por ejemplo,my-project
.-
TARGET_FULL_RESOURCE_NAME
: Es el nombre completo del recurso cuya política deseas simular. Este recurso puede ser cualquier recurso que acepte políticas de IAM y no necesita estar relacionado con el recurso host de ninguna manera.El nombre completo del recurso es un URI que consiste en el nombre del servicio y la ruta al recurso. Por ejemplo, si simulas una política para un proyecto, deberías usar
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID
, en el quePROJECT_ID
es el ID del proyecto cuya política deseas simular.Para obtener una lista completa de los formatos de nombre de recurso, consulta Nombres de recursos completos.
-
POLICY
: Es la política que deseas simular. Para ver un ejemplo de una política, consulta la referencia de políticas.Para simular varias políticas, incluye varios pares
"OBJECT_FULL_RESOURCE_NAME" : POLICY
en el cuerpo de la solicitud. PROJECT_ID
: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, comomy-project
.
Método HTTP y URL:
POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays
Cuerpo JSON de la solicitud:
{ "config": { "policyOverlay": { "TARGET_FULL_RESOURCE_NAME" : POLICY } } }
Para enviar tu solicitud, expande una de estas opciones:
La respuesta contiene el nombre de una operación que representa tu repetición:
{ "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8", "metadata": { "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata" } }
-
Busca el método
operations.get
hasta que se complete la repetición.Para sondear una operación, te recomendamos que invoques el método
operations.get
de manera repetida hasta que la respuesta incluya los campos"done": true
yname
con el nombre de la repetición completada. Usa la retirada exponencial truncada para ingresar una demora entre cada solicitud.Para obtener el estado de una repetición, usa el método
operations.get
de la API de Policy Simulator.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
OPERATION_NAME
: Es el nombre de una operación de repetición, incluido el prefijooperations
. Copia este valor del camponame
de una respuestareplays.create
. Por ejemplo:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8
PROJECT_ID
: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, comomy-project
.
Método HTTP y URL:
GET https://policysimulator.googleapis.com/v1/OPERATION_NAME
Para enviar tu solicitud, expande una de estas opciones:
Las operaciones en curso muestran una respuesta como la que se muestra a continuación:
{ "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d", "metadata": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata", "startTime": "2021-01-15T05:34:14.732Z" } }
Las operaciones completadas muestran una respuesta como la siguiente:
{ "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 } } } } }
Obtén los resultados de la repeticion.
Para obtener los resultados de una repetición, usa el método
replays.results.list
de la API de Policy Simulator.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
-
REPLAY_NAME
: Es el nombre de la repetición para la que deseas recuperar los resultados. Copia este valor del camporesponse.replay.name
de una respuestaoperations.get
. Incluye cualquier tipo de recurso y prefijos de ubicación. Por ejemplo:"projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
-
PAGE_SIZE
: Opcional La cantidad máxima de resultados que se mostrarán con esta solicitud. Si no se especifica, el servidor determinará la cantidad de resultados que se mostrarán. Si la cantidad de resultados es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para consultar la siguiente página de resultados. PAGE_TOKEN
: Opcional El token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de funciones comenzará desde el punto en que finalizó la solicitud anterior.PROJECT_ID
: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, comomy-project
.
Método HTTP y URL:
GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN
Para enviar tu solicitud, expande una de estas opciones:
La respuesta contiene una lista de resultados en la que se explica cómo cambiaría el acceso de la principal si se aplicara la política propuesta. En estos resultados, también se enumeran los errores que se produjeron durante la simulación, en particular, los errores debido a tipos de recursos no compatibles.
Consulta la Información sobre los resultados de Policy Simulator en esta página para aprender a leer los resultados.
La siguiente es una respuesta de muestra para una simulación de política que involucra al usuario
my-user@example.com
. En este caso, si se aplicara el cambio propuesto,my-user@example.com
ya no tendría los permisosresourcemanager.projects.list
yresourcemanager.projects.get
del proyectomy-project
, y con seguridad no tendría el permisoresourcemanager.projects.update
para el proyectomy-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" }
Si no hubo ningún cambio en el acceso entre la política de permisos existente y la política de permisos simulada, la solicitud muestra una lista vacía (
{}
).-
Comprende los resultados de Policy Simulator
Policy Simulator informa el impacto de un cambio propuesto en una política de permisos como una lista de cambios de acceso. Todo cambio de acceso representa un intento de acceso de los últimos 90 días que tendría un resultado diferente con la política de permisos propuesta en comparación con la política de permisos actual.
El simulador de política también enumera los errores que se produjeron durante la simulación, lo que te ayuda a identificar posibles brechas en la simulación.
La presentación de estos cambios y errores depende de la plataforma que uses.
Console
En la página de resultados de Policy Simulator, se muestran los resultados de la simulación en varias secciones diferentes:
Cambios en la política: En esta sección, se muestra el recurso para el que deseas proponer cambios en la política de permisos, los roles que propones quitar y los roles que propones agregar.
Esta sección también contiene un botón Ver diferencia de la política. Si haces clic en este botón, puedes ver cómo se ve la política de permisos del recurso antes y después de los cambios propuestos.
Cambios en los permisos: En esta sección, se incluyen los recuentos de permisos que se quitaron y se agregaron, lo que describe cómo cambiarían los permisos de la principal si aplicaras los cambios propuestos. Estos recuentos de permisos se calculan mediante la comparación de los permisos en los roles actuales de la principal con los permisos en los roles propuestos de la principal, ignorando los roles heredados.
En esta sección, también se incluye el botón Ver diferencia de los permisos. Si haces clic en este botón, puedes ver una comparación en paralelo de los permisos en los roles actuales y propuestos de la principal.
Cambios de acceso en los últimos 90 días: en esta sección, se muestra qué intentos de acceso de los últimos 90 días tienen diferentes resultados en la política de permisos propuesta y la política de permisos actual. En esta sección, se incluye un resumen de los cambios de acceso, y una tabla con resultados más detallados.
El resumen de los cambios de acceso enumera la cantidad de cada tipo de cambio de acceso, la cantidad de errores y resultados desconocidos y la cantidad de intentos de acceso que tienen el mismo resultado bajo la política de permisos propuesta y la actual. En el resumen, también se muestra cuántos permisos no se pudieron simular. Para obtener más información, consulta Errores en esta página.
En esta sección, también se incluye una tabla de cambios de acceso. En esta tabla, se enumera cada intento de acceso de los últimos 90 días que tiene resultados diferentes con la política de permisos propuesta y con la política actual. Cada entrada incluye el recurso al que la principal intentaba acceder, la fecha de la solicitud, la principal que realizó la solicitud, el permiso en la solicitud y el estado de acceso bajo la política de permisos propuesta en comparación con el estado de acceso bajo la política de permisos actual.
Existen varios tipos de cambios de acceso:
Cambio de acceso Detalles Se revocó el acceso La principal tenía acceso con la política de permisos actual, pero ya no tendrá acceso después del cambio propuesto. Es posible que se haya revocado el acceso Esto puede suceder por los siguientes motivos:
- La principal tenía acceso según la política de permisos actual, pero su acceso en virtud de la política de permisos propuesta es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero no tendrá acceso después del cambio propuesto.
Acceso obtenido La principal no tiene acceso con la política de permisos actual, pero tendrá acceso después del cambio propuesto. Acceso potencialmente obtenido Esto puede suceder por los siguientes motivos:
- La principal no tiene acceso con la política de permisos actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero tendrá acceso después del cambio propuesto.
Acceso desconocido El acceso de la principal tanto con la política de permisos actual como con la política de permisos propuesta es desconocido, y los cambios propuestos pueden afectar el acceso de la principal. Error Se produjo un error durante la simulación. Para obtener detalles adicionales sobre un cambio de acceso, haz clic en el cambio de acceso. Esto abrirá el panel Detalles de cambio de acceso, que muestra información adicional sobre el cambio de acceso, incluido el acceso existente del miembro, el acceso propuesto por la principal y detalles adicionales sobre el acceso.
gcloud
Cuando usas el comando replay-recent-access
, la respuesta de la CLI de gcloud contiene una lista de replayResults
.
Cada resultado de repetición describe un intento de acceso cuyo resultado habría sido diferente si la política de permisos propuesta se hubiera implementado en el momento del intento. Por ejemplo, el siguiente resultado de repetición muestra que my-user@example.com
usó el permiso resourcemanager.projects.update
en el pasado para realizar una acción en el proyecto my-project
. Sin embargo, si la política de permisos propuesta se hubiera implementado, se les habría denegado el acceso.
{ "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" } } }
Cada resultado de repetición tiene los siguientes campos:
accessTuple
: Es el intento de acceso con el que se relaciona el resultado. Este campo incluye el recurso, el permiso y la principal que se involucraron en el intento de acceso.lastSeenDate
: Es la fecha en la que se realizó el último intento de acceso.diff.accessDiff
oerror
: Si la repetición de un intento de acceso se realiza correctamente, el resultado contiene un campodiff.accessDiff
que informa la diferencia entre los resultados del intento de acceso según la política de permisos actual y la política de permisos propuesta. Si el intento de repetición no se realiza correctamente, el resultado de la repetición contendrá un campoerror
con una descripción del error. Para obtener más información sobre los errores de simulación, consulta Errores en esta página.
Cada diferencia de acceso tiene los siguientes componentes:
baseline
: Es el resultado de acceso cuando se usa la política de permisos actual. Esto se informa como uno de los siguientes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
. Si el resultado esUNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
, la respuesta también enumerará los errores asociados con la información desconocida, así como las políticas de permisos asociadas con ese error. Para obtener más información sobre los valoresUNKNOWN
, consulta Resultados desconocidos en esta página.simulated
: Es el resultado de acceso cuando se usa la política de permisos propuesta. Esto se informa como uno de los siguientes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
. Si el resultado esUNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
, la respuesta también enumerará los errores asociados con la información desconocida, así como las políticas de permisos asociadas con ese error. Para obtener más información sobre los valoresUNKNOWN
, consulta Resultados desconocidos en esta página.accessChange
: Es el cambio entre el estado de acceso del modelo de referencia y el estado de acceso simulado. Consulta la siguiente tabla para obtener una lista de valores posibles:Cambio de acceso Detalles ACCESS_REVOKED
La principal tenía acceso con la política de permisos actual, pero ya no tendrá acceso después del cambio propuesto. ACCESS_MAYBE_REVOKED
Esto puede suceder por los siguientes motivos:
- La principal tenía acceso según la política de permisos actual, pero su acceso en virtud de la política de permisos propuesta es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero no tendrá acceso después del cambio propuesto.
ACCESS_GAINED
La principal no tiene acceso con la política de permisos actual, pero tendrá acceso después del cambio propuesto. ACCESS_MAYBE_GAINED
Esto puede suceder por los siguientes motivos:
- La principal no tiene acceso con la política de permisos actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero tendrá acceso después del cambio propuesto.
UNKNOWN_CHANGE
El acceso de la principal tanto con la política de permisos actual como con la política de permisos propuesta es desconocido, y los cambios propuestos pueden afectar el acceso de la principal.
REST
Cuando llamas al método replays.results.list
, la respuesta contiene una lista de replayResults
.
Cada resultado de repetición describe un intento de acceso cuyo resultado habría sido diferente si la política de permisos propuesta se hubiera implementado en el momento del intento. Por ejemplo, el siguiente resultado de repetición muestra que my-user@example.com
usó el permiso resourcemanager.projects.update
en el pasado para realizar una acción en el proyecto my-project
. Sin embargo, si la política de permisos propuesta se hubiera implementado, se les habría denegado el acceso.
{ "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" } } }
Cada resultado de repetición tiene los siguientes campos:
accessTuple
: Es el intento de acceso con el que se relaciona el resultado. Este campo incluye el recurso, el permiso y la principal que se involucraron en el intento de acceso.lastSeenDate
: Es la fecha en la que se realizó el último intento de acceso.diff.accessDiff
oerror
: Si la repetición de un intento de acceso se realiza correctamente, el resultado contiene un campodiff.accessDiff
que informa la diferencia entre los resultados del intento de acceso según la política de permisos actual y la política de permisos propuesta. Si el intento de repetición no se realiza correctamente, el resultado de la repetición contendrá un campoerror
con una descripción del error. Para obtener más información sobre los errores de simulación, consulta Errores en esta página.
Cada diferencia de acceso tiene los siguientes componentes:
baseline
: Es el resultado de acceso cuando se usa la política de permisos actual. Esto se informa como uno de los siguientes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
. Si el resultado esUNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
, la respuesta también enumerará los errores asociados con la información desconocida, así como las políticas de permisos asociadas con ese error. Para obtener más información sobre los valoresUNKNOWN
, consulta Resultados desconocidos en esta página.simulated
: Es el resultado de acceso cuando se usa la política de permisos propuesta. Esto se informa como uno de los siguientes valores:GRANTED
,NOT_GRANTED
,UNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
. Si el resultado esUNKNOWN_CONDITIONAL
oUNKNOWN_INFO_DENIED
, la respuesta también enumerará los errores asociados con la información desconocida, así como las políticas de permisos asociadas con ese error. Para obtener más información sobre los valoresUNKNOWN
, consulta Resultados desconocidos en esta página.accessChange
: Es el cambio entre el estado de acceso del modelo de referencia y el estado de acceso simulado. Consulta la siguiente tabla para obtener una lista de valores posibles:Cambio de acceso Detalles ACCESS_REVOKED
La principal tenía acceso con la política de permisos actual, pero ya no tendrá acceso después del cambio propuesto. ACCESS_MAYBE_REVOKED
Esto puede suceder por los siguientes motivos:
- La principal tenía acceso según la política de permisos actual, pero su acceso en virtud de la política de permisos propuesta es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero no tendrá acceso después del cambio propuesto.
ACCESS_GAINED
La principal no tiene acceso con la política de permisos actual, pero tendrá acceso después del cambio propuesto. ACCESS_MAYBE_GAINED
Esto puede suceder por los siguientes motivos:
- La principal no tiene acceso con la política de permisos actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la principal con la política de permisos actual es desconocido, pero tendrá acceso después del cambio propuesto.
UNKNOWN_CHANGE
El acceso de la principal tanto con la política de permisos actual como con la política de permisos propuesta es desconocido, y los cambios propuestos pueden afectar el acceso de la principal.
Resultados desconocidos
Si un resultado de acceso es desconocido, significa que el simulador de política no tiene suficiente información para evaluar por completo el intento de acceso.
Console
Si un resultado de acceso es desconocido, el panel de detalles de cambio de acceso informa el motivo por el que se desconoce, además de las políticas de permisos, las membresías de grupo, las condiciones y los roles específicos que no pudo evaluar o a los que no pudo acceder.
Existen varios motivos por los que un resultado puede ser desconocido:
- Información del rol rechazado: la principal que ejecuta la simulación no tuvo permiso para ver los detalles de una o más de las funciones que se simularon.
- No se pudo acceder a la política: la principal que ejecuta la simulación no tuvo permiso para obtener la política de permisos de uno o más de los recursos involucrados en ella.
- Información de la membresía rechazada: la principal que ejecuta la simulación no tuvo permiso para ver los miembros de uno o más de los grupos incluidos en la política de permisos propuesta.
- Condición no admitida: Hay una vinculación de rol condicional en la política de permisos que se probó. Policy Simulator no admite condiciones, por lo que la vinculación no se pudo evaluar.
gcloud
En la CLI de gcloud, los resultados de la simulación informarán el motivo por el que se desconoce el resultado en la diferencia de acceso.
El motivo por el que se desconoce el resultado del acceso será uno de los siguientes:
UNKNOWN_INFO_DENIED
: El usuario no tiene permiso para acceder a la información necesaria a fin de evaluar el estado del acceso. Esto puede suceder por cualquiera de los siguientes motivos:- El usuario no tiene permiso para recuperar la política de permisos que se está simulando ni tiene permiso para recuperar políticas de permisos de los recursos en los registros de acceso.
- El usuario no tiene permiso para ver una membresía del grupo.
- El usuario no puede recuperar la información de la función necesaria.
Para saber qué información faltaba, consulta la información de error después del estado de acceso informado.
UNKNOWN_CONDITIONAL
: Hay una vinculación de rol condicional en la política que se prueba. Policy Simulator no admite condiciones, por lo que la vinculación no se pudo evaluar.
Si el resultado es desconocido, el campo de la política de permisos (baseline
o simulated
) contiene un campo errors
que describe por qué se desconoce la información, y un campo policies
que enumera las políticas de permisos asociadas con los errores. Para obtener más información sobre los errores, consulta Errores en esta página.
REST
En la API de REST, los resultados de la simulación informarán el motivo por el que se desconoce el resultado en la diferencia de acceso.
El motivo por el que se desconoce el resultado del acceso será uno de los siguientes:
UNKNOWN_INFO_DENIED
: El usuario no tiene permiso para acceder a la información necesaria a fin de evaluar el estado del acceso. Esto puede suceder por cualquiera de los siguientes motivos:- El usuario no tiene permiso para recuperar la política de permisos que se está simulando ni tiene permiso para recuperar políticas de permisos de los recursos en los registros de acceso.
- El usuario no tiene permiso para ver una membresía del grupo.
- El usuario no puede recuperar la información de la función necesaria.
Para saber qué información faltaba, consulta la información de error después del estado de acceso informado.
UNKNOWN_CONDITIONAL
: Hay una vinculación de rol condicional en la política que se prueba. Policy Simulator no admite condiciones, por lo que la vinculación no se pudo evaluar.
Si el resultado es desconocido, el campo de la política de permisos (baseline
o simulated
) contiene un campo errors
que describe por qué se desconoce la información, y un campo policies
que enumera las políticas de permisos asociadas con los errores. Para obtener más información sobre los errores, consulta Errores en esta página.
Errores
El simulador de política también informa los errores que se produjeron durante la simulación. Es importante revisar estos errores para comprender las posibles brechas en la simulación.
Console
Existen diversos tipos de errores que el simulador de política puede informar:
Errores de operación: La simulación no se pudo ejecutar. Policy Simulator informa los errores de operaciones en la parte superior de la página de resultados.
Si el mensaje de error indica que la simulación no se pudo ejecutar porque hay demasiados registros en tu organización o proyecto, no puedes ejecutar una simulación en el recurso.
Si aparece este error por otro motivo, intenta ejecutar la simulación nuevamente. Si aún no puedes ejecutar la simulación, envía un correo electrónico a policy-simulator-feedback@google.com.
Errores de repetición: La repetición de un único intento de acceso no fue exitosa, por lo que Policy Simulatorno pudo determinar si el resultado del intento de acceso cambiaría con la política de permisos propuesta.
La consola de Google Cloud enumera los errores de repetición en la tabla Cambios de acceso en los últimos 90 días. En el panel Detalles de cambio de acceso para cada error, se incluye un mensaje de error que te ayudará a comprender el problema, así como el recurso y el permiso que se simularon cuando se produjo el error.
Errores de tipos de recursos no admitidos: la política de permisos propuesta afecta los permisos asociados a un tipo de recurso no admitido que Policy Simulator no puede simular.
El simulador de política enumera estos permisos en los resultados de la simulación para que sepas qué permisos no pudo simular.
gcloud
En los resultados de la simulación de la CLI de gcloud, los errores pueden aparecer en dos lugares:
- El campo
replayResult.error
: Si el intento de repetición no se realizó de forma correcta, Policy Simulator informa el error en el camporeplayResult.error
. Si el resultado de una repetición contiene este campo, no habrá un campodiff
. - El campo
replayResult.diff.accessDiff.policy-type.errors
, en el que policy-type esbaseline
osimulated
. Si el intento de repetición se realizó de forma correcta, pero el resultado fueUNKNOWN_INFO_DENIED
oUNKNOWN_CONDITIONAL
, el simulador de políticas informa el motivo por el que se desconoce el resultado en este campo.
El simulador de política genera los siguientes tipos de errores:
Error | Código de error | Detalles |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | La simulación falló debido a un error interno. Para resolverlo, vuelve a ejecutar la simulación. Si la simulación aún falla, comunícate con policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | Policy Simulator no pudo volver a reproducir el intento de acceso porque contenía un permiso, un nombre de recurso o un principal no válidos. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | El simulador de políticas no pudo evaluar la membresía del principal en el grupo, ya que este tiene demasiados subgrupos. Este error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | El simulador de políticas no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para ver la membresía del grupo. Este error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar una política de permisos. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar los permisos en una función de IAM. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar la política de permisos de un recurso principal. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | La tupla de acceso contiene un tipo de principal que el simulador de políticas no admite. |
UNIMPLEMENTED_MEMBER |
12 | La tupla de acceso contiene una principal que el simulador de políticas no admite. |
UNIMPLEMENTED_CONDITION |
12 | La tupla de acceso contiene una condición que el Policy Simulator no admite. Este tipo de error está asociado con los cambios de acceso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | El recurso está asociado con demasiados registros de acceso, por lo que Policy Simulator no pudo ejecutar la simulación. Consulta Tamaño máximo de reproducción de registro en la página de conceptos de Policy Simulator para obtener más información. |
UNSUPPORTED_RESOURCE |
12 |
La política de permisos propuesta cambia los permisos asociados con tipos de recursos no compatibles. Este error aparece en el campo "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" } A fin de obtener más información sobre los tipos de recursos no compatibles, consulta Niveles de compatibilidad de los tipos de recursos en la página de conceptos de Policy Simulator. |
REST
En los resultados de la simulación de la API de REST, los errores pueden aparecer en dos lugares:
- El campo
replayResult.error
: Si el intento de repetición no se realizó de forma correcta, Policy Simulator informa el error en el camporeplayResult.error
. Si el resultado de una repetición contiene este campo, no habrá un campodiff
. - El campo
replayResult.diff.accessDiff.policy-type.errors
, en el que policy-type esbaseline
osimulated
. Si el intento de repetición se realizó de forma correcta, pero el resultado fueUNKNOWN_INFO_DENIED
oUNKNOWN_CONDITIONAL
, el simulador de políticas informa el motivo por el que se desconoce el resultado en este campo.
El simulador de política genera los siguientes tipos de errores:
Error | Código de error | Detalles |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | La simulación falló debido a un error interno. Para resolverlo, vuelve a ejecutar la simulación. Si la simulación aún falla, comunícate con policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | Policy Simulator no pudo volver a reproducir el intento de acceso porque contenía un permiso, un nombre de recurso o un principal no válidos. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | El simulador de políticas no pudo evaluar la membresía del principal en el grupo, ya que este tiene demasiados subgrupos. Este error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | El simulador de políticas no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para ver la membresía del grupo. Este error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar una política de permisos. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar los permisos en una función de IAM. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | Policy Simulator no pudo evaluar el acceso de un usuario porque el emisor no tiene permiso para recuperar la política de permisos de un recurso principal. Este tipo de error está asociado con los cambios de acceso UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | La tupla de acceso contiene un tipo de principal que el simulador de políticas no admite. |
UNIMPLEMENTED_MEMBER |
12 | La tupla de acceso contiene una principal que el simulador de políticas no admite. |
UNIMPLEMENTED_CONDITION |
12 | La tupla de acceso contiene una condición que el Policy Simulator no admite. Este tipo de error está asociado con los cambios de acceso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | El recurso está asociado con demasiados registros de acceso, por lo que Policy Simulator no pudo ejecutar la simulación. Consulta Tamaño máximo de reproducción de registro en la página de conceptos de Policy Simulator para obtener más información. |
UNSUPPORTED_RESOURCE |
12 |
La política de permisos propuesta cambia los permisos asociados con tipos de recursos no compatibles. Este error aparece en el campo "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" } A fin de obtener más información sobre los tipos de recursos no compatibles, consulta Niveles de compatibilidad de los tipos de recursos en la página de conceptos de Policy Simulator. |
Aplica un cambio de política simulado
Para aplicar un cambio simulado a una política de permisos, sigue estos pasos:
Console
Haz clic en Aplicar cambios propuestos.
En el cuadro de diálogo de confirmación, haz clic en Aplicar para confirmar el cambio.
gcloud
Usa el comando set-iam-policy
y proporciona una ruta al archivo JSON que contiene la política de permisos simulada que deseas aplicar:
gcloud resource-type set-iam-policy resource-id filepath
Ingresa los siguientes valores:
resource-type
: Es el tipo de recurso cuya política de permisos deseas actualizar. Por ejemplo,projects
resource-id
: El ID del recurso cuya política de permisos deseas actualizar. Por ejemplo,my-project
filepath
: La ruta al archivo que contiene la política de permisos actualizada.
La respuesta contiene la política de permisos actualizada. Si tratas a las políticas de permisos de IAM como código y las almacenas en un sistema de control de versión, debes almacenar la política de permisos que muestra la CLI de gcloud, no el archivo JSON que contiene la política de permisos simulada.
REST
Configura la política de permisos propuesta como la nueva política de permisos del recurso.
Para establecer la política de permisos en la solicitud como la nueva política de permisos del proyecto, usa el método projects.setIamPolicy
de la API de Resource Manager.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID
: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, comomy-project
.POLICY
: Una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta la Referencia de políticas.
Método HTTP y URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
Cuerpo JSON de la solicitud:
{ "policy": { POLICY } }
Para enviar tu solicitud, expande una de estas opciones:
La respuesta contiene la política de permisos actualizada:
Guarda los resultados de la simulación
Si usas la CLI de gcloud, puedes guardar los resultados de Policy Simulator como archivos JSON, YAML o CSV.
Guarda como JSON o YAML
Para guardar los resultados de una simulación como un archivo JSON o YAML, agrega la siguiente marca al comando replay-recent-access
cuando ejecutes la simulación:
--output=output-format > filename
Reemplaza los siguientes valores:
output-format
: El idioma del archivo exportado, ya seajson
oyaml
.filename
: Es el nombre para el archivo exportado.
Guarda como CSV
Para guardar un archivo CSV, agrega la siguiente marca al comando replay-recent-access
cuando ejecutes la simulación:
--flatten="diffs[]" --format=csv(output-fields) > filename
Reemplaza los siguientes valores:
output-fields
: Es una lista separada por comas de los campos que deseas incluir en los resultados exportados. Por ejemplo,diffs.accessTuple.principal, diffs.accessTuple.permission
filename
: Es el nombre para el archivo exportado.
De forma opcional, puedes agregar campos adicionales, como errors[]
, a la marca --flatten
. Agregar campos a la marca --flatten
permite que los elementos de esos campos se enumeren en líneas separadas en el archivo CSV.
El siguiente es un ejemplo de un comando replay-recent-access
que guarda los campos más importantes de los resultados de la simulación como el archivo 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
En este ejemplo, se simula proposed-policy.json
para el proyecto my-project
y se guardan los resultados como simulation-results.csv
. Este archivo CSV contiene los siguientes campos: principal, permiso, recurso, cambio de acceso, estado de acceso del modelo de referencia y estado de acceso simulado.
Para obtener más información sobre el formato con gcloud CLI, consulta Formatos.
¿Qué sigue?
- Obtén más información a fin de solucionar problemas de acceso para las principales existentes.
- Obtén información sobre cómo aplicar los privilegios mínimos con recomendaciones de funciones.