Regionale Secrets mit Cloud Asset Inventory analysieren

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 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.

Nächste Schritte