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 gewünschten Informationen zu erhalten.
Übersicht
Cloud Asset Inventory analysiert Ihre Google Cloud Umgebung und erfasst alle Änderungen an Ihren Cloud-Ressourcen, wie 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 Möglichkeiten:
-
Abfragen ausführen: Suchen Sie nach bestimmten Secrets oder identifizieren Sie Muster in Ihren Secrets.
-
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 Secret-Inventar zur detaillierten Analyse und Berichterstellung nach BigQuery.
-
Secrets verwalten und analysieren: Sehen Sie alle Ihre Secrets an einem Ort (in allen Projekten und Ihrer gesamten Organisation) und identifizieren Sie Secrets, die möglicherweise falsch konfiguriert sind oder gegen die Sicherheitsrichtlinien Ihrer Organisation verstoßen. Sie können beispielsweise Secrets finden, die nicht regelmäßig rotiert werden oder keine ordnungsgemäßen Zugriffssteuerungen haben.
Dies ist eine erweiterte Aufgabe für Secret Manager-Nutzer. Bevor Sie diese Seite lesen, empfehlen wir Ihnen, die folgenden Seiten zu lesen:
-
Secret Manager – Übersicht um die wichtigsten Konzepte und Funktionen von Secret Manager zu verstehen
-
Cloud Asset Inventory – Übersicht, 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 Ihnen, Ihre Secrets und 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 nach Ihren Assets zu suchen.
Beschränkungen
Bei der Verwendung von Cloud Asset Inventory zur Analyse von Secret Manager-Ressourcen gilt die folgende Einschränkung:
- Cloud Asset Inventory unterstützt das Exportieren und Auflisten von Snapshots nur für die letzten fünf Wochen.
- Secret Manager-Daten werden alle 7 Stunden mit Cloud Asset Inventory synchronisiert. Wenn eine Synchronisierung fehlschlägt, werden die Daten erst bei der nächsten erfolgreichen Synchronisierung aktualisiert. Für Anwendungsfälle, die Echtzeit Informationen erfordern, fragen Sie stattdessen die Secret Manager API ab.
Asset-Änderungen überwachen
Cloud Asset Inventory verfolgt 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. Bevor Sie Ihre Assets exportieren, prüfen Sie, ob Ihr Dataset und Ihre Dienstkonten richtig 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 kann zwischen dem aktuellen Zeitpunkt und 5 Wochen in der Vergangenheit liegen.
- 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
Verwenden Sie diese Beispielabfragen, um Secrets und Secret-Versionen mit bestimmten Eigenschaften zu finden.
In den letzten zwei Wochen erstellte Secrets
Suchen Sie nach Secrets (und ihren Eigenschaften), 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 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.data.createTime>-P2W"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Automatisch replizierte Secrets
Suchen Sie nach allen Secrets, die automatisch repliziert wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND JSON_EXTRACT(resource.data, '$.replication.automatic') 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.data.replication.automatic != NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Secrets, die an einen bestimmten Standort repliziert wurden
Suchen Sie nach allen Secrets, die an einem bestimmten Standort gespeichert sind, z. B. us-central1.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE ( SELECT * FROM UNNEST(JSON_EXTRACT_ARRAY(resource.data, '$.replication.userManaged.replicas')) AS location WHERE JSON_VALUE(JSON_EXTRACT(location, '$.location')) = "us-central1" ) 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.data.replication.userManaged.replicas.location=LOCATION"
Ersetzen Sie Folgendes:
- PROJECT_ID: die ID des Projekts, das die zu analysierenden Secrets enthält
- LOCATION: der Google Cloud Standort des Secrets
Vor mehr als 180 Tagen erstellte Secret-Versionen
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' 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.data.createTime < P6M AND resource.data.state=ENABLED"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
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' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") IS NULL AND JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].customerManagedEncryption.kmsKeyName") 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/SecretVersion' \ --snapshot-time=$NOW \ --content-type='resource' \ --filter="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.
Secrets mit konfiguriertem CMEK
Listen Sie alle Secrets auf, die mit einem CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") IS NOT NULL OR JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].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.data.replication.userManaged.replicas.customerManagedEncryption != NULL OR resource.data.replication.automatic.customerManagedEncryption!=NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Mit einem bestimmten CMEK verschlüsselte Secrets
Suchen Sie nach Secrets, die mit einem bestimmten CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' AND ( JSON_VALUE(resource.data, "$.replication.automatic.customerManagedEncryption.kmsKeyName") = KMS_KEY_NAME OR JSON_VALUE(resource.data, "$.replication.userManaged.replicas[0].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 eine voll qualifizierte Kennzeichnung für den Schlüssel
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.data.replication.userManaged.replicas.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 eine voll qualifizierte Kennzeichnung für den Schlüssel
Secret-Versionen ohne konfigurierten CMEK
Suchen Sie nach allen aktivierten Secret-Versionen, die nicht mit einem CMEK verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' AND ( JSON_VALUE(resource.data, "$.replicationStatus.automatic.customerManagedEncryption.kmsKeyVersionName") IS NULL AND JSON_VALUE(resource.data, "$.replicationStatus.userManaged.replicas[0].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.data.replicationStatus.userManaged.replicas.customerManagedEncryption = NULL OR resource.data.replicationStatus.automatic.customerManagedEncryption=NULL) AND resource.data.state=ENABLED"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Secret-Versionen, die mit einem bestimmten CMEK verschlüsselt wurden
Listen Sie alle aktivierten Secret-Versionen auf, die mit einer bestimmten CMEK-Version verschlüsselt wurden.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/SecretVersion' AND ( JSON_VALUE(resource.data, "$.replicationStatus.automatic.customerManagedEncryption.kmsKeyVersionName") = KMS_KEY_VERSION_NAME OR JSON_VALUE(resource.data, "$.replicationStatus.userManaged.replicas[0].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 Schlüsselversionsnummer von Cloud Key Management Service
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.data.replicationStatus.userManaged.replicas.customerManagedEncryption.kmsKeyVersionName=$FULL_KMS_KEY_VERSION_RESOURCE_NAME AND resource.data.status=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
Secrets ohne konfigurierte Rotation
Suchen Sie nach allen Secrets, die keinen Rotationsplan haben.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' 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.data.rotation=NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
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 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.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.
Secrets, die in den nächsten 30 Tagen ablaufen
Listen Sie Secrets auf, die in den nächsten 30 Tagen ablaufen.
BigQuery
SELECT * FROM BIGQUERY_TABLE WHERE asset_type='secretmanager.googleapis.com/Secret' 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.data.expireTime < PD30"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Secrets mit einem konfigurierten Pub/Sub-Thema
Listen Sie alle Secrets auf, 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 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.data.topics !=NULL"
Ersetzen Sie PROJECT_ID durch die ID des Projekts, das die zu analysierenden Secrets enthält.
Nächste Schritte
- Weitere Informationen zur Verwendung von Secret Manager mit anderen Produkten