Soluciona problemas de políticas de permiso y denegación

Existen varios métodos que puedes usar para solucionar problemas de políticas de permiso y de denegación de Identity and Access Management (IAM).

Usa el solucionador de problemas de políticas

Si necesitas solucionar problemas de acceso para una principal específica, usa el solucionador de problemas de políticas de IAM.

El solucionador de problemas de políticas de IAM te ayuda a comprender por qué un usuario tiene acceso a un recurso o no tiene permiso para llamar a una API. Con una dirección de correo electrónico, un recurso y un permiso, el solucionador de problemas de políticas examina todas las políticas de permiso y de denegación que se aplican al recurso. Luego, usa esas políticas para indicar si la principal tiene el permiso. También, se enumeran las vinculaciones de roles y las reglas de denegación en las políticas y se explica cómo afectan el acceso de la principal.

Si deseas obtener información para usar el solucionador de problemas de políticas a fin de solucionar problemas de políticas de permiso y denegación de IAM, consulta Soluciona problemas de acceso.

Visualiza todas las políticas de permiso y denegación que se aplican a un recurso

En Google Cloud, las siguientes políticas de IAM afectan el acceso a un recurso:

  • 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 afectan el acceso a un recurso 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 unión de todas estas políticas se denomina política aplicable o política vigente.

En Google Cloud, puedes obtener una lista de todas las políticas de IAM que afectan el acceso a un proyecto mediante el comando gcloud beta projects get-ancestors-iam-policy con la marca --include-deny. En conjunto, estas políticas conforman la política aplicable para el proyecto. Puedes investigar cada política para ver cómo afecta el acceso de la principal.

gcloud

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

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.

Ejecuta el comando gcloud beta projects get-ancestors-iam-policy:

Linux, macOS o Cloud Shell

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (PowerShell)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows (cmd.exe)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

La respuesta contiene las políticas de permiso y rechazo del proyecto. cualquier carpeta que sea principal del proyecto; y la organización. En el siguiente ejemplo, se muestran las políticas de permiso para la organización 1234567890123 y el proyecto my-project, así como una política de denegación para el proyecto my-project:

[
  {
    "id": "1234567890123",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "user:raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwXXjOM7L6M=",
      "type": "project"
    }
  },
  {
    "id": "my-project",
    "policy": {
      "createTime": "2022-02-14T21:46:35.865279Z",
      "displayName": "My deny policy",
      "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=",
      "kind": "DenyPolicy",
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy",
      "rules": [
        {
          "denyRule": {
            "deniedPermissions": [
              "iam.googleapis.com/serviceAccounts.create"
            ],
            "deniedPrincipals": [
              "principal://goog/subject/raha@example.com"
            ]
          },
          "description": "Prevent service account creation"
        }
      ],
      "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05",
      "updateTime": "2022-02-14T21:46:35.865279Z"
    },
    "type": "project"
  }
]

En este ejemplo, al usuario raha@example.com se le otorga la función de administrador de cuenta de servicio (roles/iam.serviceAccountAdmin) en la organización, pero el proyecto tiene una política de denegación que impide que raha@example.com use el permisoiam.googleapis.com/serviceAccounts.create. Como resultado, si raha@example.com intenta crear una cuenta de servicio en el proyecto my-project, se rechazará la solicitud.

En algunos casos, es posible que solo necesites ver la política de permisos vigente de un recurso, por ejemplo, si tu organización no usa políticas de denegación. En estos casos, puedes usar los siguientes métodos para ver la política de permisos vigente:

  • Ver la política de permiso de IAM del recurso en la consola de Google Cloud. En la consola de Google Cloud, se muestra de forma automática la política vigente de cada recurso.

    Para obtener información sobre cómo ver la política de permiso de IAM de un recurso en la consola de Google Cloud, consulta Visualiza el acceso actual.

  • Usa la API de Cloud Asset para obtener la política de permiso vigente del recurso. Para obtener más información, consulta Visualiza políticas de IAM eficaces.

Si necesitas ubicar una vinculación de rol específica en una política de permiso, puedes buscar la política de permiso.

Cloud Asset Inventory te permite buscar políticas de permiso para las vinculaciones de roles que coinciden con los parámetros especificados. Puedes usar una variedad de parámetros de búsqueda, incluidos los siguientes:

  • Tipo de recurso
  • Tipo principal
  • Rol
  • Proyecto
  • Carpeta
  • Organización

Para obtener más información, consulta Busca políticas de permiso de IAM.