Ce document explique comment utiliser VM Manager, l'inventaire des éléments cloud et BigQuery pour afficher les données personnalisées et les messages d'erreur d'application des règles d'OS dans votre organisation. Utilisez ce workflow lorsque vous avez besoin de générer des rapports à l'échelle de l'organisation sur les configurations de VM personnalisées, les sorties de script ou les échecs d'exécution des règles que les états de conformité standards ne capturent pas.
Pour collecter des données personnalisées, vous configurez un outputFilePath dans votre règle de système d'exploitation. Il s'agit du chemin d'accès local sur la VM où votre script de règle écrit du texte personnalisé ou une sortie JSON. VM Manager lit le résultat de ce chemin d'accès et le stocke dans le rapport d'attribution de règles d'OS. Vous pouvez ensuite exporter ces rapports vers BigQuery en utilisant l'inventaire des éléments cloud pour interroger les résultats sur l'ensemble de votre parc de VM.
Avant de commencer
- Configurez VM Manager.
- Activez l'API Cloud Asset Inventory.
- Créez un ensemble de données BigQuery pour stocker les données exportées.
- Créez une attribution de règles d'OS qui génère des données personnalisées.
-
Si ce n'est pas déjà fait, configurez l'authentification.
L'authentification permet de valider votre identité pour accéder aux services et aux API Google Cloud . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes :
Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :
Console
Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud , vous n'avez pas besoin de configurer l'authentification.
gcloud
-
Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :
gcloud initSi vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
- Définissez une région et une zone par défaut.
Rôles requis
Pour obtenir les autorisations nécessaires pour exporter des données de ressources vers BigQuery et interroger des données de règles personnalisées du système d'exploitation, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet, le dossier ou l'organisation :
- Lecteur d'éléments Cloud (
roles/cloudasset.viewer) - Éditeur de données BigQuery (
roles/bigquery.dataEditor) - Utilisateur de job BigQuery (
roles/bigquery.jobUser)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ces rôles prédéfinis contiennent les autorisations requises pour exporter les données de ressources vers BigQuery et interroger les données personnalisées sur les règles du système d'exploitation. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Vous devez disposer des autorisations suivantes pour exporter les données de ressources vers BigQuery et interroger les données personnalisées des règles du système d'exploitation :
-
cloudasset.assets.exportOSInventories -
cloudasset.assets.exportResource -
bigquery.datasets.get -
bigquery.tables.create -
bigquery.tables.update -
bigquery.tables.get -
bigquery.jobs.create
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Exemples de règles d'OS
Avant de pouvoir exporter et interroger des données personnalisées dans BigQuery, vous devez créer et attribuer une règle OS qui collecte les sorties personnalisées de vos VM. Pour en savoir plus, consultez Créer une attribution de règles d'OS.
Pour collecter des données personnalisées, définissez une règle d'OS avec une ressource exec qui inclut les sections suivantes :
validate: vérifie si la VM correspond à l'état sélectionné. Dans les exemples de règles suivants, le scriptvalidatese termine avec le code101pour indiquer que la ressource ne correspond pas à l'état sélectionné. Ce code de sortie déclenche le scriptenforceà chaque évaluation.enforce: spécifie le champoutputFilePath, exécute la commande personnalisée, écrit le résultat dans le chemin d'accès spécifié et quitte avec le code100pour indiquer que l'application a réussi.
Règle d'OS qui génère une chaîne
L'exemple suivant de résultat de la stratégie OS génère une chaîne contenant la version du noyau de l'instance 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
Règle du système d'exploitation qui génère un fichier JSON
L'exemple de règle de système d'exploitation suivant génère un objet JSON contenant le nom du système d'exploitation et la version du noyau :
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
Exporter les données VM Manager vers BigQuery
Une fois que VM Manager a appliqué votre règle d'OS, inventaire des éléments cloud collecte les rapports d'inventaire d'OS et d'attribution de règles d'OS résultants dans votre organisation. Lorsque vous exportez ces données vers BigQuery avec l'indicateur --per-asset-type, inventaire des éléments cloud crée une table distincte pour chaque type d'actif. La table <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport résultante stocke les résultats de vos règles personnalisées et les messages d'erreur liés à l'application.
Pour exporter les données d'inventaire et de ressources de l'OS vers BigQuery, procédez comme suit :
Pour identifier l'ID d'organisation, exécutez la commande suivante :
gcloud projects get-ancestors PROJECT_IDRemplacez
PROJECT_IDpar l'ID du projet.Pour exporter les données d'inventaire du système d'exploitation que VM Manager collecte à partir de vos instances de VM, exécutez la commande suivante :
gcloud asset export \ --content-type=os-inventory \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"Remplacez les espaces réservés suivants par vos valeurs :
ORGANIZATION_ID: ID de votre organisation.BQ_PROJECT_ID: ID du projet contenant votre ensemble de données BigQuery.DATASET_ID: ID de votre ensemble de données BigQuery (par exemple,cai_exp).
Pour exporter les métadonnées de ressources, y compris les rapports d'attribution de règles d'OS, vers BigQuery, exécutez la commande suivante :
gcloud asset export \ --content-type=resource \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"Remplacez les espaces réservés suivants par vos valeurs :
ORGANIZATION_ID: votre ID d'organisation.BQ_PROJECT_ID: ID du projet contenant votre ensemble de données BigQuery.DATASET_ID: ID de votre ensemble de données BigQuery (par exemple,cai_exp).
Une fois l'exportation terminée, l'inventaire des éléments cloud crée la table
res_osconfig_googleapis_com_OSPolicyAssignmentReportdans votre ensemble de données BigQuery. Pour en savoir plus, consultez Exporter un instantané d'asset.
Interroger les données de règles d'OS personnalisées dans BigQuery
Une fois que vous avez exporté vos données d'éléments vers BigQuery, vous pouvez interroger la table res_osconfig_googleapis_com_OSPolicyAssignmentReport pour afficher les résultats personnalisés et les messages d'erreur d'application de vos règles OS.
Pour exécuter une requête dans BigQuery, procédez comme suit :
Dans la console Google Cloud , accédez à la page BigQuery.
Dans l'éditeur de requête, collez l'une des requêtes SQL suivantes :
Sortie du texte de la requête :
La requête suivante renvoie la version du noyau que la règle d'OS collecte pour chaque instance 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 instanceRemplacez
DATASET_IDpar l'ID de votre ensemble de données BigQuery (par exemple,cai_exp).Le résultat de la requête se présente comme suit :
instancecompliance_resultsubuntu-15.15.0-1036-gcpubuntu-25.15.0-1044-gcprhel9-15.14.0-162.18.1.el9_1.x86_64Sortie JSON de la requête :
La requête suivante extrait les champs
nameetkernelde la sortie JSON et les renvoie sous forme de colonnes distinctes pour chaque instance 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_latestRemplacez
DATASET_IDpar l'ID de votre ensemble de données BigQuery (par exemple,cai_exp).Le résultat de la requête se présente comme suit :
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
Pour exécuter la requête, cliquez sur Exécuter.
Pour en savoir plus, consultez Exécuter une requête.
Examiner les messages d'erreur liés à l'application des règles
Lorsqu'une ressource de règle d'OS échoue à la validation ou à l'application, VM Manager enregistre le message d'erreur dans le champ configSteps.errorMessage de la table res_osconfig_googleapis_com_OSPolicyAssignmentReport. Vous pouvez interroger ce champ dans BigQuery pour résoudre les échecs d'exécution des règles dans votre organisation.
La requête suivante renvoie les derniers messages d'erreur de validation ou d'application pour chaque instance 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
Remplacez DATASET_ID par l'ID de votre ensemble de données BigQuery (par exemple, cai_exp).
Le résultat de la requête se présente comme suit :
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 |
Étapes suivantes
Pour en savoir plus sur la gestion des règles du système d'exploitation et l'analyse des données de conformité, consultez les ressources suivantes :
- Consultez les bonnes pratiques d'utilisation de VM Manager dans une organisation.
- Consultez la présentation des règles d'OS.
- Afficher les rapports de conformité aux règles d'OS
- Exportez les métadonnées de l'élément vers BigQuery.
- Exécuter des requêtes interactives et par lot dans BigQuery