Visualiza políticas de IAM efectivas

En IAM, las políticas vigentes describen cómo se heredan todas las políticas superiores y de anclaje en la jerarquía de recursos para un recurso.

Solo se admiten políticas de permisos para la recuperación a través de Cloud Asset Inventory. No se admiten las siguientes formas de control de acceso:

Antes de comenzar

  1. Habilita la API de Cloud Asset Inventory en el proyecto en el que ejecutas los comandos de Cloud Asset Inventory.

    Habilita la API de Cloud Asset Inventory

  2. Asegúrate de que tu cuenta tenga el rol correcto para llamar a la API de Cloud Asset Inventory. Para obtener información sobre los permisos individuales de cada tipo de llamada, consulta Permisos.

Cómo ver las políticas vigentes en los recursos

gcloud

gcloud asset get-effective-iam-policy \
    --scope=SCOPE_PATH \
    --names=ASSET_NAME_1,ASSET_NAME_2,...

Ingresa los siguientes valores:

  • SCOPE_PATH: Usa uno de los siguientes valores:

    Los valores permitidos son los siguientes:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto que es el nivel superior desde el que se verifican las políticas de IAM efectivas.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto que es el nivel superior para verificar las políticas de IAM efectivas.

      Cómo encontrar el número de proyecto de Google Cloud

      consola de

      Para encontrar el número de proyecto de Google Cloud , completa los siguientes pasos:

      1. Ve a la página Bienvenido en la consola de Google Cloud .

        Ve a Bienvenida

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Te damos la bienvenida.

        Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.

      gcloud CLI

      Puedes recuperar un número de proyecto de Google Cloud con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, en la que FOLDER_ID es el ID de la carpeta que es el nivel superior desde el que se verifican las políticas de IAM efectivas.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la organización con el siguiente comando:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      En el que TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no muestra los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, en la que ORGANIZATION_ID es el ID de la organización que es el nivel superior desde el que se verifican las políticas de IAM eficaces.

      Cómo encontrar el ID de una organización de Google Cloud

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

      gcloud CLI

      Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_NAME_#: Es una lista separada por comas de los nombres completos de los activos.

Puedes recuperar políticas para un máximo de 20 activos en un lote.

Consulta la referencia de la CLI de gcloud para ver todas las opciones.

Ejemplo

Ejecuta el siguiente comando para ver las políticas de IAM vigentes en la instancia de Compute Engine my-instance que se heredan de la organización con el ID my-organization-id.

Cómo encontrar el ID de una organización de Google Cloud

consola de

Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

  1. Ve a la consola de Google Cloud .

    Ve a la consola de Google Cloud

  2. Haz clic en el cuadro de lista del selector en la barra de menú.
  3. Selecciona tu organización en el cuadro de lista.
  4. Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

gcloud CLI

Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
gcloud asset get-effective-iam-policy \
    --scope=organizations/my-organization-id \
    --names=//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance

Respuesta de ejemplo

policyResults:
- fullResourceName: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance
  policies:
  - attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
    policy:
      bindings:
      - members:
        - user:alex@example.com
        - user:bola@example.com
        role: roles/cloudkms.admin
      - members:
        - serviceAccount:000000000000-compute@developer.gserviceaccount.com
        role: roles/editor
  - attachedResource: //cloudresourcemanager.googleapis.com/folders/000000000000
    policy:
      bindings:
      - members:
        - user:cruz@example.com
        role: roles/resourcemanager.folderAdmin
      - members:
        - user:dani@example.com
        role: roles/resourcemanager.folderEditor
  - attachedResource: //cloudresourcemanager.googleapis.com/organizations/0000000000000
    policy:
      bindings:
      - members:
        - user:hao@example.com
        role: organizations/0000000000000/roles/CustomProjectAdmin
      - members:
        - serviceAccount:000000000000@cloudservices.gserviceaccount.com
        - user:ira@example.com
        - user:jie@example.com
        role: roles/accesscontextmanager.policyAdmin

REST

Método HTTP y URL:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH/effectiveIamPolicies:batchGet

Cuerpo JSON de la solicitud:

{
  "names": [
    "ASSET_NAME_1",
    "ASSET_NAME_2",
    "..."
  ]
}

Ingresa los siguientes valores:

  • SCOPE_PATH: Usa uno de los siguientes valores:

    Los valores permitidos son los siguientes:

    • projects/PROJECT_ID, donde PROJECT_ID es el ID del proyecto que es el nivel superior desde el que se verifican las políticas de IAM efectivas.
    • projects/PROJECT_NUMBER, donde PROJECT_NUMBER es el número del proyecto que es el nivel superior para verificar las políticas de IAM efectivas.

      Cómo encontrar un número de proyecto de Google Cloud

      consola de

      Para encontrar el número de proyecto de Google Cloud , completa los siguientes pasos:

      1. Ve a la página Bienvenido en la consola de Google Cloud .

        Ve a Bienvenida

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista y, luego, busca el nombre de tu proyecto. El nombre, el número y el ID del proyecto se muestran cerca del encabezado Te damos la bienvenida.

        Se muestran hasta 4,000 recursos. Si no ves el proyecto que buscas, ve a la página Administrar recursos y filtra la lista con el nombre de ese proyecto.

      gcloud CLI

      Puedes recuperar un número de proyecto de Google Cloud con el siguiente comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID, en la que FOLDER_ID es el ID de la carpeta que es el nivel superior desde el que se verifican las políticas de IAM efectivas.

      Cómo encontrar el ID de una carpeta de Google Cloud

      consola de

      Para encontrar el ID de una carpeta de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista.
      4. Busca el nombre de tu carpeta. El ID de la carpeta se muestra junto al nombre de la carpeta.

      gcloud CLI

      Puedes recuperar el ID de una carpeta de Google Cloud que se encuentra a nivel de la organización con el siguiente comando:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      En el que TOP_LEVEL_FOLDER_NAME es una coincidencia de cadena parcial o completa para el nombre de la carpeta. Quita la marca --format para ver más información sobre las carpetas encontradas.

      El comando anterior no muestra los IDs de las subcarpetas dentro de las carpetas. Para ello, ejecuta el siguiente comando con el ID de una carpeta de nivel superior:

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID, en la que ORGANIZATION_ID es el ID de la organización que es el nivel superior desde el que se verifican las políticas de IAM eficaces.

      Cómo encontrar el ID de una organización de Google Cloud

      consola de

      Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

      1. Ve a la consola de Google Cloud .

        Ve a la consola de Google Cloud

      2. Haz clic en el cuadro de lista del selector en la barra de menú.
      3. Selecciona tu organización en el cuadro de lista.
      4. Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

      gcloud CLI

      Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_NAME_#: Es un array de nombres completos de los activos.

Puedes recuperar políticas para un máximo de 20 activos en un lote.

Consulta la referencia de REST para ver todas las opciones.

Ejemplos de comandos

Ejecuta uno de los siguientes comandos para ver las políticas de IAM efectivas en la instancia de Compute Engine my-instance que se heredan de la organización con el ID my-organization-id.

Cómo encontrar el ID de una organización de Google Cloud

consola de

Para encontrar el ID de una organización de Google Cloud , completa los siguientes pasos:

  1. Ve a la consola de Google Cloud .

    Ve a la consola de Google Cloud

  2. Haz clic en el cuadro de lista del selector en la barra de menú.
  3. Selecciona tu organización en el cuadro de lista.
  4. Haz clic en la pestaña Todos. El ID de la organización se muestra junto al nombre de la organización.

gcloud CLI

Puedes recuperar el ID de una organización de Google Cloud con el siguiente comando:

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

curl (Linux, macOS o Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "names": [
              "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"
            ]
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id/effectiveIamPolicies:batchGet

PowerShell (Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "names": [
    "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"
  ]
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id/effectiveIamPolicies:batchGet" | Select-Object -Expand Content

Respuesta de ejemplo

{
  "policyResults": [
    {
      "fullResourceName": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1",
      "policies": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "policy": {
            "bindings": [
              {
                "role": "roles/cloudkms.admin",
                "members": [
                  "user:alex@example.com",
                  "user:bola@example.com"
                ]
              },
              {
                "role": "roles/editor",
                "members": [
                  "serviceAccount:000000000000-compute@developer.gserviceaccount.com"
                ]
              }
            ]
          }
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/000000000000",
          "policy": {
            "bindings": [
              {
                "role": "roles/resourcemanager.folderAdmin",
                "members": [
                  "user:cruz@example.com"
                ]
              },
              {
                "role": "roles/resourcemanager.folderEditor",
                "members": [
                  "user:dani@example.com"
                ]
              }
            ]
          }
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/000000000000",
          "policy": {
            "bindings": [
              {
                "role": "organizations/1060291660910/roles/CustomProjectAdmin",
                "members": [
                  "user:hao@example.com"
                ]
              },
              {
                "role": "roles/accesscontextmanager.policyAdmin",
                "members": [
                  "serviceAccount:000000000000@cloudservices.gserviceaccount.com",
                  "user:ira@example.com",
                  "user:jie@example.com"
                ]
              }
            ]
          }
        }
      ]
    }
  ]
}