Auf dieser Seite wird erläutert, wie Sie mit Cloud Asset Inventory Ihre Secrets überwachen, Daten für die Analyse exportieren und leistungsstarke Abfragen ausführen können, um die benötigten Informationen zu erhalten.
Übersicht
Cloud Asset Inventory analysiert Ihre Google Cloud Umgebung und erfasst alle Änderungen an Ihren Cloud-Ressourcen, z. B. an virtuellen Maschinen, Datenbanken, Storage-Buckets und in diesem Zusammenhang an Ihren Secret Manager-Secrets. Die Integration zwischen Secret Manager und Cloud Asset Inventory bietet Ihnen folgende Vorteile:
-
Abfragen ausführen: Sie können nach bestimmten vertraulichen Informationen suchen oder Muster in Ihren vertraulichen Informationen erkennen.
-
Benachrichtigungen einrichten: Konfigurieren Sie Cloud Asset Inventory so, dass Benachrichtigungen an Pub/Sub gesendet werden, wenn bestimmte Ereignisse eintreten, z. B. wenn Secrets erstellt, geändert oder gelöscht werden.
-
Daten exportieren: Exportieren Sie Ihr vertrauliches Inventar nach BigQuery, um es detailliert zu analysieren und Berichte zu erstellen.
-
Secrets verwalten und analysieren: Sie können alle Ihre Secrets an einem Ort sehen (projektübergreifend und in Ihrer gesamten Organisation) und Secrets identifizieren, die möglicherweise falsch konfiguriert sind oder gegen die Sicherheitsrichtlinien Ihrer Organisation verstoßen. So können Sie beispielsweise Secrets finden, die nicht regelmäßig rotiert werden oder für die keine geeigneten Zugriffssteuerungen vorhanden sind.
Dies ist eine erweiterte Aufgabe für Secret Manager-Nutzer. Bevor Sie diese Seite lesen, empfehlen wir Ihnen, sich Folgendes anzusehen:
-
Secret Manager – Übersicht, um die wichtigsten Konzepte und Funktionen von Secret Manager zu verstehen
-
Cloud Asset Inventory, um Cloud Asset Inventory zu verstehen und seine umfassenden Funktionen zur Asset-Verwaltung zu sehen.
Secret Manager abfragen
Wenn Sie Ihre Secrets mit SQL-ähnlichen Abfragen analysieren möchten, empfehlen wir, Ihr Secret und Ihre Secret-Versionen nach BigQuery zu exportieren. Secret Manager ist nicht in Asset Search oder Policy Analyzer eingebunden. Bei diesen Abfragen werden die Google Cloud CLI und BigQuery verwendet, um Ihre Assets zu durchsuchen.
Beschränkungen
Die Verwendung von Cloud Asset Inventory zum Analysieren von Secret Manager-Ressourcen unterliegt der folgenden Einschränkung:
-
Cloud Asset Inventory unterstützt das Exportieren und Auflisten von Snapshots nur für die letzten fünf Wochen.
Asset-Änderungen überwachen
Cloud Asset Inventory verfolgt Echtzeit-Updates und unterstützt das Monitoring dieser Änderungen. Sie können Feeds konfigurieren, um jedes Mal, wenn sich Ihre Ressourcen ändern, Benachrichtigungen an eine Reihe von konfigurierten Pub/Sub-Themen zu senden. Darüber hinaus unterstützt Cloud Asset Inventory das Konfigurieren von Bedingungen für Ihre Feeds, sodass Sie bestimmte Änderungen für bestimmte Asset-Typen überwachen können. Informationen zum Auslösen von Workflows bei Asset-Änderungen finden Sie in der Pub/Sub-Dokumentation.
Assets in BigQuery exportieren
Durch den Export Ihrer Secrets und Secret-Versionen nach BigQuery können Sie SQL-ähnliche Abfragen für große Datenmengen ausführen und wertvolle Informationen über Ihre Assets gewinnen. Prüfen Sie vor dem Export Ihrer Assets, ob Ihr Dataset und Ihre Dienstkonten ordnungsgemäß konfiguriert sind.
Führen Sie den folgenden Befehl aus, um Ihre Assets zu exportieren:
gcloud
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
- CONTENT_TYPE: der Asset-Inhaltstyp (
RESOURCE
). - PROJECT_ID: die ID des Projekts, das die zu analysierenden Secrets enthält.
- SNAPSHOT_TIME: der Zeitpunkt, für den ein Ressourcen-Snapshot erstellt werden soll. Dieser liegt zwischen jetzt und 5 Wochen in der Vergangenheit.
- BIGQUERY_PROJECT_ID: die ID des Projekts, in dem sich die BigQuery-Tabelle befindet.
- DATASET_ID: die ID des BigQuery-Datasets.
- TABLE_NAME: die Tabelle, in die Sie Ihre Metadaten exportieren. Wenn sie nicht vorhanden ist, wird sie erstellt.
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud asset export \ --content-type=CONTENT_TYPE \ --project=PROJECT_ID \ --snapshot-time=SNAPSHOT_TIME \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --output-bigquery-force
Windows (PowerShell)
gcloud asset export ` --content-type=CONTENT_TYPE ` --project=PROJECT_ID ` --snapshot-time=SNAPSHOT_TIME ` --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME ` --output-bigquery-force
Windows (cmd.exe)
gcloud asset export ^ --content-type=CONTENT_TYPE ^ --project=PROJECT_ID ^ --snapshot-time=SNAPSHOT_TIME ^ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME ^ --output-bigquery-force
Weitere Informationen finden Sie unter Nach BigQuery exportieren.
Beispielabfragen
Mit diesen Beispielabfragen können Sie nach Secrets und Secret-Versionen mit bestimmten Eigenschaften suchen.
Regionale Secrets, die in den letzten zwei Wochen erstellt wurden
Suchen Sie nach Secrets (und ihren Attributen), die Ihrer Organisation in den letzten zwei Wochen hinzugefügt wurden.
BigQuery
SELECT name, FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location <> "global" AND DATE(JSON_VALUE(resource.data, '$.createTime')) > DATE_SUB(CURRENT_DATE(), INTERVAL 2 WEEK);
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.createTime>-P2W"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets an einem bestimmten Standort
Alle Secrets, die an einem bestimmten Ort gespeichert sind, z. B. us-central1
, finden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location = "us-central1";
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location = LOCATION AND resource.data.createTime>-P2W"
Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, das die zu analysierenden Secrets enthält
- LOCATION: der Google Cloud Speicherort der Secrets
Regionale Secret-Versionen, die vor mehr als 180 Tagen erstellt wurden
Listen Sie alle Secret-Versionen auf, die vor mehr als 180 Tagen erstellt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' resource.location <> "global" AND DATE(JSON_VALUE(resource.data, '$.createTime')) < DATE_SUB(CURRENT_DATE(), INTERVAL 180 DAY) AND JSON_VALUE(resource.data, '$.state') = "ENABLED";
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/SecretVersion' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.createTime < P6M AND resource.data.state = ENABLED"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets ohne konfigurierten CMEK
Listen Sie alle Secrets auf, die nicht mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK) verschlüsselt wurden:
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' resource.location <> "global" AND JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") IS NOT NULL;
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/SecretVersion' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = NULL) AND resource.data.state=ENABLED"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets mit konfiguriertem CMEK
Alle Secrets auflisten, die mit einem CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' resource.location <> "global" AND JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") IS NOT NULL;
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.customerManagedEncryption != NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets, die mit einem bestimmten CMEK verschlüsselt wurden
Secrets suchen, die mit einem bestimmten CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' resource.location <> "global" AND JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyName") = KMS_KEY_NAME;
Ersetzen Sie Folgendes:
-
BIGQUERY_TABLE: Der vollständige Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
-
KMS_KEY_NAME: die ID des Schlüssels oder die voll qualifizierte Kennzeichnung für den Schlüssel
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud beta asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.customerManagedEncryption.kmsKeyName=KMS_KEY_NAME"
Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, das die zu analysierenden Secrets enthält
- KMS_KEY_NAME: die ID des Schlüssels oder die voll qualifizierte Kennzeichnung für den Schlüssel
Regionale Secret-Versionen ohne konfigurierten CMEK
Alle aktivierten Secret-Versionen finden, die nicht mit einem CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' resource.location <> "global" AND JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyVersionName") IS NULL AND JSON_VALUE(resource.data, "$.state") = "ENABLED";
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/SecretVersion' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = NULL) AND resource.data.state=ENABLED"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secret-Versionen, die mit einem bestimmten CMEK verschlüsselt wurden
Alle aktivierten Secret-Versionen auflisten, die mit einer bestimmten CMEK-Version verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' resource.location <> "global" AND JSON_VALUE(resource.data, "$.customerManagedEncryption.kmsKeyVersionName") = KMS_KEY_VERSION_NAME AND JSON_VALUE(resource.data, "$.state") = "ENABLED";
Ersetzen Sie Folgendes:
-
BIGQUERY_TABLE: Der vollständige Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
-
KMS_KEY_VERSION_NAME: Die Versionsnummer des Cloud Key Management Service-Schlüssels
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/SecretVersion' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="(resource.location != global AND resource.data.customerManagedEncryption.kmsKeyVersionName = KMS_KEY_VERSION_NAME) AND resource.data.state=ENABLED"
Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, das die zu analysierenden Secrets enthält
- KMS_KEY_VERSION_NAME: die ID der Schlüsselversion
Regionale Secrets ohne konfigurierte Rotation
Alle Secrets suchen, die keinen Rotationsplan haben.
BigQuery
SELECT name FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location <> "global" AND JSON_EXTRACT(resource.data, '$.rotation') IS NULL;
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.rotation = NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets mit einem bestimmten Rotationszeitraum
Alle Secrets suchen, die planmäßig weniger als einmal alle 90 Tage rotiert werden:
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location <> "global" AND CAST( TRIM( JSON_VALUE(JSON_EXTRACT(resource.data, "$.rotation.rotationPeriod")),"s") AS INT64) < 86400 * 90 #Rotation period in seconds (86400s in 1 day * 90 days)
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") ROTATION_PERIOD_SECONDS=$((90 * 24 * 60 * 60)) gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.rotation != null AND resource.data.rotation.rotationPeriod <= ${ROTATION_PERIOD_SECONDS}s"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets, die in den nächsten 30 Tagen ablaufen
Secrets auflisten, die in den nächsten 30 Tagen ablaufen.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location <> "global" AND DATE(JSON_VALUE(resource.data, '$.expireTime')) < DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY);
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.expireTime < PD30"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Regionale Secrets mit einem konfigurierten Pub/Sub-Thema
Alle Secrets auflisten, für die mindestens ein Pub/Sub-Thema konfiguriert ist.
BigQuery
SELECT name, ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) AS topics_count, FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND resource.location <> "global" AND ARRAY_LENGTH(JSON_EXTRACT_ARRAY(resource.data, '$.topics')) > 0
Ersetzen Sie BIGQUERY_TABLE durch den vollständigen Pfad zur BigQuery-Tabelle, in die Sie alle Assets im Abschnitt Assets in BigQuery exportieren dieses Dokuments exportiert haben.
gcloud
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ") gcloud asset list --project=PROJECT_ID \ --asset-types='secretmanager.googleapis.com/Secret' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="resource.location != global AND resource.data.topics != NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.