Escribir análisis de políticas en BigQuery

En esta página se explica cómo analizar políticas de gestión de identidades y accesos (IAM) de forma asíncrona y escribir los resultados en BigQuery. El proceso es similar al de analizar políticas de gestión de identidades y accesos, excepto que el resultado del análisis se escribe en tablas de BigQuery.

Antes de empezar

Enable the Cloud Asset API.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the API

Debes habilitar la API en el proyecto que vayas a usar para enviar la consulta. No tiene por qué ser el mismo recurso al que acotas tu consulta.

Roles y permisos necesarios

Para ejecutar un análisis de políticas y exportar los resultados a BigQuery, se necesitan los siguientes roles y permisos.

Roles de gestión de identidades y accesos necesarios

Para obtener los permisos que necesitas para analizar una política y exportar los resultados a BigQuery, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto, la carpeta o la organización en los que quieras acotar tu consulta:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para analizar una política y exportar los resultados a BigQuery. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para analizar una política y exportar los resultados a BigQuery, se necesitan los siguientes permisos:

  • bigquery.datasets.create
  • bigquery.jobs.create
  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.updateData
  • bigquery.tables.update
  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • Para analizar políticas con roles personalizados de gestión de identidades y accesos, sigue estos pasos: iam.roles.get
  • Para usar Google Cloud CLI y analizar las políticas, sigue estos pasos: serviceusage.services.use

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Permisos de Google Workspace necesarios

Si quieres ver si una cuenta principal tiene determinados roles o permisos como resultado de su pertenencia a un grupo de Google Workspace, necesitas el permiso de groups.readGoogle Workspace. Este permiso se incluye en el rol Administrador de lector de grupos y en roles más potentes, como los de administrador de grupos o superadministrador. Consulta más información en el artículo Asignar roles de administrador específicos.

Analizar políticas y exportar resultados

Consola

  1. En la consola de Google Cloud , ve a la página Analizador de políticas.

    Ir a Analizador de políticas

  2. En la sección Analizar políticas, busca la plantilla de consulta que quieras usar y haz clic en Crear consulta. Si quieres crear una consulta personalizada, haz clic en Crear consulta personalizada.

  3. En el campo Seleccionar ámbito de la consulta, selecciona el proyecto, la carpeta o la organización en los que quieras acotar la consulta. Analizador de políticas analizará el acceso a ese proyecto, carpeta u organización, así como a los recursos que contenga.

  4. Asegúrate de que los parámetros de consulta estén definidos:

    • Si usas una plantilla de consulta, confirma los parámetros de consulta rellenados previamente.
    • Si vas a crear una consulta personalizada, define los recursos, las entidades, los roles y los permisos que quieras consultar.

    Para obtener más información sobre los tipos de consultas que puedes crear, consulta Analizar políticas de IAM.

  5. En el panel con el nombre de la consulta, haz clic en Analizar > Exportar solo el resultado. Se abrirá el panel Exportar resultados.

  6. En la sección Define el destino de exportación, introduce la siguiente información:

    • Proyecto: el proyecto en el que se encuentra tu conjunto de datos de BigQuery.
    • Conjunto de datos: el conjunto de datos de BigQuery al que quiere exportar los resultados.
    • Tabla: prefijo de las tablas de BigQuery en las que se escribirán los resultados del análisis. Si no existe ninguna tabla con el prefijo especificado, BigQuery crea una.
  7. Haz clic en Continuar.

  8. Opcional: En la sección Configurar ajustes adicionales, selecciona las opciones que quieras:

    • Particiones: indica si se va a particionar la tabla. Para obtener más información sobre las tablas con particiones, consulta el artículo Introducción a las tablas con particiones.
    • Preferencia de escritura: especifica la acción que se produce si la tabla o la partición de destino ya existen. De forma predeterminada, si la tabla o la partición ya existen, BigQuery añade los datos a la tabla o a la partición más reciente.
  9. Haz clic en Exportar.

Analizador de políticas ejecuta la consulta y exporta los resultados a la tabla especificada.

gcloud

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

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • RESOURCE_TYPE: el tipo de recurso al que quieres acotar la búsqueda. Solo se analizarán las políticas de permiso de gestión de identidades y accesos asociadas a este recurso y a sus descendientes. Usa el valor project, folder o organization.
  • RESOURCE_ID: el ID delGoogle Cloud proyecto, la carpeta o la organización en los que quieres acotar la búsqueda. Solo se analizarán las políticas de permiso de gestión de identidades y accesos asociadas a este recurso y a sus descendientes. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • PRINCIPAL: la entidad de seguridad principal cuyo acceso quieres analizar, con el formato PRINCIPAL_TYPE:ID. Por ejemplo, user:my-user@example.com. Para ver una lista completa de los tipos de principales, consulta Identificadores de principales.
  • PERMISSIONS: una lista separada por comas de los permisos que quieres comprobar. Por ejemplo, compute.instances.get,compute.instances.start. Si incluyes varios permisos, Analizador de políticas comprobará si se ha concedido alguno de ellos.
  • DATASET: el conjunto de datos de BigQuery con el formato projects/PROJECT_ID/datasets/DATASET_ID, donde PROJECT_ID es el ID alfanumérico de su proyecto Google Cloud y DATASET_ID es el ID de su conjunto de datos.
  • TABLE_PREFIX: prefijo de las tablas de BigQuery en las que se escribirán los resultados del análisis. Si no existe ninguna tabla con el prefijo especificado, BigQuery crea una.
  • PARTITION_KEY: opcional. Clave de partición de la tabla con particiones de BigQuery. Analizador de políticas solo admite claves de partición REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica la acción que se lleva a cabo si la tabla o la partición de destino ya existen. Para ver una lista de los valores posibles, consulta writeDisposition. De forma predeterminada, si la tabla o la partición ya existen, BigQuery añade los datos a la tabla o a la partición más reciente.

Ejecuta el comando gcloud asset analyze-iam-policy-longrunning:

Linux, macOS o Cloud Shell

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --identity=PRINCIPAL \
    --permissions='PERMISSIONS' \
    --bigquery-dataset=DATASET \
    --bigquery-table-prefix=TABLE_PREFIX \
    --bigquery-partition-key=PARTITION_KEY \
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (PowerShell)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --identity=PRINCIPAL `
    --permissions='PERMISSIONS' `
    --bigquery-dataset=DATASET `
    --bigquery-table-prefix=TABLE_PREFIX `
    --bigquery-partition-key=PARTITION_KEY `
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (cmd.exe)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --identity=PRINCIPAL ^
    --permissions='PERMISSIONS' ^
    --bigquery-dataset=DATASET ^
    --bigquery-table-prefix=TABLE_PREFIX ^
    --bigquery-partition-key=PARTITION_KEY ^
    --bigquery-write-disposition=WRITE_DISPOSITION

Deberías recibir una respuesta similar a la siguiente:

Analyze IAM Policy in progress.
Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.

REST

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

Para analizar una política de permisos de IAM y exportar los resultados a BigQuery, usa el método analyzeIamPolicyLongrunning de la API Cloud Asset Inventory.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • RESOURCE_TYPE: el tipo de recurso al que quieres acotar la búsqueda. Solo se analizarán las políticas de permiso de gestión de identidades y accesos asociadas a este recurso y a sus descendientes. Usa el valor projects, folders o organizations.
  • RESOURCE_ID: el ID delGoogle Cloud proyecto, la carpeta o la organización en los que quieres acotar la búsqueda. Solo se analizarán las políticas de permiso de gestión de identidades y accesos asociadas a este recurso y a sus descendientes. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • FULL_RESOURCE_NAME: opcional. Nombre de recurso completo del recurso del que quieres analizar el acceso. Para ver una lista de los formatos de nombre de recurso completo, consulta Formato de nombre de recurso.
  • PRINCIPAL: opcional. La principal cuyo acceso quiere analizar, con el formato PRINCIPAL_TYPE:ID, por ejemplo, user:my-user@example.com. Para ver una lista completa de los tipos de principales, consulta Identificadores de principales.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: opcional. Los permisos que quieres comprobar (por ejemplo, compute.instances.get). Si incluye varios permisos, Analizador de políticas comprobará si se ha concedido alguno de ellos.
  • DATASET: el conjunto de datos de BigQuery con el formato projects/PROJECT_ID/datasets/DATASET_ID, donde PROJECT_ID es el ID alfanumérico de su proyecto Google Cloud y DATASET_ID es el ID de su conjunto de datos.
  • TABLE_PREFIX: prefijo de las tablas de BigQuery en las que se escribirán los resultados del análisis. Si no existe ninguna tabla con el prefijo especificado, BigQuery crea una.
  • PARTITION_KEY: opcional. Clave de partición de la tabla con particiones de BigQuery. Analizador de políticas solo admite claves de partición REQUEST_TIME.
  • WRITE_DISPOSITION: opcional. Especifica la acción que se lleva a cabo si la tabla o la partición de destino ya existen. Para ver una lista de los valores posibles, consulta writeDisposition. De forma predeterminada, si la tabla o la partición ya existen, BigQuery añade los datos a la tabla o a la partición más reciente.

Método HTTP y URL:

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning

Cuerpo JSON de la solicitud:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  },
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "DATASET",
      "tablePrefix": "TABLE_PREFIX",
      "partitionKey": "PARTITION_KEY",
      "writeDisposition": "WRITE_DISPOSITION"
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata",
    "createTime": "2022-04-12T21:31:10.753173929Z"
  }
}

Ver los resultados del análisis de la política de gestión de identidades y accesos

Para ver los resultados del análisis de la política de gestión de identidades y accesos, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. Para mostrar las tablas y las vistas del conjunto de datos, abre el panel de navegación. En la sección Explorador, selecciona tu proyecto para desplegarlo y, a continuación, selecciona un conjunto de datos.

  3. En la lista, selecciona las tablas que tengan tu prefijo. La tabla con el sufijo analysis contiene la consulta y los metadatos (por ejemplo, el nombre de la operación, la hora de la solicitud y los errores no críticos). La tabla con el sufijo analysis_result muestra los 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 un conjunto de datos de muestra, seleccione la pestaña Vista previa.

API

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

Puedes configurar los siguientes parámetros opcionales para controlar la salida.

  • maxResults es el número máximo de resultados que se devolverán.
  • selectedFields es una lista de columnas separadas por comas que se van a devolver. Si no se especifica, se devuelven todas las columnas.
  • startIndex es el índice basado en cero de la fila inicial que se va a leer.

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

Consultar BigQuery

En esta sección se proporcionan consultas de SQL de ejemplo para mostrar 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 SQL estándar.

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

Mostrar operaciones

En tu tabla se pueden almacenar los resultados de varias AnalyzeIamPolicyLongrunning operaciones. Puedes usar la siguiente consulta para enumerarlos todos:

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

Mostrar análisis de una operación

En una operación AnalyzeIamPolicyLongrunning, se pueden generar varios registros de análisis. Por ejemplo, si habilitas la opción analyze_service_account_impersonation en tu solicitud, el resultado podría contener un análisis principal (con el ID de análisis 0) y varios análisis de suplantación de identidad de cuenta de servicio.

Puedes usar la siguiente consulta para obtener todos los análisis proporcionando un nombre de operación.

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
;

Lista de ACEs(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 los ACEs 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
;

Listar ACEs(entradas de control de acceso) con vinculación de políticas de gestión de identidades y accesos en un análisis

En esta consulta, se muestran tanto el ACE como el enlace de la política de IAM que genera este ACE 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
;

Mostrar enlaces de políticas de gestión de identidades y accesos en un análisis

En esta consulta, enumeramos las vinculaciones de políticas de IAM que han aparecido 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
;

Lista de enlaces de políticas de gestión de identidades y accesos con ACE(entrada de control de acceso) en un análisis

En esta consulta, enumeramos las vinculaciones de políticas de gestión de identidades y accesos con sus ACEs derivados 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
;