Soluciona problemas de permisos de IAM

El solucionador de problemas de políticas te ayuda a comprender si un principal puede acceder a un recurso. Con una principal, un recurso y un permiso, el solucionador de problemas de políticas examina las políticas de permiso, de denegación y de límite de acceso de las principales (PAB) que afectan el acceso de la principal. Luego, te indica si, en función de esas políticas, el principal puede usar el permiso especificado para acceder al recurso. También, se enumeran las políticas relevantes y se explica cómo afectan el acceso de la principal.

Puedes acceder al solucionador de problemas de políticas con la consola de Google Cloud, Google Cloud CLI o la API de REST. Para las consultas básicas, el uso de la consola de Google Cloud suele ser más rápido. Para situaciones más complejas, considera usar gcloud CLI o la API de REST.

Antes de comenzar

  • Enable the Policy Troubleshooter API.

    Enable the API

Permisos necesarios

Para solucionar completamente los problemas de acceso de tus principales, necesitas los siguientes permisos.

Permisos para solucionar problemas de acceso de principales individuales

El solucionador de problemas de políticas analiza el acceso de una principal a un recurso según las políticas de permiso, de denegación, de límite de acceso de las principales y los roles que tienes permiso para ver. Si no tienes permiso para ver la política que se aplica a un recurso o si no tienes permiso para ver una función personalizada, es posible que no puedas saber si una principal tiene acceso.

Permisos para solucionar problemas de políticas de permiso y denegación

Para solucionar problemas relacionados con las políticas de permisos y denegación, necesitas permisos en la organización que contiene el recurso que quieres solucionar. Estos permisos te permiten ver las políticas de permiso y denegación que controlan el acceso al recurso.

Para obtener los permisos que necesitas para solucionar problemas de acceso de una principal, pídele a tu administrador que te otorgue los siguientes roles de IAM en la organización que contiene el recurso para el que deseas solucionar problemas de acceso:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Si no tienes permiso para ver las políticas de permisos y denegación de un recurso, los resultados de acceso de esas políticas son Unknown.

Permisos para solucionar problemas relacionados con las políticas de límite de acceso de las principales

Para solucionar problemas relacionados con las Políticas de Límite de Acceso de las Principales, necesitas permisos en la organización cuyo conjunto de principales incluye la principal. La forma en que identifiques esta organización depende del tipo de principal:

  • Cuentas de Google y Grupos de Google: La organización asociada con el dominio de Google Workspace que incluye al principal
  • Identidades federadas (identidades en grupos de identidades de personal o de Workload Identity): La organización que contiene el grupo de identidades que incluye al principal
  • Cuentas de servicio: La organización que contiene el proyecto en el que se creó la cuenta de servicio

Estos permisos te permiten ver las políticas de límite de acceso de las principales que controlan a qué puede acceder el principal.

Para obtener los permisos que necesitas para solucionar problemas de acceso de una principal, pídele a tu administrador que te otorgue los siguientes roles de IAM en la organización adecuada:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Si no tienes permiso para ver las políticas de límite de acceso de las principales que se aplican a una principal, los resultados de acceso para las políticas de límite de acceso de las principales son Unknown.

Permisos para solucionar problemas de acceso de los miembros del grupo

Si tus políticas de permisos y denegaciones incluyen grupos, necesitas el permiso de la API de Admin de Google Workspace groups.read para solucionar problemas de acceso de miembros individuales del grupo. Los administradores avanzados y los administradores de grupo tienen este permiso automáticamente. Para otorgar a un usuario que no es administrador avanzado ni administrador de grupo este permiso, crea un rol de administrador de Google Workspace personalizado que contenga el privilegio groups.read (ubicado en Privilegios de la API de administrador) y otorgárselo al usuario.

Si no tienes estos permisos, las vinculaciones de roles y las reglas de denegación que contienen grupos o dominios tienen un resultado de acceso de Desconocido, a menos que la vinculación de roles o la regla de denegación también incluyan la principal de forma explícita.

Permisos para solucionar problemas de acceso de los miembros del dominio

Si tus políticas de permiso y denegación incluyen una cuenta de Google Workspace o un dominio de Cloud Identity, debes ser administrador del dominio para solucionar problemas de acceso de miembros individuales del dominio.

Si no tienes estos permisos, las vinculaciones de roles y las reglas de denegación que contienen grupos o dominios tienen un resultado de acceso de Desconocido, a menos que la vinculación de roles o la regla de denegación también incluyan la principal de forma explícita.

Soluciona problemas de acceso

Para solucionar problemas de acceso, necesitas la siguiente información:

  • Principal: La dirección de correo electrónico que se debe verificar. La dirección de correo electrónico debe hacer referencia a un usuario o a una cuenta de servicio. No se admiten otros tipos de principales, como grupos, dominios, identidades de personal ni identidades de carga de trabajo.
  • Recurso: Es el nombre completo del recurso al que deseas solucionar problemas de acceso. Por ejemplo, para solucionar problemas de acceso al proyecto my-project, ingresa //cloudresourcemanager.googleapis.com/projects/my-project. Para otros tipos de recursos, consulta los ejemplos de nombres completos de recursos.

  • Permiso: El permiso que se debe verificar. Si usas la consola de Google Cloud, se muestra una lista de sugerencias a medida que escribes.

    Para solucionar problemas relacionados con un permiso, este debe ser aplicable al recurso de la solicitud. En otras palabras, debe ser posible usar ese permiso para acceder al recurso de alguna manera. Si el permiso no es aplicable para el recurso, la solicitud fallará. Por ejemplo, si intentas solucionar el problema del permiso compute.instances.get para un clúster de Google Kubernetes Engine, la solicitud falla porque el permiso compute.instances.get no se puede usar para acceder a los clústeres de Google Kubernetes Engine.compute.instance.get

    Para obtener una lista completa de los permisos, consulta la referencia de permisos.

Console

Para solucionar problemas de acceso, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Solucionador de problemas de políticas.

    Ir al solucionador de problemas de políticas

  2. Ingresa el correo electrónico del principal cuyo acceso deseas verificar.

  3. Ingresa el nombre completo del recurso que deseas verificar.

    Si no conoces el nombre completo del recurso, haz lo siguiente:

    • Si estás solucionando problemas de acceso a un proyecto, una carpeta o una organización, comienza a escribir para ver las opciones de autocompletado.
    • Si estás solucionando problemas de acceso para otro tipo de recurso, haz clic en Explorar para abrir el diálogo de búsqueda de recursos y, luego, busca el recurso:

      1. En el cuadro Seleccionar el alcance, selecciona un proyecto, una carpeta o una organización en la que deseas realizar la búsqueda.
      2. En el cuadro Tipo de recurso, selecciona los tipos de recursos que deseas buscar.
      3. En el cuadro Buscar recursos, ingresa una parte del nombre del recurso.
      4. En la sección de resultados, selecciona el recurso que quieres verificar.
      5. Haz clic en Seleccionar para elegir el recurso y cerrar el diálogo.
  4. Ingresa el permiso que deseas verificar.

    Si no conoces el nombre completo del permiso, comienza a escribir para ver las opciones de autocompletar.

  5. Opcional: Para comprobar varios recursos y permisos, selecciona Agregar otro par y repite el paso anterior.

  6. Haz clic en Verificar acceso.

gcloud

Para averiguar por qué un principal tiene o no un permiso de IAM, usa el comando gcloud beta policy-troubleshoot iam.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • VERSION: Opcional Es la versión del comando que se usará. Para solucionar problemas de acceso basados solo en políticas de permiso y denegación, no especifiques una versión. Para solucionar problemas de acceso en función de las políticas de límite de acceso permitido, denegado y principal, usa la versión beta.
  • EMAIL: La dirección de correo electrónico del principal al que pertenecen los permisos con problemas que deseas solucionar.
  • RESOURCE: El recurso en el que se otorga el permiso.
  • PERMISSION: El permiso con los problemas que deseas solucionar.

Ejecuta el comando gcloud beta policy-troubleshoot iam:

Linux, macOS o Cloud Shell

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION

Windows (PowerShell)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION

Windows (cmd.exe)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION

Deberías recibir una respuesta similar a la que figura a continuación:

Respuesta

{
  "accessTuple": {
    "conditionContext": {
      "destination": {},
      "effectiveTags": [
        {
          "namespacedTagKey": "project-1/tag-key-1",
          "namespacedTagValue": "project-1/tag-key-1/tag-value-1",
          "tagKey": "tagKeys/123456789012",
          "tagKeyParentName": "projects/123456789012",
          "tagValue": "tagValues/123456789012"
        },
      ],
      "request": {},
      "resource": {}
    },
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
    "permission": "bigtable.instances.create",
    "permissionFqdn": "bigtable.googleapis.com/instances.create",
    "principal": "service-account-3@project-1.iam.gserviceaccount.com"
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
              "title": "Resource-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 62,
                  "value": false
                }
              ],
              "value": false
            },
            "memberships": {
              "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
              "title": "Tag-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 73,
                  "value": true
                }
              ],
              "value": true
            },
            "memberships": {
              "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/compute.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-3@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/iam.serviceAccountTokenCreator",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "role": "roles/owner",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.projectIamAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.tagViewer",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
        "policy": {
          "bindings": [
            {
              "condition": {
                "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
                "title": "Resource-based condition"
              },
              "members": [
                "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "condition": {
                "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
                "title": "Tag-based condition"
              },
              "members": [
                "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "members": [
                "user:user-2@example.com"
              ],
              "role": "roles/compute.admin"
            },
            {
              "members": [
                "user:user-1@example.com",
                "user:user-3@example.com"
              ],
              "role": "roles/iam.serviceAccountTokenCreator"
            },
            {
              "members": [
                "user:user-2@example.com",
                "user:user-1@example.com"
              ],
              "role": "roles/owner"
            },
            {
              "members": [
                "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com",
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.projectIamAdmin"
            },
            {
              "members": [
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.tagViewer"
            }
          ],
          "etag": "BwYY6ttEMEY=",
          "version": 3
        },
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      },
    ],
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
            "policy": {
              "createTime": "2024-04-09T23:28:24.103203Z",
              "displayName": "Troubleshooter v3 prober non-tag deny policy",
              "etag": "MTgyMzk3MDY4OTY4MDE0ODg4OTY=",
              "kind": "DenyPolicy",
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F546942305807/denypolicies/deny-policy-1",
              "rules": [
                {
                  "denyRule": {
                    "deniedPermissions": [
                      "bigquery.googleapis.com/datasets.create"
                    ],
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com"
                    ]
                  }
                }
              ],
              "uid": "fab63b4d-ecfb-5f06-8a6d-602bf1be5062",
              "updateTime": "2024-05-20T23:29:38.428095Z"
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "ruleExplanations": [
              {
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "bigquery.googleapis.com/datasets.create": {
                    "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com": {
                    "membership": "MEMBERSHIP_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ]
          },
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "permissionDeniable": true,
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "overallAccessState": "CANNOT_ACCESS",
  "pabPolicyExplanation": {
    "explainedBindingsAndPolicies": [
      {
        "bindingAndPolicyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
        "explainedPolicy": {
          "explainedRules": [
            {
              "combinedResourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED",
              "effect": "ALLOW",
              "explainedResources": [
                {
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL",
                  "resource": "//cloudresourcemanager.googleapis.com/projects/project-2",
                  "resourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED"
                }
              ],
              "relevance": "HEURISTIC_RELEVANCE_NORMAL",
              "ruleAccessState": "PAB_ACCESS_STATE_NOT_ALLOWED"
            }
          ],
          "policy": {
            "createTime": "2024-04-09T17:40:51.627668Z",
            "details": {
              "enforcementVersion": "1",
              "rules": [
                {
                  "effect": "ALLOW",
                  "resources": [
                    "//cloudresourcemanager.googleapis.com/projects/project-2"
                  ]
                }
              ]
            },
            "displayName": "Troubleshooter v3 PAB Policy",
            "etag": "m64s4IgR80eDJDywuVA2DA==",
            "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "uid": "puid_11875429267422576641",
            "updateTime": "2024-04-09T17:40:51.627668Z"
          },
          "policyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
          "policyVersion": {
            "enforcementState": "PAB_POLICY_ENFORCEMENT_STATE_NOT_ENFORCED",
            "version": 1
          },
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "explainedPolicyBinding": {
          "conditionExplanation": {
            "evaluationStates": [
              {
                "end": 53,
                "value": true
              },
              {
                "end": 153,
                "start": 58,
                "value": false
              },
              {
                "end": 248,
                "start": 157,
                "value": false
              }
            ],
            "value": false
          },
          "policyBinding": {
            "condition": {
              "expression": "principal.type == 'iam.googleapis.com/ServiceAccount' && (principal.subject=='service-account-1@project-1.iam.gserviceaccount.com' || principal.subject=='service-account-2@project-1.iam.gserviceaccount.com')"
            },
            "createTime": "2024-04-09T17:51:13.504418Z",
            "displayName": "PAB Policy Binding on project-1 project",
            "etag": "W/\"hz9IKzHsIqvopqDRcVYDxQ==\"",
            "name": "projects/123456789012/locations/global/policyBindings/example-policy-binding",
            "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
            "policyUid": "puid_11875429267422576641",
            "target": {
              "principalSet": "//cloudresourcemanager.googleapis.com/projects/project-1"
            },
            "uid": "buid_1012746966204940289", 
            "updateTime": "2024-05-09T23:08:56.846355Z"
          },
          "policyBindingState": "POLICY_BINDING_STATE_NOT_ENFORCED",
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "relevance": "HEURISTIC_RELEVANCE_NORMAL"
      }
    ],
    "principalAccessBoundaryAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  }
}

REST

Para descubrir por qué un principal tiene o no un permiso de IAM, usa el método iam.troubleshoot de la API del solucionador de problemas de políticas.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • VERSION: Es la versión de la API que se usará para esta solicitud. Para solucionar problemas de acceso basados solo en políticas de permiso y denegación, usa v3. Para solucionar problemas de acceso basados en políticas de permiso, denegación y límite de acceso de las principales, usa v3beta.
  • EMAIL: La dirección de correo electrónico del principal al que pertenecen los permisos con problemas que deseas solucionar.
  • RESOURCE: El recurso en el que se otorga el permiso.
  • PERMISSION: El permiso con los problemas que deseas solucionar.
  • PROJECT_ID: Es el ID del proyecto que deseas usar para realizar la solicitud. Los ID de proyecto son strings alfanuméricas, como my-project.

Método HTTP y URL:

POST https://policytroubleshooter.googleapis.com/VERSION/iam:troubleshoot

Cuerpo JSON de la solicitud:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Comprende los resultados del solucionador de problemas

Console

La página de resultados contiene la siguiente información:

Detalles de la evaluación

La sección Detalles de la evaluación contiene un resumen del acceso para el que estás solucionando el problema, incluido el principal, el recurso y el permiso especificados. Si estás solucionando problemas relacionados con varios pares de permisos de recursos, puedes usar la lista Evaluación de acceso para alternar entre ellos.

Detalles de la política

La sección Detalles de la política contiene detalles sobre cómo las políticas de permiso, de denegación y de límite de acceso de las principales relevantes afectan el acceso de la principal.

Las políticas de límite de acceso de las principales relevantes incluyen todas las políticas de límite de acceso de las principales que están vinculadas a un conjunto de principales que incluye la principal.

Las políticas de permisos y denegación relevantes incluyen las siguientes:

  • La política de permiso del recurso
  • Las políticas de denegación del recurso, si las hay
  • Las políticas de permiso del proyecto superior, la carpeta y la organización del recurso, si las hay
  • Las políticas de denegación del proyecto superior, la carpeta y la organización del recurso, si las hay

Las políticas de permiso y denegación de los proyectos superiores, las carpetas y las organizaciones son relevantes debido a la herencia de políticas. Cuando adjuntas una política de permiso o denegación a un proyecto, una organización o una carpeta, esa política también se aplica a todos los recursos dentro de ese proyecto, organización o carpeta.

Por ejemplo, si una política de denegación para una organización indica que una principal no puede usar un permiso específico, la principal no puede usar ese permiso en ningún recurso dentro de la organización. Esta regla se aplica incluso si las carpetas y proyectos dentro de esa organización tienen políticas de denegación más permisivas o políticas de permiso que otorgan permiso a la principal.

Del mismo modo, si una política de permisos para un proyecto le da a una principal un permiso específico, la principal tiene ese permiso para cualquier recurso dentro del proyecto, siempre que no se le deniegue ese permiso.

La sección Detalles de la política contiene las siguientes secciones:

Estado de acceso

En la sección Estado de acceso, se resumen los resultados de cada tipo de política (políticas de límite de acceso de las principales, políticas de denegación y políticas de permiso) y se indica el resultado general. El resultado indica si el principal puede usar el permiso para acceder al recurso, según las políticas relevantes.

Para que un usuario pueda usar el permiso de acceso al recurso, todos los tipos de políticas deben permitir el acceso. Para obtener más información, consulta Evaluación de políticas.

Política de límite de acceso de las principales

En la sección Política de límite de acceso de las principales, puedes ver todas las políticas de límite de acceso de las principales a las que está sujeto el principal y las vinculaciones de políticas que vinculan estas políticas al principal.

En el panel Políticas, se enumeran todas las políticas vinculadas a un conjunto de principales que incluye el principal. Junto a cada política, hay un ícono que indica cómo esa política afecta el acceso de la principal.

Las políticas de límite de acceso de las principales pueden afectar el acceso de una principal de las siguientes maneras:

  • La principal es apta para acceder al recurso: La política de límite de acceso de las principales se aplica a la principal y una de sus reglas contiene el recurso consultado.
  • La principal no es apta para acceder al recurso: La política de límite de acceso de las principales se aplica a la principal, pero el recurso consultado no se encuentra en las reglas de esa política.
  • No se aplican: Las políticas de límite de acceso de las principales no se aplican en las siguientes situaciones:

    • IAM no aplica el permiso especificado en la versión de aplicación de la política de límite de acceso de las principales. Como resultado, la política de límite de acceso de las principales no puede bloquear el acceso.
    • Debido a una condición en la vinculación de políticas, la vinculación o la política de límite de acceso de las principales no se aplica a la principal.
    • Una política de límite de acceso de las principales no tiene reglas.

    Si no se aplica una política de límite de acceso de las principales, no puede afectar si la principal puede acceder al recurso.

Para ver las reglas y vinculaciones asociadas con una Política de Límite de Acceso de las Principales, haz clic en el nombre de la política. En el panel adyacente al panel Políticas, se muestran los detalles de la política.

Para ver las reglas de la política, haz clic en la pestaña Reglas de límite. En esta pestaña, se muestra una tabla de las reglas relevantes de la política de límite de acceso de las principales.

Una regla de límite de acceso de las principales es relevante si afecta el resultado general de la consulta del solucionador de problemas de políticas. Como resultado, las reglas relevantes varían según los resultados del Solucionador de problemas de políticas. Por ejemplo, considera las siguientes situaciones:

  • El Solucionador de problemas de políticas indica que el principal puede acceder al recurso. Como resultado, las reglas relevantes son aquellas que hacen que la principal sea apta para acceder al recurso.
  • El solucionador de problemas de políticas indica que el principal no puede acceder al recurso. Sin embargo, según las políticas de límite de acceso de las principales relevantes, la principal es apta para acceder al recurso. Como resultado, no hay ninguna regla relevante, ya que las políticas de límite de acceso de las principales no son el motivo por el que la principal no puede acceder al recurso.
  • El solucionador de problemas de políticas indica que la principal no puede acceder al recurso. Además, según las políticas de límite de acceso de las principales relevantes, la principal no es apta para acceder al recurso. Como resultado, las reglas relevantes son aquellas que no hacen que la principal sea apta para acceder al recurso.

Para ver todas las reglas de límite de acceso de las principales en una política, desmarca la casilla de verificación Mostrar solo las reglas y vinculaciones relevantes.

La columna Resultados en la tabla de reglas de límite indica si la regra de límite de acceso de las principales contiene el recurso consultado. Para ver más detalles sobre la regla, haz clic en Ver detalles de la regla.

Para ver las vinculaciones de la política, haz clic en la pestaña Vinculaciones. En esta pestaña, se muestra una tabla de las vinculaciones de políticas relevantes para la política de límite de acceso de las principales seleccionada.

Una vinculación de políticas es relevante si aplica de manera eficaz la política de límite de acceso de las principales a la principal consultada. Para que una vinculación de políticas aplique una política de límite de acceso de las principales a una principal, se debe cumplir lo siguiente:

  • El principal establecido en la vinculación de políticas debe incluir el principal consultado.
  • Todas las condiciones de la vinculación de políticas deben evaluarse como true para el principal consultado.

Para ver todas las vinculaciones de políticas con conjuntos de principales que incluyan el principal consultado, independientemente de si el principal consultado cumple con la condición en la vinculación, desmarca la casilla de verificación Mostrar solo reglas y vinculaciones relevantes.

La columna Hallazgos en la tabla de vinculaciones indica si la vinculación se aplica para el principal consultado. Para ver más detalles sobre la vinculación de políticas, haz clic en Ver detalles de vinculación.

Política de denegación

En la sección Política de denegación, puedes ver todas las políticas de denegación relevantes, identificar las reglas de denegación que deniegan el acceso a la principal y comprender por qué una regla de denegación le niega o no el permiso a la principal.

En el panel Recursos con políticas de denegación, se enumeran todas las políticas de denegación relevantes, organizadas por los recursos a los que están adjuntas. Junto a cada política de denegación, hay una evaluación de acceso. Esta evaluación solo se aplica a esa política de denegación; no refleja ningún acceso de las políticas heredadas. Si no tienes permiso para ver la política de denegación de un recurso, la lista de recursos no lo incluirá ni a él ni a sus políticas de denegación.

Para ver las reglas de denegación relevantes en estas políticas, haz clic en una de ellas. Para ver todas las reglas de denegación en las políticas de denegación de un recurso, haz clic en un recurso. Las reglas de denegación aparecen en el panel Deny rules. Este panel contiene una tabla con todas las reglas de denegación con la principal o el permiso consultados para el recurso o la política de denegación que seleccionaste.

La columna Acceso indica si la regla de denegación le niega el permiso al principal. Para ver más detalles sobre la regla de denegación, haz clic en Ver regla de denegación en la fila de esa regla.

Política de permisos

En la sección Política de permisos, puedes navegar por todas las políticas de permisos relevantes, identificar las vinculaciones de roles que otorgan acceso a la principal y comprender por qué una vinculación de roles le otorga o no el permiso a la principal.

En el panel Recursos, se enumeran el recurso especificado y sus ancestros. Junto a cada recurso, se muestra una evaluación de acceso. Esta evaluación solo se aplica a la política de permisos de ese recurso; no refleja ningún acceso de las políticas heredadas. Si no tienes permiso para ver la política de permisos de un recurso, la lista de recursos no lo incluirá.

Para ver las vinculaciones de roles relevantes en la política de permisos de un recurso y ver si le otorgan o no el permiso al principal, haz clic en el recurso. Las vinculaciones de roles de la política de permisos aparecen en el panel Vinculaciones de roles.

El panel Vinculaciones de roles contiene una tabla de vinculaciones de roles en la política de permisos del recurso seleccionado. De forma predeterminada, la tabla solo contiene vinculaciones de roles que incluyen un rol con el permiso especificado. Si la principal no tiene acceso, la tabla también muestra vinculaciones de roles con roles personalizados editables. Para ver todas las vinculaciones de roles, desmarca la casilla de verificación Mostrar solo las vinculaciones relevantes.

La columna Acceso indica si la vinculación de roles le otorga el permiso a la principal. Para ver más detalles sobre la vinculación de roles, haz clic en Ver detalles de la vinculación en la fila de esa vinculación de roles.

gcloud

La respuesta contiene cuatro secciones principales: una descripción de la tupla de acceso en la solicitud, los resultados de la evaluación de la política de permisos, los resultados de la evaluación de la política de denegación y el estado de acceso general.

  • accessTuple: Es una descripción de la tupla de acceso en la solicitud, incluido cualquier contexto de condición que hayas proporcionado. En esta sección, también se incluye un resumen de las etiquetas que se aplican al recurso.
  • allowPolicyExplanation: Es un resumen de si las políticas de permisos relevantes otorgan el permiso al principal, seguido de una lista de políticas de permisos y sus vinculaciones de roles.

    Para cada política de permisos, la respuesta enumera todas las vinculaciones de roles en la política y las evalúa en función de los siguientes criterios:

    • Indica si la vinculación de roles incluye el permiso.
    • Indica si la vinculación de roles incluye al principal.
    • Si se cumplen las condiciones de la vinculación de roles, si las hay.

    Luego, la respuesta imprime el texto JSON completo de la política de permisos.

  • denyPolicyExplanation: Es un resumen de si las políticas de denegación relevantes le niegan el permiso al principal, seguido de una lista de recursos con políticas de denegación. Para cada recurso, la respuesta enumera todas las políticas de denegación asociadas al recurso.

    Para cada política de denegación, la respuesta imprime los metadatos de la política, enumera las reglas de denegación de la política y, luego, evalúa cada regla en función de los siguientes criterios:

    • Si la regla de denegación incluye el permiso.
    • Indica si el permiso aparece como una excepción en la regla de denegación.
    • Si la regla de denegación incluye el principal
    • Indica si el principal aparece como una excepción en la regla de denegación.
    • Si se cumplen las condiciones de la regla de denegación, si corresponde.
  • overallAccessState: Indica si el principal puede usar el permiso especificado para acceder al recurso especificado en función de las políticas de permisos, de denegación y de límite de acceso de las principales relevantes.

    Las políticas de límite de acceso de las principales relevantes incluyen todas las políticas de límite de acceso de las principales que están vinculadas a un conjunto de principales que incluye la principal.

    Las políticas de permisos y denegación relevantes incluyen las siguientes:

    • La política de permiso del recurso
    • Las políticas de denegación del recurso, si las hay
    • Las políticas de permiso del proyecto superior, la carpeta y la organización del recurso, si las hay
    • Las políticas de denegación del proyecto superior, la carpeta y la organización del recurso, si las hay

    Las políticas de permiso y denegación de los proyectos superiores, las carpetas y las organizaciones son relevantes debido a la herencia de políticas. Cuando adjuntas una política de permiso o denegación a un proyecto, una organización o una carpeta, esa política también se aplica a todos los recursos dentro de ese proyecto, organización o carpeta.

    Por ejemplo, si una política de denegación para una organización indica que una principal no puede usar un permiso específico, la principal no puede usar ese permiso en ningún recurso dentro de la organización. Esta regla se aplica incluso si las carpetas y proyectos dentro de esa organización tienen políticas de denegación más permisivas o políticas de permiso que otorgan permiso a la principal.

    Del mismo modo, si una política de permisos para un proyecto le da a una principal un permiso específico, la principal tiene ese permiso para cualquier recurso dentro del proyecto, siempre que no se le deniegue ese permiso.

    Para que un usuario pueda usar el permiso de acceso al recurso, todos los tipos de políticas deben permitir el acceso. Para obtener más información, consulta Evaluación de políticas.

  • pabPolicyExplanation: Es un resumen de si las políticas de límite de acceso de las principales relevantes permiten que la principal acceda al recurso, seguido de las vinculaciones de políticas de límite de acceso de las principales y las políticas de límite de acceso de las principales relevantes.

    Las políticas de límite de acceso de las principales pueden permitir el acceso, no permitirlo o no aplicarse. Las políticas de límite de acceso de las principales no se aplican en las siguientes situaciones:

    • IAM no aplica el permiso especificado en la versión de aplicación de la política de límite de acceso de las principales. Como resultado, la política de límite de acceso de las principales no puede bloquear el acceso.
    • Debido a una condición en la vinculación de políticas, la vinculación o la política de límite de acceso de las principales no se aplica a la principal.
    • Una política de límite de acceso de las principales no tiene reglas.

    Si no se aplica una política de límite de acceso de las principales, no puede afectar si la principal puede acceder al recurso.

    La respuesta también muestra todas las vinculaciones de políticas que incluyen el principal y los detalles de la política de límite de acceso de las principales en cada una de esas vinculaciones de políticas:

    • Para cada vinculación de política de límite de acceso de las principales, la respuesta imprime si la vinculación de políticas se aplica para el principal y, luego, imprime el texto de la vinculación de políticas. Se aplica una vinculación de políticas si el principal establecido en la vinculación incluye el principal consultado y si la condición en la vinculación de políticas se evalúa como true para el principal consultado. Si la vinculación de políticas no se aplica, la política no puede afectar si el principal puede acceder al recurso.
    • Para cada política de límite de acceso de las principales, la respuesta imprime lo siguiente:

      • Si la política permite el acceso, no lo permite o no se aplica.
      • Es la versión de aplicación de la política. Este número de versión determina si IAM aplica esta política de límite de acceso de las principales para el permiso consultado. Si el permiso no se aplica, la política no puede afectar si el principal puede acceder al recurso.
      • Las reglas de la Política de Límite de Acceso de las Principales y si cada regla permite el acceso Para cada regla, la respuesta indica si el recurso consultado se incluye en la regla.

        Un recurso se incluye en una regla si se cumple una de las siguientes condiciones:

        • El recurso aparece en la regla. Solo los recursos de Resource Manager (proyectos, carpetas y organizaciones) se pueden enumerar directamente en las reglas de límite de acceso de la principal.
        • En la regla, se incluye uno de los ancestros del recurso (es decir, un proyecto, una carpeta o una organización por encima del recurso en la jerarquía de recursos).

Muchos objetos de la respuesta también tienen un campo relevance. El valor de este campo indica cuánto contribuye ese objeto al estado de acceso general. El campo relevance puede tener los siguientes valores:

  • HEURISTIC_RELEVANCE_HIGH: Indica que el objeto tiene un gran impacto en el resultado. En otras palabras, es probable que quitar el objeto cambie el estado de acceso general. Por ejemplo, una vinculación de roles que le otorgue al principal el permiso especificado tendría este valor de relevancia.

  • HEURISTIC_RELEVANCE_NORMAL: Indica que el objeto tiene un impacto limitado en el resultado. En otras palabras, es poco probable que quitar el objeto cambie el estado de acceso general. Por ejemplo, una regla de denegación que no contenga el permiso o el principal tendría este valor de relevancia.

REST

La respuesta contiene cuatro secciones principales: el estado de acceso general, una descripción de la tupla de acceso en la solicitud, los resultados de la evaluación de la política de permisos y los resultados de la evaluación de la política de denegación.

  • overallAccessState: Indica si el principal puede usar el permiso especificado para acceder al recurso especificado en función de las políticas de permisos, de denegación y de límite de acceso de las principales relevantes.

    Las políticas de límite de acceso de las principales relevantes incluyen todas las políticas de límite de acceso de las principales que están vinculadas a un conjunto de principales que incluye la principal.

    Las políticas de permisos y denegación relevantes incluyen las siguientes:

    • La política de permiso del recurso
    • Las políticas de denegación del recurso, si las hay
    • Las políticas de permiso del proyecto superior, la carpeta y la organización del recurso, si las hay
    • Las políticas de denegación del proyecto superior, la carpeta y la organización del recurso, si las hay

    Las políticas de permiso y denegación de los proyectos superiores, las carpetas y las organizaciones son relevantes debido a la herencia de políticas. Cuando adjuntas una política de permiso o denegación a un proyecto, una organización o una carpeta, esa política también se aplica a todos los recursos dentro de ese proyecto, organización o carpeta.

    Por ejemplo, si una política de denegación para una organización indica que una principal no puede usar un permiso específico, la principal no puede usar ese permiso en ningún recurso dentro de la organización. Esta regla se aplica incluso si las carpetas y proyectos dentro de esa organización tienen políticas de denegación más permisivas o políticas de permiso que otorgan permiso a la principal.

    Del mismo modo, si una política de permisos para un proyecto le da a una principal un permiso específico, la principal tiene ese permiso para cualquier recurso dentro del proyecto, siempre que no se le deniegue ese permiso.

    Para que un usuario pueda usar el permiso de acceso al recurso, todos los tipos de políticas deben permitir el acceso. Para obtener más información, consulta Evaluación de políticas.

  • accessTuple: Es una descripción de la tupla de acceso en la solicitud, incluido cualquier contexto de condición que hayas proporcionado. En esta sección, también se incluye un resumen de las etiquetas que se aplican al recurso.
  • allowPolicyExplanation: Es un resumen de si las políticas de permisos relevantes otorgan el permiso al principal, seguido de una lista de políticas de permisos y sus vinculaciones de roles.

    Para cada política de permisos, la respuesta enumera todas las vinculaciones de roles en la política y las evalúa en función de los siguientes criterios:

    • Indica si la vinculación de roles incluye el permiso.
    • Indica si la vinculación de roles incluye al principal.
    • Si se cumplen las condiciones de la vinculación de roles, si las hay.

    Luego, la respuesta imprime el texto JSON completo de la política de permisos.

  • denyPolicyExplanation: Es un resumen de si las políticas de denegación relevantes le niegan el permiso al principal, seguido de una lista de recursos con políticas de denegación. Para cada recurso, la respuesta enumera todas las políticas de denegación asociadas al recurso.

    Para cada política de denegación, la respuesta imprime los metadatos de la política, enumera las reglas de denegación de la política y, luego, evalúa cada regla en función de los siguientes criterios:

    • Si la regla de denegación incluye el permiso.
    • Indica si el permiso aparece como una excepción en la regla de denegación.
    • Si la regla de denegación incluye el principal
    • Indica si el principal aparece como una excepción en la regla de denegación.
    • Si se cumplen las condiciones de la regla de denegación, si corresponde.
  • pabPolicyExplanation: Es un resumen de si las políticas de límite de acceso de las principales relevantes permiten que la principal acceda al recurso, seguido de las vinculaciones de políticas de límite de acceso de las principales y las políticas de límite de acceso de las principales relevantes.

    Las políticas de límite de acceso de las principales pueden permitir el acceso, no permitirlo o no aplicarse. Las políticas de límite de acceso de las principales no se aplican en las siguientes situaciones:

    • IAM no aplica el permiso especificado en la versión de aplicación de la política de límite de acceso de las principales. Como resultado, la política de límite de acceso de las principales no puede bloquear el acceso.
    • Debido a una condición en la vinculación de políticas, la vinculación o la política de límite de acceso de las principales no se aplica a la principal.
    • Una política de límite de acceso de las principales no tiene reglas.

    Si no se aplica una política de límite de acceso de las principales, no puede afectar si la principal puede acceder al recurso.

    La respuesta también muestra todas las vinculaciones de políticas que incluyen el principal y los detalles de la política de límite de acceso de las principales en cada una de esas vinculaciones de políticas:

    • Para cada vinculación de política de límite de acceso de las principales, la respuesta imprime si la vinculación de políticas se aplica para el principal y, luego, imprime el texto de la vinculación de políticas. Se aplica una vinculación de políticas si el principal establecido en la vinculación incluye el principal consultado y si la condición en la vinculación de políticas se evalúa como true para el principal consultado. Si la vinculación de políticas no se aplica, la política no puede afectar si el principal puede acceder al recurso.
    • Para cada política de límite de acceso de las principales, la respuesta imprime lo siguiente:

      • Si la política permite el acceso, no lo permite o no se aplica.
      • Es la versión de aplicación de la política. Este número de versión determina si IAM aplica esta política de límite de acceso de las principales para el permiso consultado. Si el permiso no se aplica, la política no puede afectar si el principal puede acceder al recurso.
      • Las reglas de la Política de Límite de Acceso de las Principales y si cada regla permite el acceso Para cada regla, la respuesta indica si el recurso consultado se incluye en la regla.

        Un recurso se incluye en una regla si se cumple una de las siguientes condiciones:

        • El recurso aparece en la regla. Solo los recursos de Resource Manager (proyectos, carpetas y organizaciones) se pueden enumerar directamente en las reglas de límite de acceso de la principal.
        • En la regla, se incluye uno de los ancestros del recurso (es decir, un proyecto, una carpeta o una organización por encima del recurso en la jerarquía de recursos).

Muchos objetos de la respuesta también tienen un campo relevance. El valor de este campo indica cuánto contribuye ese objeto al estado de acceso general. El campo relevance puede tener los siguientes valores:

  • HEURISTIC_RELEVANCE_HIGH: Indica que el objeto tiene un gran impacto en el resultado. En otras palabras, es probable que quitar el objeto cambie el estado de acceso general. Por ejemplo, una vinculación de roles que le otorgue al principal el permiso especificado tendría este valor de relevancia.

  • HEURISTIC_RELEVANCE_NORMAL: Indica que el objeto tiene un impacto limitado en el resultado. En otras palabras, es poco probable que quitar el objeto cambie el estado de acceso general. Por ejemplo, una regla de denegación que no contenga el permiso o el principal tendría este valor de relevancia.

Soluciona problemas de vinculaciones de funciones condicionales

El Solucionador de problemas de políticas soluciona automáticamente los problemas relacionados con las vinculaciones de roles condicionales y las reglas de denegación según las etiquetas. También soluciona automáticamente los problemas de las vinculaciones de políticas de límite de acceso de las principales con condiciones basadas en principales.

Para solucionar problemas relacionados con otros tipos de vinculaciones de roles condicionales o reglas de denegación condicionales, el solucionador de problemas de políticas necesita contexto adicional sobre la solicitud. Por ejemplo, para solucionar problemas con las condiciones basadas en atributos de fecha y hora, el solucionador de problemas de políticas necesita el horario de la solicitud.

En gcloud CLI y la API de REST, proporcionas este contexto adicional manualmente.

En la consola de Google Cloud, puedes proporcionar este contexto adicional si solucionas problemas directamente desde cualquier registro de auditoría de actividad del administrador o registro de auditoría de acceso a los datos. Cada entrada de registro de auditoría corresponde a una solicitud a una API de Google Cloud o a una acción que Google Cloud realiza en tu nombre. Cuando solucionas problemas desde un registro de auditoría, el solucionador de problemas de políticas obtiene automáticamente información adicional sobre la solicitud, como la fecha y hora, lo que le permite analizar las vinculaciones de roles condicionales y las reglas de denegación.

Console

Para solucionar problemas de vinculaciones de roles condicionales y reglas de denegación, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Explorador de registros.

    Ve al Explorador de registros.

  2. Si el título de la página es Visor de registros heredados, haz clic en la lista desplegable Actualizar y selecciona Actualizar al Explorador de registros nuevo.

  3. Para ver solo los registros de auditoría de actividad del administrador y acceso a los datos, ingresa la siguiente consulta en el compilador de consultas y, luego, haz clic en Ejecutar consulta:

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    Reemplaza los siguientes valores:

    • RESOURCE_TYPE: El tipo de recurso para el que creas una lista de registros de auditoría. Usa projects, folders o organizations.
    • RESOURCE_ID: El ID de tu recurso.
  4. Ubica la entrada de registro de auditoría que corresponda a la solicitud que deseas solucionar. Si quieres obtener información sobre cómo usar el explorador de registros para encontrar entradas de registro específicas, consulta Usa el explorador de registros.

  5. En la columna Resumen de la entrada de registro, haz clic en IAM y, luego, en Solucionar problemas de acceso.

    El solucionador de problemas de políticas usa la información de la entrada de registro para solucionar los problemas de acceso y, luego, muestra los resultados. El contexto adicional se indica en los detalles de la evaluación en Contexto de la condición. Para ver los detalles del contexto, haz clic en Ver el contexto de la condición. Para obtener más información sobre la página de resultados del solucionador de problemas de políticas, consulta Información sobre los resultados del solucionador de problemas en esta página.

  6. Opcional: Para solucionar otros problemas de solicitudes relacionadas con vinculaciones de roles condicionales y reglas de denegación, regresa a la página del explorador de registros y repite los pasos anteriores.

gcloud

Para solucionar problemas de vinculaciones de roles condicionales y reglas de denegación, usa el comando gcloud policy-troubleshoot iam.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • EMAIL: La dirección de correo electrónico del principal al que pertenecen los permisos con problemas que deseas solucionar.
  • RESOURCE: Es el recurso en el que se otorga el permiso.
  • PERMISSION: El permiso con los problemas que deseas solucionar.
  • DESTINATION_IP: Opcional Es la dirección IP de destino de la solicitud que se usará cuando se verifiquen las vinculaciones de roles condicionales. Por ejemplo, 198.1.1.1.
  • DESTINATION_PORT: Opcional Es el puerto de destino de la solicitud que se debe usar cuando se verifican las vinculaciones de roles condicionales. Por ejemplo, "8080".
  • REQUEST_TIME: Opcional Es la marca de tiempo de la solicitud que se usará cuando se verifiquen las vinculaciones de roles condicionales. Usa una marca de tiempo en formato RFC 3339, por ejemplo, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: Opcional Es el valor del nombre de recurso que se debe usar cuando se verifican las vinculaciones de roles condicionales. Para obtener una lista de los formatos de nombre de recurso aceptados, consulta Formato de nombre de recurso.
  • RESOURCE_SERVICE: Opcional Es el valor del servicio de recursos que se debe usar cuando se verifican las vinculaciones de roles condicionales. Para obtener una lista de los nombres de servicio aceptados, consulta Valores de servicios de recursos.
  • RESOURCE_TYPE: Opcional Para obtener una lista de los tipos de recursos aceptados, consulta Valores de tipos de recursos.

Ejecuta el comando gcloud policy-troubleshoot iam:

Linux, macOS o Cloud Shell

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION --destination-ip=DESTINATION_IP \
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME \
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE \
    --resource-type=RESOURCE_TYPE

Windows (PowerShell)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION --destination-ip=DESTINATION_IP `
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME `
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE `
    --resource-type=RESOURCE_TYPE

Windows (cmd.exe)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION --destination-ip=DESTINATION_IP ^
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME ^
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE ^
    --resource-type=RESOURCE_TYPE

La respuesta contiene una explicación del acceso del principal. Para cada vinculación de roles y regla de denegación con una condición, la respuesta incluye un campo conditionExplanation que describe si la condición se evalúa como verdadera o falsa según el contexto de la condición que proporcionaste.

Por ejemplo, la siguiente es una evaluación de una vinculación de roles con una condición que especifica el tipo de recurso y el servicio de recursos:

Respuesta

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "evaluationStates": [{
      "end": 51,
      "start": 1,
      "value": true
    }, {
      "end": 99,
      "start": 55,
      "value": true
    }],
    "value": true,
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
}
...

REST

Para solucionar problemas de vinculaciones de roles condicionales y reglas de denegación, usa el método iam.troubleshoot de la API del solucionador de problemas de políticas.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • EMAIL: La dirección de correo electrónico del principal al que pertenecen los permisos con problemas que deseas solucionar.
  • RESOURCE: Es el recurso en el que se otorga el permiso.
  • PERMISSION: El permiso con los problemas que deseas solucionar.
  • DESTINATION_IP: Opcional Es la dirección IP de destino de la solicitud que se usará cuando se verifiquen las vinculaciones de roles condicionales. Por ejemplo, 198.1.1.1.
  • DESTINATION_PORT: Opcional Es el puerto de destino de la solicitud que se debe usar cuando se verifican las vinculaciones de roles condicionales. Por ejemplo, "8080".
  • REQUEST_TIME: Opcional Es la marca de tiempo de la solicitud que se usará cuando se verifiquen las vinculaciones de roles condicionales. Usa una marca de tiempo en formato RFC 3339, por ejemplo, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: Opcional Es el valor del nombre de recurso que se debe usar cuando se verifican las vinculaciones de roles condicionales. Para obtener una lista de los formatos de nombre de recurso aceptados, consulta Formato de nombre de recurso.
  • RESOURCE_SERVICE: Opcional Es el valor del servicio de recursos que se debe usar cuando se verifican las vinculaciones de roles condicionales. Para obtener una lista de los nombres de servicio aceptados, consulta Valores de servicios de recursos.
  • RESOURCE_TYPE: Opcional Para obtener una lista de los tipos de recursos aceptados, consulta Valores de tipos de recursos.

Método HTTP y URL:

POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot

Cuerpo JSON de la solicitud:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION",
    "conditionContext": {
      "destination": {
        "ip": DESTINATION_IP,
        "port": DESTINATION_PORT
      },
      "request": {
        "receiveTime": REQUEST_TIME
      },
      "resource": {
        "name": RESOURCE_NAME,
        "service": RESOURCE_SERVICE,
        "type": RESOURCE_TYPE
      }
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene una explicación del acceso del principal. Para cada vinculación de roles y regla de denegación con una condición, la respuesta incluye un campo conditionExplanation que describe si la condición se evalúa como verdadera o falsa según el contexto de la condición que proporcionaste.

Por ejemplo, la siguiente es una evaluación de una vinculación de roles con una condición que especifica el tipo de recurso y el servicio de recursos:

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "value": true,
    "evaluationStates": [{
      "start": 1,
      "end": 51,
      "value": true
    }, {
      "start": 55,
      "end": 99,
      "value": true
    }]
  }
}
...

¿Qué sigue?