Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Escribe un análisis de políticas en BigQuery

En esta página, se explica cómo analizar las políticas de Identity and Access Management (IAM) de forma asíncrona y escribir resultados en BigQuery. El proceso es similar al análisis de las políticas de IAM, con la excepción de que el resultado del análisis se escribe en tablas de BigQuery.

Antes de comenzar

  • Debes habilitar la API de Cloud Asset para tu proyecto.

  • Si usas la API para ejecutar estas consultas, debes configurar tu entorno y gcurl.

    1. Configura el entorno.

    2. Para configurar un alias gcurl, sigue estos pasos:

      Si usas una instancia de Compute Engine, ejecuta el siguiente comando.

      alias gcurl='curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
      -H "Content-Type: application/json" -X POST'
      

      Si no usas una instancia de Compute Engine, ejecuta el siguiente comando.

      alias gcurl='curl -H "$(oauth2l header --json CREDENTIALS cloud-platform)" \
      -H "Content-Type: application/json" -X POST'
      

      En este ejemplo, CREDENTIALS es la ruta del archivo de credenciales, como ~/credentials.json.

Llama a AnalyzeIamPolicyLongrunning

El método AnalyzeIamPolicyLongrunning te permite emitir una solicitud de análisis y obtener resultados en el destino de BigQuery especificado.

gcloud

Puedes llamar a AnalyzeIamPolicyLongrunning en tu proyecto con la API habilitada mediante el comando de gcloud asset analyze-iam-policy-longrunning. Debes ejecutar la versión 314.0.0 o posterior del SDK de Cloud. Puedes verificar tu versión con el comando gcloud version.

gcloud asset analyze-iam-policy-longrunning \
    --organization="ORG_ID" \
    --full-resource-name="FULL_RESOURCE_NAME" \
    --permissions="COMMA_SEPARATED_PERMISSIONS" \
    --bigquery-dataset="projects/BQ_PROJECT_ID/datasets/BQ_DATASET_NAME" \
    --bigquery-table-prefix="BQ_TABLE_PREFIX"

Por ejemplo, para escribir resultados de análisis de quién tiene permisos compute.instances.get y compute.instances.start en la instancia de Compute Engine ipa-gce-instance-2 en la organización 123456789 en el conjunto de datos de BigQuery projects/project1/datasets/bq-dataset-01 con un prefijo de tabla como some_prefix:

gcloud asset analyze-iam-policy-longrunning --organization=123456789 \
    --full-resource-name="//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2" \
    --permissions="compute.instances.get,compute.instances.start" \
    --bigquery-dataset="projects/project1/datasets/bq-dataset-01" \
    --bigquery-table-prefix="some_prefix"

A continuación puedes encontrar más asistencia:

gcloud asset analyze-iam-policy-longrunning --help

REST

Analiza las políticas de IAM y escribe los resultados con el alias gcurl.

gcurl -d "$JSON_REQUEST" \
"https://cloudasset.googleapis.com/v1/organizations/${YOUR_ORG_ID}:analyzeIamPolicyLongrunning"

Aquí:

  • YOUR_ORG_ID es el ID de la organización, como se muestra a continuación, en 123456789:

  • JSON_REQUEST es la solicitud de análisis en formato JSON. Por ejemplo, para analizar quién tiene permisos compute.instances.get ycompute.instances.start en la instancia de Compute Engine ipa-gce-instance-2 en la organización 123456789 para el conjunto de datos de BigQuery projects/project1/datasets/bq-dataset-01 con un prefijo de tabla como some_prefix:

    JSON_REQUEST='{
      "analysisQuery":{
         "scope":"organization/123456789",
         "resourceSelector":{
            "fullResourceName":"//compute.googleapis.com/projects/project1/zones/us-central1-a/instances/ipa-gce-instance-2"
         },
         "accessSelector":{
            "permissions":[
               "compute.instances.get",
               "compute.instances.start"
            ]
         }
      },
      "outputConfig":{
         "bigqueryDestination":{
            "dataset":"projects/project1/datasets/bq-dataset-01",
            "tablePrefix":"some_prefix"
         }
      }
    }'
    

Configura la clave de partición

Las tablas de BigQuery se pueden particionar, lo que puede mejorar el rendimiento de las consultas y reducir el costo de las consultas mediante el filtrado de particiones. Se admiten las siguientes claves de partición:

  • REQUEST_TIME: El momento en que se recibe la solicitud.

Configura la disposición de escritura

Especifica la acción que ocurre si la tabla o partición de destino ya existe. Consulta también la disposición de escritura de BigQuery. Se admiten los siguientes valores:

  • WRITE_APPEND: valor predeterminado. Agrega los datos a la tabla o a la última partición.
  • WRITE_TRUNCATE: reemplaza la tabla completa o todos los datos de particiones.
  • WRITE_EMPTY: Muestra un error.

Visualiza los resultados del análisis de las políticas de IAM

Para ver los resultados del análisis de las políticas de IAM, sigue estos pasos:

Console

  1. Ve a la página de BigQuery en Cloud Console.
    Ir a la página de BigQuery

  2. Para mostrar las tablas y vistas en el conjunto de datos, abre el panel de navegación. En la sección Recursos, selecciona tu proyecto para expandirlo y, luego, selecciona un conjunto de datos.

  3. En la lista, seleccione las tablas con tu prefijo. La tabla con el sufijo analysis contiene la consulta y los metadatos (p. ej., el nombre de la operación, el tiempo de la solicitud y los errores no críticos). La tabla con el sufijo analysis_result es la lista de resultados de las tuplas de {identity, role(s)/permission(s), resource} junto con las políticas de IAM que generan esas tuplas.

  4. Para ver una muestra del conjunto de datos, selecciona Vista previa.

API

Para explorar los datos de tu tabla, llama a tabledata.list. En el parámetro tableId, especifica el nombre de tu tabla.

Puedes configurar los siguientes parámetros opcionales para controlar el resultado.

  • maxResults es la cantidad máxima de resultados que se mostrarán.
  • selectedFields es una lista de las columnas separadas por comas que se mostrarán, si no se especifica, se mostrarán todas las columnas.
  • startIndex es el índice basado en cero de la fila inicial que se leerá.

Los valores se muestran unidos en un objeto JSON que debes analizar, como se describe en la documentación de referencia de tabledata.list.

Crea una consulta

A fin de obtener información sobre otros casos prácticos y opciones para las consultas, visita cómo analizar las muestras de consultas de políticas de IAM.

Consulta BigQuery

En esta sección, se proporcionan consultas de SQL de ejemplo para mostrarte cómo usar las tablas de BigQuery escritas por AnalyzeIamPolicyLongrunning. Para obtener más información sobre la sintaxis de BigQuery, consulta Sintaxis de consulta de SQL estándar.

OP_ID es necesario para la mayoría de las consultas y puedes obtenerlo de la respuesta AnalyzeIamPolicyLongrunning. Por ejemplo, en gcloud verás que OP_ID es 123456 en "Usa [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] para verificar el estado de la operación".

Enumerar operaciones

Tu tabla podría almacenar resultados de varias operaciones AnalyzeIamPolicyLongrunning. Puedes usar la siguiente consulta para enumerarlos:

SELECT DISTINCT
  requestTime,
  opName
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
ORDER BY 1 DESC
;

Enumera análisis de una operación

En una operación AnalyzeIamPolicyLongrunning, puede haber varios registros de análisis generados. Por ejemplo, cuando habilitas la opción analyze_service_account_impersonation en tu solicitud, el resultado podría contener un análisis principal (con analysisId 0) y varios análisis de robo de identidad de cuentas de servicio.

Puedes usar la siguiente consulta e ingresar un nombre de operación para conocer todos los análisis.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisId,
  requestTime,
  TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery,
  analysis.fullyExplored,
  TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
WHERE opName=_opName
ORDER BY 1
;

Enumera las ACE (entradas de control de acceso) en un análisis

Una ACE es una entrada de control de acceso {identity, role(s)/permission(s), resource}. Puede usar la siguiente consulta para enumerar las ACE en un análisis.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName
AND analysisId = 0
ORDER BY 1,2,3,4
;

Enumera las ACE (entradas de control de acceso) con vinculación de política de IAM en un análisis

En esta consulta, enumeramos la vinculación ACE y de la política de IAM y que esta ACE genera para un análisis.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission,
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2,3,4
;

Enumera las vinculaciones de políticas de IAM en un análisis

En esta consulta, enumeramos las vinculaciones de políticas de IAM que aparecen en un análisis.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`
WHERE opName=_opName AND analysisId = 0
ORDER BY 1, 2
;

Enumera las vinculaciones de políticas de IAM con las ACE(entrada de control de acceso) en un análisis

En esta consulta, enumeramos las vinculaciones de políticas de IAM con sus ACE derivadas en un análisis

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding,
  TO_JSON_STRING(analysisResult.identityList.identities, true) as identities,
  TO_JSON_STRING(acls.accesses, true) as accesses,
  TO_JSON_STRING(acls.resources, true) as resources
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.accessControlLists) AS acls
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2
;