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.
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:
-
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) -
Visor de recursos de Cloud (
roles/cloudasset.viewer
) -
Para analizar políticas con roles de gestión de identidades y accesos personalizados, sigue estos pasos:
Lector de roles (
roles/iam.roleViewer
) -
Para usar Google Cloud CLI y analizar las políticas, sigue estos pasos:
Consumidor de uso de servicios (
roles/serviceusage.serviceUsageConsumer
)
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.read
Google 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
En la consola de Google Cloud , ve a la página Analizador de políticas.
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.
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.
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.
En el panel con el nombre de la consulta, haz clic en Analizar > Exportar solo el resultado. Se abrirá el panel Exportar resultados.
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.
Haz clic en Continuar.
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.
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 valorproject
,folder
oorganization
.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, comomy-project
. Los IDs de carpetas y organizaciones son numéricos, como123456789012
.PRINCIPAL
: la entidad de seguridad principal cuyo acceso quieres analizar, con el formatoPRINCIPAL_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 formatoprojects/PROJECT_ID/datasets/DATASET_ID
, dondePROJECT_ID
es el ID alfanumérico de su proyecto Google Cloud yDATASET_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ónREQUEST_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, consultawriteDisposition
. 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 valorprojects
,folders
oorganizations
.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, comomy-project
. Los IDs de carpetas y organizaciones son numéricos, como123456789012
.-
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 formatoPRINCIPAL_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 formatoprojects/PROJECT_ID/datasets/DATASET_ID
, dondePROJECT_ID
es el ID alfanumérico de su proyecto Google Cloud yDATASET_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ónREQUEST_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, consultawriteDisposition
. 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
En la Google Cloud consola, ve a la página BigQuery.
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.
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 sufijoanalysis_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.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 ;