Soluciona problemas de permisos de IAM

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

El solucionador de problemas de políticas facilita la comprensión de los motivos por los que 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 mediante Google Cloud Console, Google Cloud CLI o la API de REST. Para consultas simples, el uso de Google Cloud Console suele ser más rápido. Para situaciones más complejas, considera usarla CLI de gcloud o la API de REST.

Google Cloud Console también te alerta si hay políticas de denegación que podrían 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

Para solucionar todos los problemas del acceso a las 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 un principal a un recurso en función de las políticas y funciones de IAM que tienes permiso para ver. Si no tienes permiso para ver una política que se aplica a un recurso o si no tienes permiso para ver una función personalizada, es posible que no puedas determinar 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.

Permisos para solucionar problemas de acceso de los miembros del grupo

Si tu política de IAM contiene grupos, necesitas el permiso de la API de Administrador 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 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órgaselo al usuario.

Si no tienes estos permisos, las vinculaciones de funciones que contienen grupos o dominios tienen un resultado de acceso Unknown, a menos que la vinculación de función también contenga de forma explícita la principal.

Permisos para solucionar problemas de acceso de los miembros del dominio

Si tu política de IAM contiene dominios, debes ser un administrador de dominio para solucionar problemas de acceso de miembros individuales del dominio.

Si no tienes estos permisos, las vinculaciones de funciones que contienen grupos o dominios tienen un resultado de acceso Unknown, a menos que la vinculación de función también contenga de forma explícita la principal.

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 Google Cloud Console, se presenta 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 Google Cloud Console, 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 de la principal cuyo acceso deseas verificar.

  3. Ingresa el nombre del recurso y el permiso que deseas verificar. Si no conoces el nombre completo del recurso o el nombre del permiso, comienza a escribir para ver las opciones de autocompletado.

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

  5. Haz clic en Verificar acceso.

Comprende los resultados del solucionador de problemas de políticas

Para cada par de permisos y recursos, el solucionador de problemas de políticas proporciona una página de resultados que explica el acceso de la principal.

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

  • Detalles de la evaluación: Un resumen del acceso que estás solucionando, incluidos el principal, el recurso y el permiso especificados. Si estás solucionando varios problemas de pares de permisos de recursos, puedes alternar entre ellos mediante la lista Evaluación de acceso.

  • Aviso de denegación de la política: Si una política de denegación podría afectar el acceso que estás solucionando, el solucionador de problemas de políticas mostrará un aviso.

    Este aviso aparece en los siguientes casos:

    Si no ves este aviso, no hay políticas de denegación que afecten el acceso de la principal.

  • Detalles de la política de permiso de IAM: un breve resumen del acceso de la principal según las políticas de permiso de IAM relevantes Estas políticas incluyen la política de permiso del recurso especificado y las políticas de permiso de todos los principales del recurso. Debido a la herencia de políticas, si la principal tiene permiso en cualquiera de estos recursos, tendrá el permiso en el recurso que especificaste en la consulta de solución de problemas.

    Esta información te permite ver si la principal tiene el permiso en el recurso.

  • Recursos: una lista del recurso especificado y sus principales Junto a cada recurso, hay una evaluación que determina si la política de permiso de ese recurso le otorga al principal el permiso especificado. Esta evaluación se aplica solo a la política de ese recurso (no refleja ningún acceso de las políticas heredadas).

    Si no tienes permiso para ver la política de permiso de un principal, la lista de recursos no incluirá ese principal.

    Para ver las vinculaciones de funciones relevantes en una política de permisos de un recurso y ver cómo otorgan o no el permiso a la principal, haz clic en el recurso. Las vinculaciones de la política de permiso aparecen en el panel Vinculaciones de funciones.

  • Vinculaciones de funciones: una lista de vinculaciones de funciones en la política de admisión de recursos seleccionada De forma predeterminada, la lista solo muestra vinculaciones de funciones que incluyen una función con el permiso especificado. Si la principal no tiene acceso, la lista también muestra vinculaciones de funciones con funciones personalizadas editables. Para ver todas las vinculaciones de funciones, desmarca la casilla de verificación Mostrar solo vinculaciones relevantes.

    La columna Acceso indica si la vinculación de función le otorga el permiso a la principal. Esta columna puede tener cualquiera de los siguientes valores:

    • Otorgada: La vinculación de la función incluye la principal y una función con el permiso.
    • No otorgada: La vinculación de función no incluye la principal o la función de la vinculación no incluye el permiso.
    • Condicional: La vinculación de la función incluye la principal y una función con el permiso. Sin embargo, también contiene una condición, y la principal solo tendrá acceso si se cumple la condición.
    • Desconocido: la vinculación de función contiene una función para la que no tienes permiso de visualización o un grupo del que no tienes permiso para verificar los miembros.

    Para ver más detalles sobre la vinculación de función, haz clic en Ver detalles de vinculación. Esta acción abre el panel Binding details. La pestaña Detalles de este panel muestra información sobre la función, las principales y las condiciones en la vinculación de función. Si la vinculación de función no otorga acceso principal, en este panel también se describe lo que puedes hacer para otorgarle acceso a la función principal.

    La pestaña JSON muestra el texto sin procesar de la vinculación de función. Para obtener más información sobre la estructura de las vinculaciones de funciones, consulta Información sobre las políticas.

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 permiso sobre un recurso. Ejecute 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 averiguar 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 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 los problemas directamente desde cualquier registro de auditoría de actividad del administrador o registro de acceso a 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 los problemas de un registro de auditoría, el solucionador de problemas de políticas obtiene automáticamente información adicional sobre la solicitud, como su fecha y hora, lo que permite al solucionador de problemas de políticas analizar las vinculaciones de funciones condicionales.

Esta función solo está disponible en Google Cloud Console.

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

  1. En Google Cloud Console, 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 problemas de acceso y, luego, te muestra los resultados. El contexto adicional aparece en los detalles de la evaluación, en Contexto de la condición. Para ver los detalles del contexto, haz clic en Ver 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 Acceso a la solución de problemas.

  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?