En este documento, se describe cómo usar VM Manager, Cloud Asset Inventory y BigQuery para ver datos personalizados y mensajes de error de aplicación de políticas del SO en toda tu organización. Usa este flujo de trabajo cuando necesites informes a nivel de la organización sobre configuraciones personalizadas de VM, resultados de secuencias de comandos o fallas en la ejecución de políticas que los estados de cumplimiento estándares no capturan.
Para recopilar datos personalizados, configura un outputFilePath en tu política de SO, que es la ruta de acceso local en la VM en la que tu secuencia de comandos de política escribe texto personalizado o resultados en formato JSON. VM Manager lee el resultado de esta ruta de acceso y lo almacena en el informe de asignación de política del SO. Luego, puedes exportar estos informes a BigQuery con Cloud Asset Inventory para consultar los resultados en toda tu flota de VM.
Antes de comenzar
- Configura VM Manager.
- Habilita la API de Cloud Asset Inventory.
- Crea un conjunto de datos de BigQuery para almacenar los datos exportados.
- Crea una asignación de política del SO que genere datos personalizados.
-
Si aún no lo hiciste, configura la autenticación.
La autenticación verifica tu identidad para acceder a los servicios y las APIs de Cloud de Confiance by S3NS . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:
Console
Cuando usas la consola de Cloud de Confiance para acceder a los servicios y las APIs de Cloud de Confiance by S3NS , no necesitas configurar la autenticación.
gcloud
-
Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada. Después de acceder, inicializa Google Cloud CLI con el siguiente comando:
gcloud init
-
- Configura una región y una zona predeterminadas.
Roles obligatorios
Para obtener los permisos que necesitas para exportar datos de recursos a BigQuery y consultar datos de políticas del SO personalizadas, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto, la carpeta o la organización:
- Visualizador de recursos de Cloud (
roles/cloudasset.viewer) - Editor de datos de BigQuery (
roles/bigquery.dataEditor) - Usuario de trabajo de BigQuery (
roles/bigquery.jobUser)
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 exportar datos de recursos a BigQuery y consultar datos de políticas del SO personalizadas. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para exportar datos de recursos a BigQuery y consultar datos de políticas del SO personalizadas:
-
cloudasset.assets.exportOSInventories -
cloudasset.assets.exportResource -
bigquery.datasets.get -
bigquery.tables.create -
bigquery.tables.update -
bigquery.tables.get -
bigquery.jobs.create
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Políticas del SO de ejemplo
Antes de exportar y consultar datos personalizados en BigQuery, debes crear y asignar una política del SO que recopile resultados personalizados de tus VMs. Para obtener más información, consulta Crea una asignación de política del SO.
Para recopilar datos personalizados, define una política de SO con un recurso exec que incluya las siguientes secciones:
validate: Verifica si la VM coincide con el estado seleccionado. En las siguientes políticas de ejemplo, la secuencia de comandosvalidatesale con el código101para indicar que el recurso no coincide con el estado seleccionado. Este código de salida activa la secuencia de comandosenforceen cada evaluación.enforce: Especifica el campooutputFilePath, ejecuta el comando personalizado, escribe el resultado en la ruta de acceso especificada y sale con el código100para indicar que la aplicación se realizó correctamente.
Política del SO que genera una cadena
La siguiente política del SO de ejemplo genera una cadena que contiene la versión del kernel de la instancia de VM:
id: return-kernel-version-policy
mode: ENFORCEMENT
resourceGroups:
- resources:
id: return-kernel-version
exec:
validate:
interpreter: SHELL
script: exit 101
enforce:
interpreter: SHELL
outputFilePath: policy-output.txt
script: uname -r > policy-output.txt && exit 100
Política del SO que genera un archivo JSON
La siguiente política de SO de ejemplo genera un objeto JSON que contiene el nombre del sistema operativo y la versión del kernel:
id: return-kernel-version-js-policy
mode: ENFORCEMENT
resourceGroups:
- resources:
id: return-kernel-version-js
exec:
validate:
interpreter: SHELL
script: exit 101
enforce:
interpreter: SHELL
outputFilePath: policy-output.json
script: |-
k=$(uname -r)
o=$(uname -a)
echo "{ \"name\": \""$o"\", \"kernel\": \""$k"\" }" > policy-output.json
exit 100
Exporta datos de VM Manager a BigQuery
Después de que VM Manager aplica tu política del SO, Cloud Asset Inventory recopila los informes resultantes del inventario del SO y de la asignación de políticas del SO en toda tu organización. Cuando exportas estos datos a BigQuery con la marca --per-asset-type, Cloud Asset Inventory crea una tabla independiente para cada tipo de recurso. La tabla <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport resultante almacena los resultados de tu política personalizada y los mensajes de error de aplicación.
Para exportar datos de inventario y recursos del SO a BigQuery, sigue estos pasos:
Para identificar el ID de organización, ejecuta el siguiente comando:
gcloud projects get-ancestors PROJECT_IDReemplaza
PROJECT_IDcon el ID del proyecto.Para exportar los datos de inventario del SO que VM Manager recopila de tus instancias de VM, ejecuta el siguiente comando:
gcloud asset export \ --content-type=os-inventory \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"Reemplaza los siguientes marcadores de posición por tus valores:
ORGANIZATION_ID: Tu ID de organización.BQ_PROJECT_ID: Es el ID del proyecto que contiene tu conjunto de datos de BigQuery.DATASET_ID: Es el ID de tu conjunto de datos de BigQuery (por ejemplo,cai_exp).
Para exportar los metadatos del recurso, incluidos los informes de asignación de políticas del SO, a BigQuery, ejecuta el siguiente comando:
gcloud asset export \ --content-type=resource \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"Reemplaza los siguientes marcadores de posición por tus valores:
ORGANIZATION_ID: Es el ID de tu organización.BQ_PROJECT_ID: Es el ID del proyecto que contiene tu conjunto de datos de BigQuery.DATASET_ID: Es el ID de tu conjunto de datos de BigQuery (por ejemplo,cai_exp).
Cuando se completa la exportación, Cloud Asset Inventory crea la tabla
res_osconfig_googleapis_com_OSPolicyAssignmentReporten tu conjunto de datos de BigQuery. Para obtener más información, consulta Exporta una instantánea del activo.
Consulta datos de políticas del SO personalizadas en BigQuery
Después de exportar los datos de tus recursos a BigQuery, puedes consultar la tabla res_osconfig_googleapis_com_OSPolicyAssignmentReport para ver los resultados personalizados y los mensajes de error de aplicación de tus políticas del SO.
Para ejecutar una consulta en BigQuery, sigue estos pasos:
En la consola de Cloud de Confiance , ve a la página BigQuery.
En el editor de consultas, pega una de las siguientes consultas en SQL:
Resultado del texto de la búsqueda:
La siguiente consulta devuelve la versión del kernel que recopila la política del SO para cada instancia de VM:
SELECT resource.data.instance as instance, ANY_VALUE( SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64(REPLACE(REPLACE( resource_compliances.execResourceOutput.enforcementOutput , '-', '+'), '_', '/'))) HAVING MAX updateTime) as compliance_results FROM `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`, UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances, UNNEST(resource_compliances.configSteps) as config_steps WHERE resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-policy" AND resource_compliances.osPolicyResourceId = "return-kernel-version" AND config_steps.type = "VALIDATION" GROUP BY instanceReemplaza
DATASET_IDpor el ID de tu conjunto de datos de BigQuery (por ejemplo,cai_exp).El resultado de la consulta es similar a la siguiente tabla:
instancecompliance_resultsubuntu-15.15.0-1036-gcpubuntu-25.15.0-1044-gcprhel9-15.14.0-162.18.1.el9_1.x86_64Salida de JSON de la consulta:
La siguiente consulta extrae los campos
nameykerneldel resultado JSON y los devuelve como columnas separadas para cada instancia de VM:WITH compliance_history AS ( SELECT updateTime, resource.data.instance, SAFE_CONVERT_BYTES_TO_STRING( FROM_BASE64( REPLACE( REPLACE( resource_compliances.execResourceOutput.enforcementOutput, '-', '+' ), '_', '/' ) ) ) as compliance_results FROM `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`, UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances, UNNEST(resource_compliances.configSteps) as config_steps WHERE resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-js-policy" AND resource_compliances.osPolicyResourceId = "return-kernel-version-js" AND config_steps.type = "VALIDATION" ), compliance_latest AS ( SELECT instance, ANY_VALUE(compliance_results HAVING MAX updateTime) as compliance_results FROM compliance_history GROUP BY instance ) SELECT instance, JSON_EXTRACT_SCALAR(compliance_results, "$.name") as os_name, JSON_EXTRACT_SCALAR(compliance_results, "$.kernel") as kernel_version FROM compliance_latestReemplaza
DATASET_IDpor el ID de tu conjunto de datos de BigQuery (por ejemplo,cai_exp).El resultado de la consulta es similar a la siguiente tabla:
instanceos_namekernel_versionubuntu-1Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP5.15.0-1036-gcprhel9-1Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP5.14.0-162.18.1.el9_1.x86_64
Para ejecutar la consulta, haz clic en Ejecutar.
Para obtener más información, consulta Ejecuta una consulta.
Revisa los mensajes de error de aplicación
Cuando un recurso de política de SO no supera la validación o la aplicación, VM Manager registra el mensaje de error en el campo configSteps.errorMessage de la tabla res_osconfig_googleapis_com_OSPolicyAssignmentReport. Puedes consultar este campo en BigQuery para solucionar problemas de fallas en la ejecución de políticas en toda tu organización.
La siguiente consulta devuelve los mensajes de error de validación o aplicación más recientes para cada instancia de VM:
SELECT
resource.data.instance AS instance,
resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId AS policy_id,
resource_compliances.osPolicyResourceId AS resource_id,
config_steps.type AS step_type,
ANY_VALUE(config_steps.errorMessage HAVING MAX updateTime) AS error_message
FROM
`DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) AS resource_compliances,
UNNEST(resource_compliances.configSteps) AS config_steps
WHERE
config_steps.errorMessage IS NOT NULL
AND config_steps.errorMessage != ""
GROUP BY
instance,
policy_id,
resource_id,
step_type
Reemplaza DATASET_ID por el ID de tu conjunto de datos de BigQuery (por ejemplo, cai_exp).
El resultado de la consulta es similar a la siguiente tabla:
instance |
policy_id |
resource_id |
step_type |
error_message |
|---|---|---|---|---|
ubuntu-2 |
return-kernel-version-policy |
return-kernel-version |
DESIRED_STATE_ENFORCEMENT |
Error running enforce script: exit status 1 |
¿Qué sigue?
Para obtener más información sobre cómo administrar las políticas de SO y analizar los datos de cumplimiento, consulta los siguientes recursos: