Visualizzare i dati personalizzati dalle policy del sistema operativo per la tua organizzazione

Questo documento descrive come utilizzare VM Manager, Cloud Asset Inventory e BigQuery per visualizzare i dati personalizzati e i messaggi di errore di applicazione delle policy del sistema operativo in tutta l'organizzazione. Utilizza questo flusso di lavoro quando hai bisogno di report a livello di organizzazione su configurazioni VM personalizzate, output di script o errori di esecuzione delle policy che gli stati di conformità standard non acquisiscono.

Per raccogliere dati personalizzati, configura un outputFilePath nella policy del sistema operativo, ovvero il percorso locale sulla VM in cui lo script della policy scrive testo personalizzato o output JSON. VM Manager legge l'output da questo percorso e lo archivia nel report sull'assegnazione delle policy del sistema operativo. Puoi quindi esportare questi report in BigQuery utilizzando Cloud Asset Inventory per eseguire query sui risultati in tutta la flotta di VM.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per esportare i dati delle risorse in BigQuery ed eseguire query sui dati delle policy del sistema operativo personalizzate, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto, nella cartella o nell'organizzazione:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per esportare i dati delle risorse in BigQuery ed eseguire query sui dati delle policy del sistema operativo personalizzate. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per esportare i dati delle risorse in BigQuery ed eseguire query sui dati delle policy del sistema operativo personalizzate sono necessarie le seguenti autorizzazioni:

  • cloudasset.assets.exportOSInventories
  • cloudasset.assets.exportResource
  • bigquery.datasets.get
  • bigquery.tables.create
  • bigquery.tables.update
  • bigquery.tables.get
  • bigquery.jobs.create

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Policy del sistema operativo di esempio

Prima di poter esportare ed eseguire query sui dati personalizzati in BigQuery, devi creare e assegnare un criterio del sistema operativo che raccolga l'output personalizzato dalle tue VM. Per maggiori informazioni, consulta Crea un'assegnazione delle policy del sistema operativo.

Per raccogliere dati personalizzati, definisci una policy del sistema operativo con una risorsa exec che include le seguenti sezioni:

  • validate: verifica se la VM corrisponde allo stato selezionato. Nelle seguenti policy di esempio, lo script validate esce con il codice 101 per indicare che la risorsa non corrisponde allo stato selezionato. Questo codice di uscita attiva lo script enforce a ogni valutazione.
  • enforce: specifica il campo outputFilePath, esegue il comando personalizzato, scrive l'output nel percorso specificato ed esce con il codice 100 per indicare l'applicazione riuscita.

Policy del sistema operativo che restituisce una stringa

La seguente policy del sistema operativo di esempio restituisce una stringa che contiene la versione kernel dell'istanza 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

Policy del sistema operativo che restituisce un file JSON

Il seguente criterio del sistema operativo di esempio restituisce un oggetto JSON contenente il nome del sistema operativo e la versione 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

Esportare i dati di VM Manager in BigQuery

Dopo che VM Manager applica la policy del sistema operativo, Cloud Asset Inventory raccoglie i report sull'inventario del sistema operativo e sull'assegnazione delle policy del sistema operativo risultanti nell'intera organizzazione. Quando esporti questi dati in BigQuery con il flag --per-asset-type, Cloud Asset Inventory crea una tabella separata per ogni tipo di asset. La tabella <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport risultante memorizza gli output delle norme personalizzate e i messaggi di errore di applicazione.

Per esportare i dati dell'inventario del sistema operativo e delle risorse in BigQuery, segui questi passaggi:

  1. Per identificare l'ID organizzazione, esegui questo comando:

    gcloud projects get-ancestors PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Per esportare i dati dell'inventario del sistema operativo raccolti da VM Manager dalle tue istanze VM, esegui questo 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"
    

    Sostituisci i seguenti segnaposto con i tuoi valori:

    • ORGANIZATION_ID: l'ID organizzazione.
    • BQ_PROJECT_ID: l'ID del progetto che contiene il set di dati BigQuery.
    • DATASET_ID: l'ID del tuo set di dati BigQuery (ad esempio, cai_exp).
  3. Per esportare i metadati delle risorse, inclusi i report di assegnazione delle policy del sistema operativo, in BigQuery, esegui questo comando:

    gcloud asset export \
        --content-type=resource \
        --organization=ORGANIZATION_ID \
        --per-asset-type \
        --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"
    

    Sostituisci i seguenti segnaposto con i tuoi valori:

    • ORGANIZATION_ID: l'ID organizzazione.
    • BQ_PROJECT_ID: l'ID del progetto che contiene il set di dati BigQuery.
    • DATASET_ID: l'ID del tuo set di dati BigQuery (ad esempio, cai_exp).

    Al termine dell'esportazione, Cloud Asset Inventory crea la tabella res_osconfig_googleapis_com_OSPolicyAssignmentReport nel set di dati BigQuery. Per saperne di più, consulta Esportare lo snapshot di un asset.

Eseguire query sui dati delle policy del sistema operativo personalizzate in BigQuery

Dopo aver esportato i dati degli asset in BigQuery, puoi eseguire query sulla tabella res_osconfig_googleapis_com_OSPolicyAssignmentReport per visualizzare output personalizzati e messaggi di errore di applicazione dei criteri del sistema operativo.

Per eseguire una query in BigQuery:

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, incolla una delle seguenti query SQL:

    • Output del testo della query:

      La seguente query restituisce la versione kernel che la policy del sistema operativo raccoglie per ogni istanza 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
        instance
      

      Sostituisci DATASET_ID con l'ID del tuo set di dati BigQuery (ad esempio cai_exp).

      L'output della query è simile alla seguente tabella:

      instance compliance_results
      ubuntu-1 5.15.0-1036-gcp
      ubuntu-2 5.15.0-1044-gcp
      rhel9-1 5.14.0-162.18.1.el9_1.x86_64
    • Output JSON della query:

      La seguente query estrae i campi name e kernel dall'output JSON e li restituisce come colonne separate per ogni istanza 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_latest
      

      Sostituisci DATASET_ID con l'ID del tuo set di dati BigQuery (ad esempio cai_exp).

      L'output della query è simile alla seguente tabella:

      instance os_name kernel_version
      ubuntu-1 Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP 5.15.0-1036-gcp
      rhel9-1 Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP 5.14.0-162.18.1.el9_1.x86_64
  3. Per eseguire la query, fai clic su Esegui.

Per saperne di più, consulta Eseguire una query.

Esaminare i messaggi di errore relativi all'applicazione

Quando una risorsa di policy del sistema operativo non supera la convalida o l'applicazione, VM Manager registra il messaggio di errore nel campo configSteps.errorMessage della tabella res_osconfig_googleapis_com_OSPolicyAssignmentReport. Puoi eseguire query su questo campo in BigQuery per risolvere i problemi di esecuzione delle policy nella tua organizzazione.

La seguente query restituisce i messaggi di errore di convalida o applicazione più recenti per ogni istanza 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

Sostituisci DATASET_ID con l'ID del tuo set di dati BigQuery (ad esempio cai_exp).

L'output della query è simile alla seguente tabella:

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

Passaggi successivi

Per saperne di più sulla gestione delle policy del sistema operativo e sull'analisi dei dati di conformità, consulta le seguenti risorse: