Soluciona problemas de acceso

El solucionador de problemas de políticas te ayuda a comprender por qué un usuario tiene acceso a un recurso o no tiene permiso para llamar a una API. Con un correo electrónico, un recurso y un permiso, el solucionador de problemas de políticas examinará todas las políticas de IAM que se aplican al recurso. Luego, revelará si las funciones del miembro incluyen el permiso sobre ese recurso y, si es así, qué políticas vinculan al miembro con esas funciones.

Puedes acceder al solucionador de problemas de políticas con Cloud Console, la herramienta de línea de comandos de gcloud o la API de REST. Para consultas simples, el uso de Cloud Console es sencillo y, también, incluye un asistente visual. Para situaciones más complejas, considera usar la herramienta gcloud o la API de REST.

Soluciona problemas de acceso

Para solucionar este tipo de problemas, necesitarás la información que se presenta a continuació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 miembros.
  • Recurso: El nombre completo del recurso. Por ejemplo, para verificar el 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 Cloud Console, se muestra una lista de sugerencias a medida que escribes. Para obtener una lista completa de los permisos, consulta Referencia de permisos de IAM.

Console

Primero, en Cloud Console, ve a la página Solucionador de problemas de políticas.

Ir a la página Solucionador de problemas de políticas

Luego, ingresa un correo electrónico, un nombre de recurso y un permiso para verificar.

Puedes verificar varios recursos y permisos si seleccionas Agregar otro par y repites el paso anterior.

Por último, selecciona Verificar llamada a la API.

En la parte superior central de la página de resultados, puedes ver con rapidez si el usuario tiene permiso sobre el recurso.

Resultados del solucionador de problemas

De forma predeterminada, los resultados se muestran en Vista compacta, que solo contiene información directamente relevante para la solución de problemas del acceso del usuario determinado. En especial, si el acceso se otorga, solo se muestran las vinculaciones que otorgan acceso. Si se niega el acceso, solo se mostrarán las funciones que contienen el permiso deseado (o las funciones personalizadas que se podrían cambiar para incluirlo).

Puedes inhabilitar la Vista compacta con el interruptor para activar o desactivar. Se mostrarán todos los miembros y las vinculaciones.

En el panel izquierdo, hay una lista de políticas que se aplican a un recurso y a un ícono en particular que indica si cada política contiene una vinculación que otorga el permiso al miembro. En el siguiente ejemplo, la vinculación del propietario permite el acceso.

Lista de vinculaciones del solucionador de problemas

En el panel derecho, se muestra el texto sin formato de cada vinculación y se destacan en rojo las líneas que no otorgan el permiso. Observa que de la línea 39 a la 46, en las que el usuario tiene acceso, no están destacadas.

Lista de vinculaciones del solucionador de problemas

Puedes desglosar una vinculación específica si la seleccionas en el panel izquierdo. Si ingresaste varios pares de recursos y permisos, usa el menú desplegable Ver por para alternar entre ellos.

gcloud

Primero, asegúrate de que tu entorno esté configurado para usar el solucionador de problemas de políticas.

Habilita la API con Cloud Console o ejecuta el siguiente comando:

gcloud services enable policytroubleshooter.googleapis.com --project=project-id

Además, configura tu proyecto:

gcloud config set project project-id

Una vez que hayas completado la configuración, podrás solucionar problemas si se otorga un permiso sobre un recurso a un usuario con el siguiente comando:

gcloud policy-troubleshoot iam resource --principal-email=email \
    --permission=permission

En el siguiente ejemplo, se verifica si se otorga el permiso resourcemanager.projects.getIamPolicy a foo@example.com en el proyecto my-project.

gcloud policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
    --permission=resourcemanager.projects.getIamPolicy --principal-email=foo@example.com

El resultado es YAML, lo que indica si se otorgó el permiso al usuario y una explicación de por qué. Debería verse algo similar a esto:

access: GRANTED
explainedPolicies:
- access: GRANTED
  bindingExplanations:
  - access: NOT_GRANTED
    memberships:
      serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
    role: roles/compute.serviceAgent
    rolePermission: ROLE_PERMISSION_NOT_INCLUDED
  - access: GRANTED
    memberships:
      serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
      user:foo@example.com: MEMBERSHIP_INCLUDED
    role: roles/owner
    rolePermission: ROLE_PERMISSION_INCLUDED
  fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
  policy:
    bindings:
    - members:
      - serviceAccount:service-123@compute-system.iam.gserviceaccount.com
      role: roles/compute.serviceAgent
    - members:
      - serviceAccount:foo@my-project.iam.gserviceaccount.com
      - user:foo@example.com
      role: roles/owner
    etag: BwWAOWEaIEg=
    version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}

API de REST

El método iam.troubleshoot te indica la razón por la que un miembro tiene o no un permiso de IAM.

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 miembro 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.

Método HTTP y URL:

POST https://policytroubleshooter.googleapis.com/v1/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:

{
  "access": "GRANTED",
  "explainedPolicies": [
    {
      "access": "GRANTED",
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "policy": {
        "version": 1,
        "etag": "BwWBUZjK9YQ=",
        "bindings": [
          {
            "role": "roles/owner",
            "members": [
              "user:foo@example.com"
            ]
          }
        ]
      },
      "bindingExplanations": [
        {
          "access": "GRANTED",
          "role": "roles/owner",
          "rolePermission": "ROLE_PERMISSION_INCLUDED",
          "rolePermissionRelevance": "HIGH",
          "memberships": {
            "key": "user:foo@example.com",
            "value": {
              "membership": "MEMBERSHIP_INCLUDED",
              "relevance": "HIGH",
            }
          },
        "relevance: HIGH",
        }
      ]
    },
    {
      "access": "UNKNOWN_INFO_DENIED",
      "policy": {}
    }
  ]
}

Soluciona problemas de membresías de grupos

Solo puedes solucionar problemas de acceso a un recurso otorgado por un Grupo de Google si tienes permiso para ver a sus miembros.

Si no tienes permiso, el grupo aparecerá destacado en naranja en Cloud Console, y verás una advertencia que indica que no sabes si se otorgó acceso al principal. Si usas gcloud o la API de REST, la respuesta contendrá UNKNOWN_INFO_DENIED o ACCESS_TO_INFO_DENIED.

Soluciona problemas de membresías de grupos

Los administradores de grupo y los administradores avanzados de Google Workspace suelen tener acceso para ver las membresías del grupo. Para permitir que un usuario que no es administrador avanzado ni administrador de grupo solucione problemas de acceso, crea una función personalizada de administrador de Google Workspace que contenga el privilegio groups.read (que se encuentra en Privilegios de la API de Administrador) y otórgasela al usuario. Esto le permitirá ver la membresía de todos los grupos de tu dominio y solucionar problemas de acceso de manera más eficaz.

Limitaciones

El solucionador de problemas de políticas no siempre puede explicar por completo el acceso a un recurso. Si no tienes acceso a una política que se aplica a un recurso, el solucionador de problemas de políticas no la analizará. Por ejemplo, si eres propietario de un proyecto, pero no tienes privilegios a nivel de la organización, el solucionador de problemas de políticas no revelará políticas a nivel de la organización que pudieran otorgar acceso a tu proyecto.

Para maximizar la eficacia del solucionador de problemas de políticas, asegúrate de que se te otorgue la función de revisor de seguridad (roles/iam.securityReviewer). Esto garantiza que puedas leer todas las políticas de IAM aplicables.

Próximos pasos

Usa la referencia de permisos o la referencia de funciones predefinidas para determinar qué función otorgar a un usuario que no tiene permisos.