En esta página se describe cómo simular un cambio en una política de permisos de IAM mediante el simulador de políticas. También se explica cómo interpretar los resultados de la simulación y cómo aplicar la política de permiso simulada si lo desea.
Esta función solo evalúa el acceso en función de las políticas de permiso.
Para saber cómo simular cambios en otros tipos de políticas, consulta lo siguiente:
- Probar los cambios en las políticas de denegación con el simulador de políticas
- Probar los cambios en las políticas de organización con el simulador de políticas
- Probar los cambios en la política Límites de Acceso de Principales con el simulador de política
Antes de empezar
-
Enable the Policy Simulator and Resource Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Opcional: Consulta cómo funciona el simulador de políticas de permiso.
Permisos obligatorios
Antes de simular un cambio en una política de permiso, debes asegurarte de que tienes los permisos adecuados. Se necesitan 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 Gestión de Identidades y Accesos (IAM), consulta el artículo Descripción de los roles.
Permisos de recursos de destino necesarios
El recurso de destino de la simulación es el recurso cuyas políticas de permiso estás simulando.
Para obtener los permisos que necesitas para ejecutar una simulación, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el recurso de destino:
-
Visor 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 conceder roles, consulta el artículo Gestionar 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 se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para ejecutar una simulación, se necesitan los siguientes permisos:
-
cloudasset.assets.searchAllResources
-
policysimulator.replays.run
-
service.resource.getIamPolicy
, donderesource
es el tipo de recurso de destino yservice
es el nombre del servicio Google Cloud propietario de ese recurso.
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Permisos de recursos de host necesarios
El recurso host de una simulación es el proyecto, la carpeta o la organización que crea y ejecuta la simulación. No es necesario que el recurso de host esté relacionado con el recurso de destino de ninguna manera.
La forma de definir el recurso de host depende de la plataforma que utilices.
Consola
El recurso host es el proyecto, la carpeta o la organización que aparece en el selector de recursos.
Para cambiar el recurso host, elige otro proyecto, carpeta u organización en el selector de recursos.
gcloud
El recurso host es el proyecto de cuota actual. Para definir el proyecto de cuota, usa el comando gcloud auth application-default set-quota-project
.
REST
Especificas manualmente el recurso de host cada vez que envías una solicitud. Consulta los detalles en la sección Simular un cambio de política de esta página.
Para obtener los permisos que necesitas para ejecutar una simulación, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de simulador (roles/policysimulator.admin
) en el recurso host.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar 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 se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para ejecutar una simulación, se necesitan los siguientes permisos:
-
policysimulator.replayResults.list
-
policysimulator.replays.create
-
policysimulator.replays.get
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Permisos recomendados
Para obtener los resultados más completos de una simulación, te recomendamos que tengas determinados permisos de IAM y Google Workspace. Si no tiene algunos o todos estos permisos, puede seguir ejecutando una simulación. Sin embargo, si ejecutas una simulación sin estos permisos, puede que aumente el número de cambios de acceso desconocidos, ya que es posible que no puedas obtener información que podría influir en los resultados de la simulación.
Permisos de gestión de identidades y accesos recomendados
Te recomendamos que tengas el rol de revisor de seguridad
(roles/iam.securityReviewer
) de tu organización al ejecutar una simulación.
Si ya tienes el rol Administrador de seguridad (roles/iam.securityAdmin
), no es necesario que se te conceda ningún otro rol.
Estos roles 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 los proyectos, carpetas u organizaciones pertinentes en los que se hayan definido roles personalizados. Un proyecto, una carpeta o una organización son relevantes si son antecesores o descendientes del recurso cuya política de permiso estás simulando.service.resource.getIamPolicy
, donderesource
es el nombre de un tipo de recurso que puede tener una política de permiso yservice
es el nombre del servicioGoogle Cloud propietario de ese recurso.Cuando ejecutes una simulación, te recomendamos que tengas este permiso en cada recurso que cumpla estos criterios:
- Simulador de políticas admite el recurso.
El recurso tiene una política de permiso que puede afectar al acceso del usuario. Esto es así si se cumple una de las siguientes condiciones:
- El recurso es un descendiente del recurso cuya política de permiso estás simulando y aparece en los registros de acceso pertinentes.
- El recurso es un ancestro del recurso cuya política de permiso estás simulando.
Por ejemplo, supongamos que quieres simular una política de permiso para un proyecto. Si los registros de acceso incluyen un intento de acceso a un segmento de Cloud Storage del proyecto, necesitas el permiso
storage.buckets.getIamPolicy
en ese segmento. Si el proyecto tiene una carpeta superior con una política de permiso, también necesitas el permisoresourcemanager.folders.getIamPolicy
en esa carpeta.
Permisos recomendados de Google Workspace
Te recomendamos que tengas permiso para obtener información sobre los miembros de cada grupo de Google en la política de permisos original y en la propuesta.
Los superadministradores y los administradores de grupos de Google Workspace suelen tener acceso para ver la pertenencia a grupos. Si no eres superadministrador ni administrador de grupo, pide a tu administrador de Google Workspace que cree un rol de administrador de Google Workspace personalizado que incluya el privilegio groups.read
(situado en Privilegios de la API Admin) y que te lo conceda. Esto te permite ver los miembros de todos los grupos de tu dominio y simular de forma más eficaz los cambios en una política de permisos.
Simular un cambio de política
Simula un cambio en una política de permiso siguiendo estos pasos.
Consola
En el siguiente ejemplo se muestra cómo simular un cambio en una política de permiso de un proyecto. Sin embargo, puedes simular un cambio en una política de permiso para cualquier recurso que tenga una política de permiso.
Edita los permisos de un principal y, en lugar de hacer clic en Guardar, haz clic en Probar cambios:
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
Crea un cambio propuesto en la política de permisos editando los permisos de un principal:
- Busca el principal cuyo acceso quieras editar y haz clic en el botón Editar situado a la derecha.
- Edita el acceso de la cuenta principal añadiendo un nuevo rol o revocando o cambiando un rol ya asignado.
Para simular el cambio propuesto, haga clic en Probar cambios.
Después de unos minutos, la consola mostrará los resultados de la simulación como una lista de cambios de acceso. Google Cloud Consulta la sección Interpretar los resultados del simulador de políticas de esta página para obtener más información.
Si no ha habido ningún cambio en el acceso entre la política de permiso actual y la política de permiso simulada, la consola Google Cloud no mostrará ningún cambio en el acceso.
gcloud
Para simular un cambio en una política de permiso, sigue el patrón de lectura, modificación y escritura, pero simula la política de permiso en lugar de escribirla.
Lee la política de permisos actual ejecutando el siguiente comando:
gcloud resource-type get-iam-policy resource-id --format=format > filepath
Sustituye los siguientes valores:
resource-type
: el tipo de recurso para el que quieres simular una política de permiso. Por ejemplo,projects
.resource-id
: el ID del recurso cuya política de permiso quieres simular. Por ejemplo,my-project
.format
: el formato de la respuesta. Usa el valorjson
oyaml
.filepath
: ruta a un nuevo archivo de salida para la política de permiso.
Por ejemplo, el siguiente comando obtiene la política de permiso del 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 JSON o YAML devuelta por el comando
get-iam-policy
para reflejar los cambios que quieras simular.Hay varios tipos de cambios que puedes hacer en la política de permiso. Por ejemplo, puedes añadir o quitar un principal de una vinculación de rol, o quitar una vinculación de rol de la política de permiso.
Ejecuta el siguiente comando para simular el cambio en la política de permiso:
gcloud iam simulator replay-recent-access \ full-resource-name \ filepath \ --format=format
Sustituye los siguientes valores:
full-resource-name
: Nombre completo del recurso cuya política de permiso quieres simular.El nombre completo del recurso es un URI que consta del nombre del servicio y la ruta al recurso. Por ejemplo, si simulas una política de permiso para un proyecto, usarías
//cloudresourcemanager.googleapis.com/projects/project- id
, dondeproject-id
es el ID del proyecto cuya política de permiso estás simulando.Para ver una lista de los formatos de nombres de recursos completos, consulta Nombres de recursos completos.
filepath
: ruta al archivo que contiene la política de permisos modificada que quieres simular. Por ejemplo,~/proposed_policy.json
.format
: el formato de la respuesta. Por ejemplo,json
oyaml
.
Después de varios minutos, el comando muestra una lista de resultados de repetición que explica cómo cambiaría el acceso de la entidad principal si se aplicara la política de permiso propuesta. En estos resultados también se indican los errores que se han producido durante la simulación, incluidos los que se deben a tipos de recursos no admitidos.
Consulta la sección Interpretar los resultados del simulador de políticas de esta página para saber cómo leer los resultados. Para saber cómo guardar los resultados de la simulación en lugar de imprimirlos, consulte el artículo Guardar los resultados de una simulación.
A continuación se muestra una respuesta de ejemplo de una simulación de política de permiso que implica 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
en el proyectomy-project
, y sin duda dejaría de tener el permisoresourcemanager.projects.update
en 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 ha habido ningún cambio en el acceso entre la política de permiso actual y la política de permiso simulada, el comando imprime
No access changes found in the replay
.
REST
Para simular un cambio en una política de permiso, sigue el patrón de lectura, modificación y escritura, pero, en lugar de escribir la política de permiso, crea y ejecuta una simulación.
Lee la política de permisos del recurso.
Para obtener la política de permiso de un proyecto, usa el método
projects.getIamPolicy
de la API Resource Manager.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.POLICY_VERSION
: la versión de la política que se va a devolver. En las solicitudes se debe especificar la versión de la política más reciente, que es la versión 3. Consulta Especificar una versión de la política al obtener una política para obtener más información.
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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "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 permiso devuelta para reflejar los cambios que quieras simular.
Hay varios tipos de cambios que puedes hacer en la política de permiso. Por ejemplo, puedes añadir o quitar un principal de una vinculación de rol, o quitar una vinculación de rol de la política de permiso.
Crea una simulación o una repetición con la política de permitir modificada.
Para crear una repetición de un proyecto, una carpeta o una organización, usa el método
replays.create
de la API Policy Simulator.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
-
HOST_RESOURCE_TYPE
: el tipo de recurso que alojará la repetición. Este valor debe serprojects
,folders
oorganizations
. HOST_RESOURCE_ID
: el ID del recurso de host (por ejemplo,my-project
).-
TARGET_FULL_RESOURCE_NAME
: nombre completo del recurso cuya política quieres simular. Este recurso puede ser cualquier recurso que acepte políticas de gestión de identidades y accesos y no tiene por qué estar relacionado con el recurso host de ninguna manera.El nombre completo del recurso es un URI que consta del nombre del servicio y de la ruta al recurso. Por ejemplo, si simulas una política de un proyecto, usarías
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID
, dondePROJECT_ID
es el ID del proyecto cuya política estás simulando.Para ver una lista completa de los formatos de nombres de recursos, consulta Nombres de recursos completos.
-
POLICY
: la política que quieres simular. Para ver un ejemplo de una política, consulta la referencia de la política.Para simular varias políticas, incluya varios pares
"OBJECT_FULL_RESOURCE_NAME" : POLICY
en el cuerpo de la solicitud. PROJECT_ID
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas 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, despliega 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" } }
-
Consulta el método
operations.get
hasta que se complete la repetición.Para sondear una operación, te recomendamos que invoques repetidamente el método
operations.get
hasta que la respuesta incluya el campo"done": true
y el camponame
con el nombre de la repetición completada. Usa un tiempo de espera exponencial truncado para introducir un retraso entre cada solicitud.Para obtener el estado de una repetición, usa el método
operations.get
de la API Policy Simulator.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
OPERATION_NAME
: 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
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.
Método HTTP y URL:
GET https://policysimulator.googleapis.com/v1/OPERATION_NAME
Para enviar tu solicitud, despliega una de estas opciones:
Las operaciones en curso devuelven una respuesta como la siguiente:
{ "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 devuelven 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 } } } } }
Obtener los resultados de la repetición.
Para obtener los resultados de una repetición, usa el método
replays.results.list
de la API Policy Simulator.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
-
REPLAY_NAME
: el nombre de la repetición de la que quieras obtener resultados. Copia este valor del camporesponse.replay.name
de una respuestaoperations.get
. Incluya los prefijos de tipo de recurso y de ubicación. Por ejemplo,"projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b"
-
PAGE_SIZE
: opcional. Número máximo de resultados que se devolverán en esta solicitud. Si no se especifica, el servidor determinará el número de resultados que se devolverán. Si el número de resultados es mayor que el tamaño de página, la respuesta contiene un token de paginación que puedes usar para obtener la siguiente página de resultados. PAGE_TOKEN
: opcional. El token de paginación devuelto en una respuesta anterior de este método. Si se especifica, la lista de resultados empezará donde terminó la solicitud anterior.PROJECT_ID
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas 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, despliega una de estas opciones:
La respuesta contiene una lista de resultados que explica cómo cambiaría el acceso de la entidad si se aplicara la política propuesta. En estos resultados también se indican los errores que se han producido durante la simulación, sobre todo los que se deben a tipos de recursos no admitidos.
Consulta la sección Interpretar los resultados del simulador de políticas de esta página para saber cómo leerlos.
A continuación, se muestra un ejemplo de respuesta de una simulación de política que implica al usuario
my-user@example.com
. En este caso, si se aplicara el cambio propuesto,my-user@example.com
resourcemanager.projects.list
yresourcemanager.projects.get
my-project
ya no tendrían los permisosresourcemanager.projects.update
en 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 ha habido ningún cambio en el acceso entre la política de permiso actual y la política de permiso simulada, la solicitud devuelve una lista vacía (
{}
).-
Interpretar los resultados del simulador de políticas
El simulador de políticas informa del impacto de un cambio propuesto en una política de permiso como una lista de cambios de acceso. Cada 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 acceso propuesta que con la política de acceso actual.
El simulador de políticas también muestra los errores que se han producido durante la simulación, lo que te ayuda a identificar posibles lagunas en la simulación.
La presentación de estos cambios y errores depende de la plataforma que utilices.
Consola
En la página de resultados del simulador de políticas se muestran los resultados de la simulación en varias secciones:
Cambios en la política: en esta sección se muestra el recurso cuya política de permisos quieres modificar, los roles que quieres quitar y los roles que quieres añadir.
Esta sección también contiene el botón Ver diferencias de la política. Si haces clic en este botón, podrás ver cómo es la política de permisos del recurso antes y después de los cambios propuestos.
Cambios en los permisos: esta sección contiene el número de permisos que se han quitado y añadido, que describen cómo cambiarían los permisos de la entidad si aplicaras los cambios propuestos. Estos recuentos de permisos se calculan comparando los permisos de los roles actuales de la principal con los permisos de los roles propuestos de la principal, sin tener en cuenta los roles heredados.
Esta sección también contiene un botón Ver diferencias de permisos. Si haces clic en este botón, podrás ver una comparación de los permisos de los roles actuales y propuestos de la entidad de seguridad.
Cambios en el acceso en los últimos 90 días: en esta sección se muestran los intentos de acceso de los últimos 90 días que tienen resultados diferentes en la política de permiso propuesta y en la política de permiso 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 muestra el número de cada tipo de cambio de acceso, el número de errores y resultados desconocidos, y el número de intentos de acceso que tienen el mismo resultado en la política de permiso propuesta y en la política de permiso actual. El resumen también muestra cuántos permisos no se han podido simular. Para obtener más información, consulta la sección Errores de esta página.
Esta sección también contiene una tabla de cambios de acceso. En esta tabla se muestra cada intento de acceso de los últimos 90 días que tiene un resultado diferente en la política de permiso propuesta y en la política de permiso actual. Cada entrada incluye el recurso al que el principal intentaba acceder, la fecha de la solicitud, el principal que realiza la solicitud, el permiso de la solicitud y el estado del acceso en la política de permiso propuesta en comparación con el estado del acceso en la política de permiso actual.
Hay varios tipos de cambios de acceso:
Cambio en el acceso Detalles Acceso revocado La entidad principal tenía acceso según la política de permiso actual, pero ya no lo tendrá después del cambio propuesto. Acceso potencialmente revocado Este resultado puede producirse por los siguientes motivos:
- La entidad tenía acceso según la política de permiso actual, pero su acceso según la política de permiso propuesta es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero no tendrá acceso después del cambio propuesto.
Acceso adquirido La entidad principal no tenía acceso con la política de permiso actual, pero sí lo tendrá después del cambio propuesto. Acceso potencialmente adquirido Este resultado puede producirse por los siguientes motivos:
- El principal no tenía acceso con la política de permiso actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero tendrá acceso después del cambio propuesto.
Acceso desconocido El acceso de la entidad de seguridad según la política de permiso actual y la propuesta es desconocido, y los cambios propuestos podrían afectar al acceso de la entidad de seguridad. Error Se ha producido un error durante la simulación. Para ver más detalles sobre un cambio de acceso, haz clic en él. Se abrirá el panel Detalles del cambio en el acceso, que muestra información adicional sobre el cambio en el acceso, como el acceso actual de la cuenta principal, el acceso propuesto y más detalles sobre el resultado del cambio.
gcloud
Cuando usas el comando replay-recent-access
, la respuesta de gcloud CLI 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 permiso propuesta hubiera estado vigente en el momento del intento. Por ejemplo, el siguiente resultado de la 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 se hubiera aplicado la política de permiso propuesta, 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
: el intento de acceso al que se refiere el resultado. Este campo incluye el recurso, el permiso y la entidad principal que han participado en el intento de acceso.lastSeenDate
: la fecha en la que se hizo 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 de la diferencia entre los resultados del intento de acceso con la política de acceso actual y con la propuesta. Si el intento de repetición no se realiza correctamente, el resultado de la repetición contiene un campoerror
con una descripción del error. Para obtener más información sobre los errores de simulación, consulta la sección Errores de esta página.
Cada diferencia de acceso tiene los siguientes componentes:
baseline
: el resultado del acceso al usar la política de permiso actual. Se indica 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 mostrará los errores asociados a la información desconocida, así como las políticas de permiso asociadas a ese error. Para obtener más información sobre los valores deUNKNOWN
, consulta la sección Resultados desconocidos de esta página.simulated
: resultado del acceso al usar la política de permiso propuesta. Se indica 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 mostrará los errores asociados a la información desconocida, así como las políticas de permiso asociadas a ese error. Para obtener más información sobre los valores deUNKNOWN
, consulta la sección Resultados desconocidos de esta página.accessChange
: el cambio entre el estado de acceso de referencia y el estado de acceso simulado. Consulta la siguiente tabla para ver una lista de valores posibles:Cambio en el acceso Detalles ACCESS_REVOKED
La entidad principal tenía acceso según la política de permiso actual, pero ya no lo tendrá después del cambio propuesto. ACCESS_MAYBE_REVOKED
Este resultado puede producirse por los siguientes motivos:
- La entidad tenía acceso según la política de permiso actual, pero su acceso según la política de permiso propuesta es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero no tendrá acceso después del cambio propuesto.
ACCESS_GAINED
La entidad principal no tenía acceso con la política de permiso actual, pero sí lo tendrá después del cambio propuesto. ACCESS_MAYBE_GAINED
Este resultado puede producirse por los siguientes motivos:
- El principal no tenía acceso con la política de permiso actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero tendrá acceso después del cambio propuesto.
UNKNOWN_CHANGE
El acceso de la entidad de seguridad según la política de permiso actual y la propuesta es desconocido, y los cambios propuestos podrían afectar al acceso de la entidad de seguridad.
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 permiso propuesta hubiera estado vigente en el momento del intento. Por ejemplo, el siguiente resultado de la 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 se hubiera aplicado la política de permiso propuesta, 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
: el intento de acceso al que se refiere el resultado. Este campo incluye el recurso, el permiso y la entidad principal que han participado en el intento de acceso.lastSeenDate
: la fecha en la que se hizo 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 de la diferencia entre los resultados del intento de acceso con la política de acceso actual y con la propuesta. Si el intento de repetición no se realiza correctamente, el resultado de la repetición contiene un campoerror
con una descripción del error. Para obtener más información sobre los errores de simulación, consulta la sección Errores de esta página.
Cada diferencia de acceso tiene los siguientes componentes:
baseline
: el resultado del acceso al usar la política de permiso actual. Se indica 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 mostrará los errores asociados a la información desconocida, así como las políticas de permiso asociadas a ese error. Para obtener más información sobre los valores deUNKNOWN
, consulta la sección Resultados desconocidos de esta página.simulated
: resultado del acceso al usar la política de permiso propuesta. Se indica 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 mostrará los errores asociados a la información desconocida, así como las políticas de permiso asociadas a ese error. Para obtener más información sobre los valores deUNKNOWN
, consulta la sección Resultados desconocidos de esta página.accessChange
: el cambio entre el estado de acceso de referencia y el estado de acceso simulado. Consulta la siguiente tabla para ver una lista de valores posibles:Cambio en el acceso Detalles ACCESS_REVOKED
La entidad principal tenía acceso según la política de permiso actual, pero ya no lo tendrá después del cambio propuesto. ACCESS_MAYBE_REVOKED
Este resultado puede producirse por los siguientes motivos:
- La entidad tenía acceso según la política de permiso actual, pero su acceso según la política de permiso propuesta es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero no tendrá acceso después del cambio propuesto.
ACCESS_GAINED
La entidad principal no tenía acceso con la política de permiso actual, pero sí lo tendrá después del cambio propuesto. ACCESS_MAYBE_GAINED
Este resultado puede producirse por los siguientes motivos:
- El principal no tenía acceso con la política de permiso actual, pero su acceso después del cambio propuesto es desconocido.
- El acceso de la entidad de seguridad según la política de permiso actual es desconocido, pero tendrá acceso después del cambio propuesto.
UNKNOWN_CHANGE
El acceso de la entidad de seguridad según la política de permiso actual y la propuesta es desconocido, y los cambios propuestos podrían afectar al acceso de la entidad de seguridad.
Resultados desconocidos
Si el resultado de un acceso es desconocido, significa que el simulador de políticas no tenía suficiente información para evaluar completamente el intento de acceso.
Consola
Si se desconoce el resultado de un acceso, en el panel de detalles del cambio de acceso se indica el motivo por el que se desconoce, así como los roles, las políticas de permiso, las pertenencias a grupos y las condiciones específicos a los que no se ha podido acceder o que no se han podido evaluar.
Hay varios motivos por los que un resultado puede ser desconocido:
- Información del rol denegada: la entidad principal que ejecuta la simulación no tiene permiso para ver los detalles de uno o varios de los roles que se están simulando.
- No se puede acceder a la política: la entidad de seguridad que ejecuta la simulación no tiene permiso para obtener la política de permiso de uno o varios de los recursos implicados en la simulación.
- Información de pertenencia denegada: la entidad de seguridad que ejecuta la simulación no tenía permiso para ver los miembros de uno o varios de los grupos incluidos en la política de permiso propuesta.
- Condición no admitida: hay una vinculación de rol condicional en la política de permiso que se está probando. El simulador de políticas no admite condiciones, por lo que no se ha podido evaluar la vinculación.
gcloud
En la CLI de gcloud, los resultados de la simulación indicarán el motivo por el que el resultado es desconocido 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 para evaluar el estado de acceso. Esto puede deberse a uno de los siguientes motivos:- El usuario no tiene permiso para recuperar la política de permiso que se está simulando o no tiene permiso para recuperar políticas de permiso de los recursos de los registros de acceso.
- El usuario no tiene permiso para ver los miembros de un grupo.
- El usuario no puede obtener la información de rol necesaria.
Para saber qué información faltaba, consulta la información sobre el error que aparece después del estado de acceso notificado.
UNKNOWN_CONDITIONAL
: hay una vinculación de rol condicional en la política de permiso que se está probando. El simulador de políticas no admite condiciones, por lo que no se ha podido evaluar la vinculación.
Si el resultado es desconocido, el campo de la política de permiso (baseline
o simulated
) contiene un campo errors
que describe por qué se desconoce la información y un campo policies
que muestra las políticas de permiso asociadas a los errores. Para obtener más información sobre los errores, consulta la sección Errores de esta página.
REST
En la API REST, los resultados de la simulación indicarán el motivo por el que el resultado es desconocido 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 para evaluar el estado de acceso. Esto puede deberse a uno de los siguientes motivos:- El usuario no tiene permiso para recuperar la política de permiso que se está simulando o no tiene permiso para recuperar políticas de permiso de los recursos de los registros de acceso.
- El usuario no tiene permiso para ver los miembros de un grupo.
- El usuario no puede obtener la información de rol necesaria.
Para saber qué información faltaba, consulta la información sobre el error que aparece después del estado de acceso notificado.
UNKNOWN_CONDITIONAL
: hay una vinculación de rol condicional en la política de permiso que se está probando. El simulador de políticas no admite condiciones, por lo que no se ha podido evaluar la vinculación.
Si el resultado es desconocido, el campo de la política de permiso (baseline
o simulated
) contiene un campo errors
que describe por qué se desconoce la información y un campo policies
que muestra las políticas de permiso asociadas a los errores. Para obtener más información sobre los errores, consulta la sección Errores de esta página.
Errores
El simulador de políticas también informa de los errores que se hayan producido durante la simulación. Es importante que revises estos errores para entender las posibles deficiencias de la simulación.
Consola
El simulador de políticas puede informar de varios tipos de errores:
Errores de operación: no se ha podido ejecutar la simulación. El simulador de políticas informa de los errores de operación en la parte superior de la página de resultados.
Si el mensaje de error indica que no se ha podido ejecutar la simulación porque hay demasiados registros en tu proyecto u organización, no podrás ejecutar una simulación en el recurso.
Si recibes este error por otro motivo, prueba a volver a ejecutar la simulación. Si sigues sin poder ejecutar la simulación, ponte en contacto con policy-simulator-feedback@google.com.
Errores de repetición: no se ha podido repetir un intento de acceso, por lo que el simulador de políticas no ha podido determinar si el resultado del intento de acceso cambiaría con la política de permiso propuesta.
La Google Cloud consola muestra los errores de repetición en la tabla Cambios en el acceso en los últimos 90 días. El panel Detalles del cambio de acceso de cada error incluye un mensaje de error para ayudarte a entender el problema, así como el recurso y el permiso que se estaban simulando cuando se produjo el error.
Errores de tipo de recurso no admitido: la política de permiso propuesta afecta a los permisos asociados a un tipo de recurso no admitido, que el simulador de políticas no puede simular.
El Simulador de políticas muestra estos permisos en los resultados de la simulación para que sepas cuáles no ha podido simular.
gcloud
En los resultados de simulación de la CLI de gcloud, los errores pueden aparecer en dos lugares:
- Campo
replayResult.error
: si el intento de repetición no se ha completado correctamente, Simulador de políticas informa del error en el camporeplayResult.error
. Si un resultado de repetición contiene este campo, no contiene el campodiff
. - El campo
replayResult.diff.accessDiff.policy-type.errors
, donde policy-type esbaseline
osimulated
. Si el intento de repetición se ha realizado correctamente, pero el resultado ha sidoUNKNOWN_INFO_DENIED
oUNKNOWN_CONDITIONAL
, el Simulador de políticas indica el motivo por el que el resultado era desconocido en este campo.
El simulador de políticas genera los siguientes tipos de errores:
Error | Código de error | Detalles |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | No se ha podido realizar la simulación debido a un error interno. Para solucionarlo, prueba a ejecutar la simulación de nuevo. Si la simulación sigue fallando, ponte en contacto con policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | El simulador de políticas no ha podido 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 ha podido evaluar la pertenencia de la entidad al grupo porque el grupo tiene demasiados subgrupos. Este error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para ver la pertenencia al grupo. Este error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para recuperar una política de permiso. Este tipo de error está asociado a los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | Simulador de políticas
no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso
para obtener los permisos de un rol de gestión de identidades y accesos. Este tipo de error está asociado a los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para recuperar la política de permiso de un recurso antecesor. Este tipo de error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | La tupla de acceso contiene un tipo de principal que no admite el simulador de políticas. |
UNIMPLEMENTED_MEMBER |
12 | La tupla de acceso contiene una principal que no es compatible con el simulador de políticas. |
UNIMPLEMENTED_CONDITION |
12 | La tupla de acceso contiene una condición que no admite el simulador de políticas. Este tipo de error está asociado a los cambios de acceso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | El recurso está asociado a demasiados registros de acceso, por lo que el simulador de políticas no ha podido ejecutar la simulación. Consulta la sección Tamaño máximo de repetición de registros de la página de conceptos del Simulador de políticas para obtener más información. |
UNSUPPORTED_RESOURCE |
12 |
Los cambios propuestos en la política de permisos permiten cambiar los permisos asociados a 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" } Para obtener más información sobre los tipos de recursos no admitidos, consulta Niveles de asistencia para tipos de recursos en la página Conceptos del simulador de políticas. |
REST
En los resultados de la simulación de la API REST, los errores pueden aparecer en dos lugares:
- Campo
replayResult.error
: si el intento de repetición no se ha completado correctamente, Simulador de políticas informa del error en el camporeplayResult.error
. Si un resultado de repetición contiene este campo, no contiene el campodiff
. - El campo
replayResult.diff.accessDiff.policy-type.errors
, donde policy-type esbaseline
osimulated
. Si el intento de repetición se ha realizado correctamente, pero el resultado ha sidoUNKNOWN_INFO_DENIED
oUNKNOWN_CONDITIONAL
, el Simulador de políticas indica el motivo por el que el resultado era desconocido en este campo.
El simulador de políticas genera los siguientes tipos de errores:
Error | Código de error | Detalles |
---|---|---|
GENERIC_INTERNAL_ERROR |
13 | No se ha podido realizar la simulación debido a un error interno. Para solucionarlo, prueba a ejecutar la simulación de nuevo. Si la simulación sigue fallando, ponte en contacto con policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | El simulador de políticas no ha podido 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 ha podido evaluar la pertenencia de la entidad al grupo porque el grupo tiene demasiados subgrupos. Este error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para ver la pertenencia al grupo. Este error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para recuperar una política de permiso. Este tipo de error está asociado a los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | Simulador de políticas
no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso
para obtener los permisos de un rol de gestión de identidades y accesos. Este tipo de error está asociado a los cambios de acceso UNKNOWN_INFO_DENIED . |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | El simulador de políticas no ha podido evaluar el acceso de un usuario porque el llamador no tiene permiso para recuperar la política de permiso de un recurso antecesor. Este tipo de error está asociado a los cambios de acceso de UNKNOWN_INFO_DENIED . |
UNIMPLEMENTED_MEMBER_TYPE |
12 | La tupla de acceso contiene un tipo de principal que no admite el simulador de políticas. |
UNIMPLEMENTED_MEMBER |
12 | La tupla de acceso contiene una principal que no es compatible con el simulador de políticas. |
UNIMPLEMENTED_CONDITION |
12 | La tupla de acceso contiene una condición que no admite el simulador de políticas. Este tipo de error está asociado a los cambios de acceso UNKNOWN_CONDITIONAL . |
LOG_SIZE_TOO_LARGE |
8 | El recurso está asociado a demasiados registros de acceso, por lo que el simulador de políticas no ha podido ejecutar la simulación. Consulta la sección Tamaño máximo de repetición de registros de la página de conceptos del Simulador de políticas para obtener más información. |
UNSUPPORTED_RESOURCE |
12 |
Los cambios propuestos en la política de permisos permiten cambiar los permisos asociados a 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" } Para obtener más información sobre los tipos de recursos no admitidos, consulta Niveles de asistencia para tipos de recursos en la página Conceptos del simulador de políticas. |
Aplicar un cambio de política simulado
Para aplicar un cambio simulado a una política de permiso, sigue estos pasos:
Consola
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 contenga la política de permiso simulada que quieras aplicar:
gcloud resource-type set-iam-policy resource-id filepath
Proporciona los siguientes valores:
resource-type
: el tipo de recurso cuya política de permiso quieres actualizar. Por ejemplo,projects
.resource-id
: el ID del recurso cuya política de permiso quieres actualizar. Por ejemplo,my-project
.filepath
: ruta a un archivo que contiene la política de permisos actualizada.
La respuesta contiene la política de permiso actualizada. Si tratas las políticas de permisos de gestión de identidades y accesos como código y las almacenas en un sistema de control de versiones, debes almacenar la política de permisos que devuelve la CLI de gcloud, no el archivo JSON que contiene la política de permisos simulada.
REST
Define la política de permiso propuesta como la nueva política de permiso del recurso.
Para definir la política de permisos de la solicitud como la nueva política de permisos del proyecto, usa el método projects.setIamPolicy
de la API Resource Manager.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.POLICY
: representación JSON de la política que quieres definir. Para obtener más información sobre el formato de una política, consulta la referencia de la política.
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, despliega una de estas opciones:
La respuesta contiene la política de permiso actualizada.
Guardar 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.
Guardar como JSON o YAML
Para guardar los resultados de una simulación como un archivo JSON o YAML, añade la siguiente marca
al comando replay-recent-access
al ejecutar la simulación:
--output=output-format > filename
Sustituye los siguientes valores:
output-format
: el idioma del archivo exportado,json
oyaml
.filename
: el nombre del archivo exportado.
Guardar como CSV
Para guardar un archivo CSV, añade la siguiente marca al comando replay-recent-access
cuando ejecutes la simulación:
--flatten="diffs[]" --format=csv(output-fields) > filename
Sustituye los siguientes valores:
output-fields
: lista separada por comas de los campos que quieres incluir en los resultados exportados. Por ejemplo,diffs.accessTuple.principal, diffs.accessTuple.permission
.filename
: el nombre del archivo exportado.
De forma opcional, puedes añadir campos adicionales, como errors[]
, a la marca --flatten
. Si añades campos a la marca --flatten
, los elementos de esos campos se mostrarán en líneas independientes en el archivo CSV.
A continuación, se muestra un ejemplo de un comando replay-recent-access
que guarda los campos más importantes de los resultados de la simulación en 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 de referencia y estado de acceso simulado.
Para obtener más información sobre el formato con la CLI de gcloud, consulta formatos.
Siguientes pasos
- Consulta cómo solucionar problemas de acceso de las principales ya creadas.
- Consulta información sobre cómo implementar obligatoriamente los mínimos accesos con recomendaciones de roles.