Benutzerdefinierte Daten aus Betriebssystemrichtlinien für Ihre Organisation ansehen

In diesem Dokument wird beschrieben, wie Sie mit VM Manager, Cloud Asset Inventory und BigQuery benutzerdefinierte Daten und Fehlermeldungen zur Erzwingung von Betriebssystemrichtlinien in Ihrem Unternehmen ansehen können. Verwenden Sie diesen Workflow, wenn Sie organisationsweite Berichte zu benutzerdefinierten VM-Konfigurationen, Scriptausgaben oder Richtlinienausführungsfehlern benötigen, die von den Standardkonformitätsstatus nicht erfasst werden.

Wenn Sie benutzerdefinierte Daten erfassen möchten, konfigurieren Sie einen outputFilePath in Ihrer Betriebssystemrichtlinie. Das ist der lokale Pfad auf der VM, in den Ihr Richtlinienscript benutzerdefinierten Text oder eine JSON-Ausgabe schreibt. VM Manager liest die Ausgabe aus diesem Pfad und speichert sie im Bericht zur Zuweisung von Betriebssystemrichtlinien. Anschließend können Sie diese Berichte nach BigQuery exportieren, indem Sie Cloud Asset Inventory verwenden, um die Ergebnisse für Ihre VM-Flotte abzufragen.

Hinweis

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt, den Ordner oder die Organisation zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Exportieren von Ressourcendaten nach BigQuery und zum Abfragen benutzerdefinierter Daten für Betriebssystemrichtlinien benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Exportieren von Ressourcendaten nach BigQuery und zum Abfragen benutzerdefinierter Daten für Betriebssystemrichtlinien erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um Ressourcendaten nach BigQuery zu exportieren und benutzerdefinierte Daten zu Betriebssystemrichtlinien abzufragen:

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

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Beispiel für Betriebssystemrichtlinien

Bevor Sie benutzerdefinierte Daten in BigQuery exportieren und abfragen können, müssen Sie eine Betriebssystemrichtlinie erstellen und zuweisen, mit der benutzerdefinierte Ausgaben von Ihren VMs erfasst werden. Weitere Informationen finden Sie unter Zuweisung von Betriebssystemrichtlinien erstellen.

Wenn Sie benutzerdefinierte Daten erfassen möchten, definieren Sie eine Betriebssystemrichtlinie mit einer exec-Ressource, die die folgenden Abschnitte enthält:

  • validate: Prüft, ob die VM dem ausgewählten Status entspricht. In den folgenden Beispielrichtlinien wird das validate-Script mit dem Code 101 beendet, um anzugeben, dass die Ressource nicht dem ausgewählten Status entspricht. Dieser Beendigungscode löst das enforce-Skript bei jeder Auswertung aus.
  • enforce: Gibt das Feld outputFilePath an, führt den benutzerdefinierten Befehl aus, schreibt die Ausgabe in den angegebenen Pfad und beendet den Vorgang mit dem Code 100, um eine erfolgreiche Durchsetzung anzugeben.

Betriebssystemrichtlinie, die einen String ausgibt

Die folgende Beispielausgabe der Betriebssystemrichtlinie enthält einen String mit der Kernel-Version der VM-Instanz:

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

Betriebssystemrichtlinie, die eine JSON-Datei ausgibt

Die folgende Beispielrichtlinie für das Betriebssystem gibt ein JSON-Objekt aus, das den Namen des Betriebssystems und die Kernel-Version enthält:

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

VM Manager-Daten nach BigQuery exportieren

Nachdem VM Manager Ihre Betriebssystemrichtlinie erzwungen hat, erfasst Cloud Asset Inventory die resultierenden Berichte zum Betriebssysteminventar und zur Zuweisung von Betriebssystemrichtlinien in Ihrer Organisation. Wenn Sie diese Daten mit dem Flag --per-asset-type nach BigQuery exportieren, erstellt Cloud Asset Inventory für jeden Asset-Typ eine separate Tabelle. In der resultierenden <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport-Tabelle werden die Ausgaben Ihrer benutzerdefinierten Richtlinie und die Fehlermeldungen zur Durchsetzung gespeichert.

So exportieren Sie Inventar- und Ressourcendaten des Betriebssystems nach BigQuery:

  1. Führen Sie den folgenden Befehl aus, um Ihre Organisations-ID zu ermitteln:

    gcloud projects get-ancestors PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  2. Führen Sie den folgenden Befehl aus, um die OS Inventory-Daten zu exportieren, die VM Manager von Ihren VM-Instanzen erfasst:

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

    Ersetzen Sie die folgenden Platzhalter durch Ihre Werte:

    • ORGANIZATION_ID: Ihre Organisations-ID.
    • BQ_PROJECT_ID: die ID des Projekts, das Ihr BigQuery-Dataset enthält.
    • DATASET_ID: die ID Ihres BigQuery-Datasets (z. B. cai_exp).
  3. Führen Sie den folgenden Befehl aus, um die Ressourcenmetadaten, einschließlich der Zuweisungsberichte für Betriebssystemrichtlinien, nach BigQuery zu exportieren:

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

    Ersetzen Sie die folgenden Platzhalter durch Ihre Werte:

    • ORGANIZATION_ID: Ihre Organisations-ID.
    • BQ_PROJECT_ID: die ID des Projekts, das Ihr BigQuery-Dataset enthält.
    • DATASET_ID: die ID Ihres BigQuery-Datasets (z. B. cai_exp).

    Wenn der Export abgeschlossen ist, erstellt Cloud Asset Inventory die Tabelle res_osconfig_googleapis_com_OSPolicyAssignmentReport in Ihrem BigQuery-Dataset. Weitere Informationen finden Sie unter Asset-Snapshot exportieren.

Daten benutzerdefinierter Betriebssystemrichtlinien in BigQuery abfragen

Nachdem Sie Ihre Asset-Daten nach BigQuery exportiert haben, können Sie die Tabelle res_osconfig_googleapis_com_OSPolicyAssignmentReport abfragen, um benutzerdefinierte Ausgaben und Fehlermeldungen zur Durchsetzung Ihrer OS-Richtlinien aufzurufen.

So führen Sie eine Abfrage in BigQuery aus:

  1. Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Fügen Sie eine der folgenden SQL-Abfragen in den Abfrageeditor ein:

    • Ausgabe des Abfragetexts:

      Die folgende Abfrage gibt die Kernel-Version zurück, die von der Betriebssystemrichtlinie für jede VM-Instanz erfasst wird:

      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
      

      Ersetzen Sie DATASET_ID durch die ID Ihres BigQuery-Datasets (z. B. cai_exp).

      Die Ausgabe der Abfrage sieht in etwa so aus:

      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
    • JSON-Ausgabe abfragen:

      Mit der folgenden Abfrage werden die Felder name und kernel aus der JSON-Ausgabe extrahiert und als separate Spalten für jede VM-Instanz zurückgegeben:

      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
      

      Ersetzen Sie DATASET_ID durch die ID Ihres BigQuery-Datasets (z. B. cai_exp).

      Die Ausgabe der Abfrage sieht in etwa so aus:

      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. Klicken Sie zum Ausführen der Abfrage auf Ausführen.

Weitere Informationen finden Sie unter Abfrage ausführen.

Fehlermeldungen zu Erzwingungsmaßnahmen ansehen

Wenn die Validierung oder Erzwingung einer Betriebssystemrichtlinienressource fehlschlägt, wird die Fehlermeldung von VM Manager im Feld configSteps.errorMessage der Tabelle res_osconfig_googleapis_com_OSPolicyAssignmentReport aufgezeichnet. Sie können dieses Feld in BigQuery abfragen, um Fehler bei der Richtlinienausführung in Ihrer Organisation zu beheben.

Mit der folgenden Abfrage werden die neuesten Validierungs- oder Erzwingungsfehlermeldungen für jede VM-Instanz zurückgegeben:

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

Ersetzen Sie DATASET_ID durch die ID Ihres BigQuery-Datasets (z. B. cai_exp).

Die Ausgabe der Abfrage sieht in etwa so aus:

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

Nächste Schritte

Weitere Informationen zum Verwalten von Betriebssystemrichtlinien und Analysieren von Compliance-Daten finden Sie in den folgenden Ressourcen: