Soluciona problemas de permisos de IAM

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 Identity and Access Management (IAM) que se aplican al recurso. Luego, revelará si las funciones de la principal 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 Console, la CLI de Google Cloud o la API de REST. Para consultas simples, el uso de la consola suele ser más rápido. Para situaciones más complejas, considera usarla CLI de gcloud o la API de REST.

La consola también te alerta si hay alguna política de denegación que pueda afectar el acceso de la principal. La CLI de gcloud y la API de REST no proporcionan información sobre las políticas de rechazo.

Antes de comenzar

  • Habilita la API de Policy Troubleshooter.

    Habilita la API

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 obtener los permisos que necesitas para solucionar problemas de acceso de una principal, pídele a tu administrador que te otorgue el rol de IAM de revisor de seguridad (roles/iam.securityReviewer) en la organización. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para solucionar problemas de acceso de una principal. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

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

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

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.
  • 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 la consola, 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. En la consola, 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:

  • Rechazar un aviso de política: Si una política de rechazo puede afectar el acceso al que solucionas problemas, el solucionador de problemas de políticas mostrará un aviso.

    Este aviso aparece en los siguientes casos:

    Si no ves esta notificación, no hay políticas de rechazo que afecten el acceso de la principal.

  • Resumen de acceso: es un resumen breve del acceso de la principal en función de las políticas de permiso de IAM relevantes. 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 permiten aplicar al recurso determinado y 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

Para descubrir por qué una 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:

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

HTTP method and 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

Si tu política de IAM contiene grupos, solo puedes solucionar problemas de acceso para miembros individuales del grupo si tienes el permiso de la API de Administrador de Google Workspace groups.read. Los administradores de grupo y los administradores avanzados 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 otorgarlos al usuario.

Si no tienes permiso, el grupo se destaca en amarillo en la consola, y una advertencia indica que no sabes si el grupo incluye el principal. Si usas la CLI 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

Soluciona problemas de vinculaciones de funciones condicionales

Para solucionar problemas relacionados con las vinculaciones de funciones 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.

Para proporcionar este contexto adicional, puedes solucionar 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 funciones condicionales.

Esta función solo está disponible en la consola.

Para solucionar problemas de vinculaciones de funciones condicionales, haz lo siguiente:

  1. En la consola, 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 encuentra directamente debajo del resumen de acceso. Para obtener más información sobre la página de resultados del solucionador de problemas de políticas, consulta Solución de problemas de acceso en esta página.

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

¿Qué sigue?