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 administración de identidades y accesos (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 búsquedas simples, el uso de Cloud Console suele ser más rápido. Para situaciones más complejas, considera usar la herramienta gcloud o la API de REST.

Permisos necesarios

El solucionador de problemas de políticas analiza el acceso de una principal a un recurso según las políticas y funciones de IAM 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.

A fin de solucionar completamente problemas de acceso de una principal, necesitarás una función que incluya los siguientes permisos:

  • resourcemanager.projects.getIamPolicy
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.organizations.getIamPolicy
  • iam.roles.get
  • iam.roles.list

Para obtener estos permisos y seguir el principio de privilegio mínimo, pídele a tu administrador que te otorgue la función de revisor de seguridad (roles/iam.securityReviewer) a nivel de la organización.

Como alternativa, el administrador puede otorgarte una función diferente con los permisos necesarios, como una función personalizada o una función predefinida con más permisos.

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

Soluciona problemas de acceso

Para solucionar problemas de acceso, sigue estos pasos:

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

    Ir al solucionador de problemas de políticas

  2. Ingresa un correo electrónico, un nombre de recurso y un permiso para verificar.

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

  4. Haz clic en Comprobar llamada a la API.

Comprende los resultados del solucionador de problemas de políticas

Los resultados del solucionador de problemas de políticas te indican si la principal tiene el permiso especificado en el recurso dado. También, enumeran las políticas de IAM que se aplican al recurso y las vinculaciones de función en esas políticas.

De forma predeterminada, los resultados se muestran en Vista compacta, que solo muestra las vinculaciones de funciones para las funciones que contienen el permiso especificado. Si estás solucionando varios problemas de permisos, usa la lista desplegable Ver por para alternar entre ellos.

Para inhabilitar la Vista compacta, haz clic en el botón de activar o desactivar la Vista compacta. La inhabilitación de la Vista compacta muestra todas las vinculaciones de funciones en las políticas que se aplican al recurso.

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

  • Resumen de acceso: Un resumen breve del acceso de la principal Con esta información, puedes ver si la principal tiene el permiso en el recurso. En el siguiente ejemplo, my-user@example.com tiene el permiso de logging.logs.view en my-project:

  • Políticas y vinculaciones de función relevantes: Una lista de las políticas de IAM que se aplican al recurso dado y a las vinculaciones de funciones en cada política. Junto a cada vinculación de función hay un ícono que indica si la vinculación de la función otorga el permiso especificado en la principal. Haz clic en la vinculación de función para ver el texto sin procesar.

    En el siguiente ejemplo, la vinculación de la función Visor de registros otorga el permiso:

  • Texto sin procesar de las vinculaciones de funciones relevantes: El texto sin procesar de cada vinculación de función en la lista de vinculaciones de función relevantes. Para obtener más información sobre la estructura de las vinculaciones de funciones, consulta la sección sobre comprender las políticas.

    En cada vinculación de función, las líneas se destacan de la siguiente manera:

    • Verde: Las líneas se destacan en verde si contienen una función que incluye el permiso especificado, si hacen referencia a la principal especificada o si hacen referencia a un grupo que contiene la principal especificada.
    • Rojo: Las líneas se destacan en rojo si contienen otra función, hacen referencia a otra principal o hacen referencia a un grupo que no contiene la principal especificada.
    • Amarillo: Las líneas se destacan en amarillo si contienen una función cuyos detalles no tienes permiso para ver o un grupo cuya membresía no tienes permiso para ver.

gcloud

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

Habilita la API del solucionador de problemas de políticas:

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

Luego, configura tu proyecto:

gcloud config set project project-id

Después de completar la configuración, puedes usar el solucionador de problemas de políticas para verificar si un usuario tiene un permiso en un recurso. Ejecuta el siguiente comando:

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

Por ejemplo, con el siguiente comando, se verifica si foo@example.com tiene el permiso resourcemanager.projects.getIamPolicy 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 donde indica si el usuario tiene el permiso 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 se destaca en amarillo en Cloud Console y una advertencia indica que no sabes si el grupo incluye la principal. Si usas la herramienta de 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 les permitirá ver la membresía de todos los grupos de tu dominio y solucionar problemas de acceso de manera más eficaz.

¿Qué sigue?

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