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 analizar políticas de IAM, excepto las del análisis de datos se escribe en tablas de BigQuery.
Antes de comenzar
Enable the Cloud Asset API.
Debes habilitar la API en el proyecto o la organización que usarás para enviar la para cada búsqueda. No tiene que ser el mismo recurso al que defines tu consulta.
Funciones y permisos requeridos
Se requieren los siguientes roles y permisos para ejecutar un análisis de políticas y exportar los resultados a BigQuery.
Roles de IAM obligatorios
A fin de obtener los permisos que necesitas para analizar una política y exportar los resultados a BigQuery solicita a tu administrador que te otorgue el los siguientes roles de IAM en el proyecto, la carpeta o la organización que permitirás tu consulta a:
-
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) -
Visualizador de recursos de Cloud (
roles/cloudasset.viewer
) -
Para analizar políticas con funciones de IAM personalizadas, haz lo siguiente:
Visualizador de roles (
roles/iam.roleViewer
) -
Si quieres usar Google Cloud CLI para analizar políticas, sigue estos pasos:
Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer
)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para analizar una política y exportar los resultados a en BigQuery. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para analizar una política y exportar los resultados a BigQuery:
-
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 de IAM personalizados, haz lo siguiente:
iam.roles.get
-
Si quieres usar Google Cloud CLI para analizar políticas, sigue estos pasos:
serviceusage.services.use
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Permisos necesarios de Google Workspace
Si quieres ver si una principal tiene ciertos roles o permisos como resultado
de su membresía en un grupo de Google Workspace, necesitas la groups.read
permiso de Google Workspace. Este permiso se encuentra en el Lector de grupos
Administrador y en roles más eficaces, como Administrador de grupos o Administrador avanzado
roles de seguridad. Consulta Cómo asignar roles de administrador específicos para obtener más información.
información.
Analiza las políticas y exporta los resultados
Console
En la consola de Google Cloud, ve a la página Analizador de políticas.
En la sección Analiza las políticas, busca la plantilla de consulta que deseas usar y, luego, haz clic en Crear consulta. Si deseas crear una consulta personalizada, haz clic Crear consulta personalizada.
En el campo Seleccionar el alcance de la consulta, selecciona el proyecto, la carpeta o la organización a los que deseas limitar el alcance de la consulta. El Analizador de políticas analizará el acceso a ese proyecto, carpeta u organización, así como cualquier recurso dentro de ese proyecto, organización o carpeta.
Asegúrate de que tus parámetros de consulta estén configurados de la siguiente manera:
- Si usas una plantilla de consulta, confirma los parámetros de consulta completados previamente.
- Si creas una consulta personalizada, configura los recursos, las principales, los roles y permisos que quieres consultar.
Para obtener más información sobre los tipos de consultas que puedes crear, consulta Cómo analizar políticas de IAM.
En el panel etiquetado con el nombre de la consulta, haz clic en Analizar > Exportar solo el resultado. El botón Exportar se abrirá el panel de resultados.
En la sección Establecer destino de exportación, ingresa la siguiente información:
- Proyecto: Es el proyecto en el que se encuentra tu conjunto de datos de BigQuery. ubicado.
- Conjunto de datos: Es el conjunto de datos de BigQuery que deseas exportar. los resultados de búsqueda.
- Tabla: El prefijo de las tablas de BigQuery en las que se encuentran los resultados del análisis se escribirán. Si una tabla con el prefijo especificado no existe, BigQuery crea una tabla nueva.
Haga clic en Continuar.
Opcional: En la sección Establecer configuración adicional, selecciona de servicio que desees:
- Partición: Indica si se debe particionar la tabla. Para obtener más información tablas particionadas, consulta Introducción a las tablas particionadas, tablas.
- Preferencia de escritura: Especifica la acción que ocurre si la tabla o partición de destino ya existe. De forma predeterminada, si la tabla o la partición ya existen, BigQuery adjunta los datos a la tabla o a la partición más reciente.
Haz clic en Exportar.
El Analizador de políticas ejecuta tu consulta y exporta los resultados al tabla especificada.
gcloud
Método AnalyzeIamPolicyLongrunning
le permite emitir una solicitud de análisis y obtener resultados en la ubicación
destino de BigQuery.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
RESOURCE_TYPE
: Es el tipo. del recurso al que quieres definir el alcance de tu búsqueda. Solo se analizarán las políticas de permisos de IAM asociadas a este recurso y a sus descendientes. Usa el valorproject
,folder
oorganization
.RESOURCE_ID
: Es el ID del El proyecto, la carpeta o la organización de Google Cloud al que quieres definir el alcance de la búsqueda. Solo Se analizarán las políticas de permisos de IAM adjuntas a este recurso y a sus elementos subordinados. Los ID de proyecto son strings alfanuméricas, comomy-project
. Los ID de carpeta y organización son numéricos, como123456789012
.PRINCIPAL
: La principal de datos que quieres analizar, de la formaPRINCIPAL_TYPE:ID
, por ejemplo,user:my-user@example.com
Para obtener una lista completa de los tipos de principales, consulta Identificadores principales.PERMISSIONS
: A una lista separada por comas de los permisos que deseas verificar, por ejemplo,compute.instances.get,compute.instances.start
Si incluyes varias permisos, el Analizador de políticas verificará cualquiera de los permisos enumerados.DATASET
: Es el conjunto de datos de BigQuery. en el formatoprojects/PROJECT_ID/datasets/DATASET_ID
, dondePROJECT_ID
es el ID alfanumérico de tu proyecto de Google Cloud.DATASET_ID
es el ID de tu conjunto de datos.TABLE_PREFIX
: Es el prefijo de las tablas de BigQuery en las que se escribirán los resultados del análisis. Si una tabla con los no existe el prefijo especificado, BigQuery crea una tabla nueva.PARTITION_KEY
: Opcional La clave de partición para la tabla particionada de BigQuery El Analizador de políticas solo admite claves de particiónREQUEST_TIME
.WRITE_DISPOSITION
: Opcional Especifica la acción que ocurre si la tabla o partición de destino ya existe. Para obtener una lista de los valores posibles, consultawriteDisposition
. De forma predeterminada, si la tabla o partición ya existe, BigQuery agregará los datos a la tabla o la partición más reciente.
Ejecuta el 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 que figura a continuación:
Analyze IAM Policy in progress. Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.
REST
Método AnalyzeIamPolicyLongrunning
le permite emitir una solicitud de análisis y obtener resultados en la ubicación
destino de BigQuery.
Para analizar una política de permiso de IAM y exportar los resultados a BigQuery, usa el método analyzeIamPolicyLongrunning
de la API de Cloud Asset Inventory.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
RESOURCE_TYPE
: Es el tipo. del recurso al que quieres definir el alcance de tu búsqueda. Solo políticas de permisos de IAM adjuntos a este recurso y a sus elementos subordinados. Usa el valorprojects
,folders
oorganizations
.RESOURCE_ID
: Es el ID del El proyecto, la carpeta o la organización de Google Cloud al que quieres definir el alcance de la búsqueda. Solo Se analizarán las políticas de permisos de IAM adjuntas a este recurso y a sus elementos subordinados. Los ID de proyecto son strings alfanuméricas, comomy-project
. Los ID de carpeta y organización son numéricos, como123456789012
.-
FULL_RESOURCE_NAME
: Opcional El nombre completo del recurso que en las que quieres analizar el acceso. Para obtener una lista de los formatos de nombre de recurso completos, consulta Formato de nombre de recurso. PRINCIPAL
: Opcional La principal cuyo acceso quieres analizar, en el formularioPRINCIPAL_TYPE:ID
, por ejemplo,user:my-user@example.com
Para obtener una lista completa de los tipos de principales, consulta Identificadores de principal.PERMISSION_1
,PERMISSION_2
…PERMISSION_N
: Opcional. El permisos que deseas verificar, por ejemplo,compute.instances.get
. Si mostrar varios permisos, el Analizador de políticas verificará cualquiera de los permisos enumerados.DATASET
: Es el conjunto de datos de BigQuery. en el formatoprojects/PROJECT_ID/datasets/DATASET_ID
, dondePROJECT_ID
es el ID alfanumérico de tu proyecto de Google Cloud.DATASET_ID
es el ID de tu conjunto de datos.TABLE_PREFIX
: Es el prefijo de las tablas de BigQuery en las que se escribirán los resultados del análisis. Si una tabla con los no existe el prefijo especificado, BigQuery crea una tabla nueva.PARTITION_KEY
: Opcional La clave de partición para la tabla particionada de BigQuery. El Analizador de políticas solo admite claves de particiónREQUEST_TIME
.WRITE_DISPOSITION
: Opcional Especifica la acción que ocurre si la tabla o partición de destino ya existe. Para obtener una lista de posibles de rendimiento, consultawriteDisposition
De forma predeterminada, si la tabla o partición ya existe, BigQuery agregará los datos a la tabla o 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, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003", "metadata": { "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata", "createTime": "2022-04-12T21:31:10.753173929Z" } }
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
En la consola de Google Cloud, ve a la página de BigQuery.
Para mostrar las tablas y vistas en el conjunto de datos, abre el panel de navegación. En la sección Explorador, selecciona el proyecto para expandirlo y, luego, seleccionar un conjunto de datos.
En la lista, seleccione las tablas con tu prefijo. La tabla con un sufijo
analysis
contiene la consulta y los metadatos (por ejemplo, el nombre de la operación, el tiempo de la solicitud y los errores no críticos). La tabla con el sufijoanalysis_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.Para ver una muestra del conjunto de datos, selecciona la pestaña 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
.
Consulta BigQuery
En esta sección, se proporcionan ejemplos de consultas en SQL para mostrarte cómo usar
Tablas de BigQuery escritas por AnalyzeIamPolicyLongrunning
. Para ver más
información sobre la sintaxis de BigQuery, consulta
Sintaxis de consultas en 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 ;