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
- VM Manager einrichten
- Aktivieren Sie die Cloud Asset Inventory API.
- Erstellen Sie ein BigQuery-Dataset zum Speichern der exportierten Daten.
- Zuweisung von Betriebssystemrichtlinien erstellen, die benutzerdefinierte Daten ausgibt.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Cloud de Confiance by S3NS Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:
Wählen Sie den Tab für die geplante Verwendung der Beispiele auf dieser Seite aus:
Console
Wenn Sie über die Cloud de Confiance Console auf Cloud de Confiance by S3NS -Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.
gcloud
-
Installieren Sie die Google Cloud CLI und melden Sie sich dann mit Ihrer föderierten Identität in der gcloud CLI an. Nach der Anmeldung initialisieren Sie die Google Cloud CLI mit dem folgenden Befehl:
gcloud init
-
- Legen Sie eine Standardregion und -zone fest.
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:
- Cloud Asset Viewer (
roles/cloudasset.viewer) - BigQuery Data Editor (
roles/bigquery.dataEditor) - BigQuery Job User (
roles/bigquery.jobUser)
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 dasvalidate-Script mit dem Code101beendet, um anzugeben, dass die Ressource nicht dem ausgewählten Status entspricht. Dieser Beendigungscode löst dasenforce-Skript bei jeder Auswertung aus.enforce: Gibt das FeldoutputFilePathan, führt den benutzerdefinierten Befehl aus, schreibt die Ausgabe in den angegebenen Pfad und beendet den Vorgang mit dem Code100, 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:
Führen Sie den folgenden Befehl aus, um Ihre Organisations-ID zu ermitteln:
gcloud projects get-ancestors PROJECT_IDErsetzen Sie
PROJECT_IDdurch Ihre Projekt-ID.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).
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_OSPolicyAssignmentReportin 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:
Rufen Sie in der Cloud de Confiance Console die Seite BigQuery auf.
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 instanceErsetzen Sie
DATASET_IDdurch die ID Ihres BigQuery-Datasets (z. B.cai_exp).Die Ausgabe der Abfrage sieht in etwa so aus:
instancecompliance_resultsubuntu-15.15.0-1036-gcpubuntu-25.15.0-1044-gcprhel9-15.14.0-162.18.1.el9_1.x86_64JSON-Ausgabe abfragen:
Mit der folgenden Abfrage werden die Felder
nameundkernelaus 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_latestErsetzen Sie
DATASET_IDdurch die ID Ihres BigQuery-Datasets (z. B.cai_exp).Die Ausgabe der Abfrage sieht in etwa so aus:
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
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: