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

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

      1. Ve a la página Bienvenida 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 Welcome.

        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.

      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.

      Para encontrar el ID de una carpeta 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.

      Puedes recuperar el ID de una carpeta 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.

      Para encontrar el ID de una Google Cloud organización, 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.

      Puedes recuperar el ID de una Google Cloud organización 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.

Para encontrar el ID de una Google Cloud organización, 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.

Puedes recuperar el ID de una Google Cloud organización 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

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.

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

      1. Ve a la página Bienvenida 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 Welcome.

        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.

      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.

      Para encontrar el ID de una carpeta 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.

      Puedes recuperar el ID de una carpeta 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.

      Para encontrar el ID de una Google Cloud organización, 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.

      Puedes recuperar el ID de una Google Cloud organización 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.

Para encontrar el ID de una Google Cloud organización, 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.

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

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
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
$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"
                ]
              }
            ]
          }
        }
      ]
    }
  ]
}