Verschlüsselung mit vom Kunden verwalteten Verschlüsselungsschlüsseln konfigurieren

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Auf dieser Seite wird beschrieben, wie Sie mit vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK) Cloud Composer-Umgebungen schützen. Vom Kunden verwaltete Verschlüsselungsschlüssel werden zum Verschlüsseln/Entschlüsseln von Nutzerdaten in der Umgebung verwendet.

Hinweise

  • Sie können CMEK nur beim Erstellen einer Umgebung konfigurieren. Es ist nicht möglich, CMEK für eine vorhandene Umgebung zu aktivieren.

  • Cloud Composer unterstützt die CMEK-Verschlüsselung mit Schlüsseln, die in externen Schlüsselverwaltungssystemen gespeichert sind.

  • Sie müssen einen CMEK-Schlüssel in derselben Region erstellen, in der sich Ihre Umgebungen befinden. Sie können keine multiregionalen oder globalen Schlüssel verwenden.

  • Wenn Ihre Umgebung innerhalb eines VPC Service Controls-Perimeters ausgeführt werden soll, müssen Sie die Cloud Key Management Service API und die Artifact Registry API in den Perimeter aufnehmen.

  • Aktivieren Sie die Artifact Registry API.

    Console

    Artifact Registry API aktivieren.

    Aktivieren Sie die API

    gcloud

    Aktivieren Sie die Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com

Nutzerinformationen nicht durch CMEK-Verschlüsselung geschützt

Cloud Monitoring unterstützt keine CMEK-Verschlüsselung. Der Name Ihrer Umgebung und die Namen der DAGs werden in der Monitoring-Datenbank in verschlüsselter Form mit Google-eigenen und von Google verwalteten Schlüsseln gespeichert.

Cloud Composer speichert die folgenden Informationen, die mit Google-eigenen und von Google verwalteten Schlüsseln geschützt sind, nicht mit vom Kunden verwalteten Schlüsseln:

  • Name der Umgebung
  • Airflow-Konfigurationsüberschreibungen
  • Umgebungsvariablen
  • Beschreibungen der zulässigen IP-Bereiche
  • IP-Bereiche
  • Labels
  • Die Namen einiger von Cloud Composer gespeicherter Parameter können einen Teilstring des Umgebungsnamens enthalten.

Vom Kunden verwalteten Verschlüsselungsschlüssel für Ihre Umgebung verwenden

Schritt 1: Vom Kunden verwalteten Verschlüsselungsschlüssel erstellen

Führen Sie die unter Symmetrische Verschlüsselungsschlüssel erstellen beschriebenen Schritte aus, um einen Schlüssel in der Region zu erstellen, in der sich Ihre Umgebung befindet.

Schritt 2: Dienst-Agents Rollen zuweisen

Console

Diesen Schritt überspringen. Sie erteilen Dienst-Agents Berechtigungen, wenn Sie einen Schlüssel für Ihre Umgebung angeben.

gcloud

Die folgenden Dienst-Agents müssen für den Schlüssel, den Sie für Ihre Umgebung verwenden, die Rolle Cloud KMS CryptoKey Encrypter/Decrypter haben.

Ersetzen Sie PROJECT_NUMBER durch die Nummer Ihres Projekts.

Name des Dienst-Agents E-Mail-Adresse des Dienstkontos API-Dienstname
Cloud Composer-Dienst-Agent dienst-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Artifact Registry-Dienst-Agent service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Kubernetes Engine-Dienst-Agent service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Pub/Sub-Dienst-Agent service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Compute Engine-Dienst-Agent service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Cloud Storage-Dienst-Agent service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Berechtigungen zum Verschlüsseln/Entschlüsseln mit gsutil kms authorize gewähren
  1. (Falls erforderlich) Wenn einige dieser Dienstkonten in Ihrem Projekt nicht vorhanden sind, wurde für diesen Dienst noch keine Identität erstellt. Dies kann beispielsweise der Fall sein, wenn Sie in Ihrem Projekt noch keine Cloud Composer-Umgebungen erstellt haben.

    Erstellen Sie mit dem folgenden Befehl Identitäten für die aufgeführten Dienste, um diese Dienstkonten hinzuzufügen:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Ersetzen Sie API_SERVICE_NAME durch den API-Dienstnamen eines Dienstes, der in Ihrem Projekt kein Dienstkonto hat.

    Beispiel:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Gewähren Sie Dienst-Agents Berechtigungen:

    1. Gewähren Sie dem Cloud Composer-Dienst-Agent die Rolle:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    2. Gewähren Sie dem Artifact Registry-Dienst-Agent die Rolle:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    3. Gewähren Sie dem GKE-Dienst-Agent die Rolle:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    4. Gewähren Sie dem Pub/Sub-Dienst-Agent die Rolle:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    5. Gewähren Sie dem Compute Engine-Dienst-Agent die Rolle:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    6. Gewähren Sie dem Cloud Storage-Dienst-Agent Berechtigungen zum Verschlüsseln/Entschlüsseln. Sie können diesen Schritt überspringen, wenn Sie einen benutzerdefinierten Bucket für eine Umgebung verwenden.

      gsutil kms authorize -k \
        projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Ersetzen Sie:

    • PROJECT_ID durch die Projekt-ID.
    • KEY_PROJECT_ID durch die ID des Projekts, in dem der vom Kunden verwaltete Schlüssel gespeichert ist. Wenn Sie einen Schlüssel aus einem anderen Projekt verwenden, unterscheidet sich dieser Wert von der ID Ihres Projekts. Wenn Sie einen Schlüssel aus demselben Projekt verwenden, ist dieser Wert die ID Ihres Projekts.
    • PROJECT_NUMBER durch die Nummer Ihres Projekts.
    • KEY_LOCATION durch den vom Kunden verwalteten Speicherort des Schlüssels. Dieser Standort muss mit dem Standort Ihrer Umgebung übereinstimmen.
    • KEY_NAME durch den vom Kunden verwalteten Schlüsselnamen.
    • KEY_RING_NAME durch den Schlüsselbund, der Ihren vom Kunden verwalteten Schlüssel speichert.

    Zum Abrufen dieser Werte können Sie die Befehle gcloud projects describe, gcloud kms keyrings list und gcloud kms keys describe ausführen.

Schritt 3: Umgebung mit CMEK erstellen

Nachdem Sie einen vom Kunden verwalteten Verschlüsselungsschlüssel erstellt haben, können Sie damit Cloud Composer-Umgebungen erstellen.

Console

Wenn Sie eine Umgebung erstellen:

  1. Wählen Sie im Bereich Datenverschlüsselung die Option Vom Kunden verwalteter Verschlüsselungsschlüssel (CMEK) aus.

  2. Wählen Sie in der Drop-down-Liste Wählen Sie einen vom Kunden verwalteten Schlüssel aus Ihren Schlüssel aus.

  3. Falls eine zusätzliche Einrichtung erforderlich ist, werden Sie in einer Meldung darüber informiert. In diesem Fall gilt:

    1. Klicken Sie auf Assistenten öffnen.

    2. Rufen Sie im Dialogfeld CMEK-Schlüssel für die Verwendung in Cloud Composer vorbereiten die Liste der Dienst-Agents auf, die für den Schlüssel die Rolle Cloud KMS CryptoKey Encrypter/Decrypter haben müssen.

    3. Klicken Sie auf Erteilen, um die erforderlichen Rollen und Berechtigungen zu gewähren.

gcloud

Das Argument --kms-key gibt einen vom Kunden verwalteten Verschlüsselungsschlüssel für Ihre Umgebung an.

Weitere Informationen zum Erstellen von Umgebungen finden Sie unter Umgebungen erstellen. Beispielsweise können Sie andere Parameter für Ihre Umgebung angeben.

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version IMAGE_VERSION \
  --kms-key projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Ersetzen Sie:

  • ENVIRONMENT_NAME durch den Namen der Umgebung.
  • IMAGE_VERSION durch den Namen des Cloud Composer-Images.
  • KEY_PROJECT_ID durch die ID des Projekts, in dem sich der Schlüssel befindet. Wenn Sie einen Schlüssel aus einem anderen Projekt verwenden, unterscheidet sich dieser Wert von der ID Ihres Projekts. Wenn Sie einen Schlüssel aus demselben Projekt verwenden, ist dieser Wert die ID Ihres Projekts.
  • LOCATION durch die Region, in der sich die Umgebung befindet.
  • KEY_LOCATION durch den Speicherort Ihres vom Kunden verwalteten Schlüssels. Dieser Standort muss mit dem Standort Ihrer Umgebung übereinstimmen.
  • KEY_NAME durch den vom Kunden verwalteten Schlüsselnamen.
  • KEY_RING_NAME durch den Schlüsselbund, der Ihren vom Kunden verwalteten Schlüssel speichert.

Beispiel:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.8.2-airflow-2.7.3 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

Verschlüsselungskonfiguration der Umgebung ansehen

Sie können die Verschlüsselungskonfiguration für eine vorhandene Umgebung aufrufen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen“

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Umgebungskonfiguration auf.

  4. Details zur Verschlüsselung finden Sie im Abschnitt Datenverschlüsselungsschlüssel.

gcloud

Führen Sie den folgenden gcloud-Befehl aus, um die Verschlüsselungskonfiguration anzusehen

gcloud composer environments describe \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.encryptionConfig)"

Ersetzen Sie:

  • ENVIRONMENT_NAME durch den Namen der Umgebung.
  • LOCATION durch die Region, in der sich die Umgebung befindet.

Beispiel:

gcloud composer environments describe \
  example-environment \
  --location us-central1 \
  --format="value(config.encryptionConfig)"

CMEK für Cloud Composer-Logs verwenden

Cloud Logging unterstützt die Verschlüsselung von Logspeicher mit CMEK-Schlüsseln. Wir empfehlen, zum Verschlüsseln von Logs mit CMEK-Schlüsseln das Standard-CMEK-Verfahren zu verwenden.

Zum Verschlüsseln von Logs mit CMEK-Schlüsseln folgen Sie der Anleitung unter Schlüssel verwalten, die die Speicherdaten von Logging schützen.

Cloud Composer-Logs an einen CMEK-verschlüsselten Cloud Storage-Bucket weiterleiten

Wenn Sie davon ausgehen, dass die Logs sensible Daten enthalten, können Sie die Cloud Composer-Logs mithilfe von Logrouter an einen CMEK-verschlüsselten Cloud Storage-Bucket weiterleiten. Dadurch wird verhindert, dass Ihre Logs an Monitoring gesendet werden.

Wenn Sie Support von Cloud Customer Care benötigen, müssen Sie möglicherweise Supportentwicklern von Google Zugriff auf die in Cloud Storage gespeicherten Cloud Composer-Logs gewähren.

gcloud

  1. Erstellen Sie einen neuen Cloud Storage-Bucket zum Speichern der Logs.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    Ersetzen Sie:

    • LOCATION durch die Region, in der sich die Umgebung befindet.
    • BUCKET_NAME durch den Namen des Buckets.

    Beispiel:

    gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
    
  2. Verschlüsseln Sie den Bucket mit Ihrem CMEK-Schlüssel.

    gsutil kms encryption \
      -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \
      gs://BUCKET_NAME
    

    Ersetzen Sie:

    • KEY_PROJECT_ID durch die ID des Projekts, in dem sich der Schlüssel befindet. Wenn Sie einen Schlüssel aus einem anderen Projekt verwenden, unterscheidet sich dieser Wert von der ID Ihres Projekts. Wenn Sie einen Schlüssel aus demselben Projekt verwenden, ist dieser Wert die ID Ihres Projekts.
    • KEY_LOCATION durch den Speicherort Ihres vom Kunden verwalteten Schlüssels. Dieser Standort muss mit dem Standort Ihrer Umgebung übereinstimmen.
    • KEY_RING_NAME durch den Schlüsselbund, der Ihren vom Kunden verwalteten Schlüssel speichert.
    • KEY_NAME durch den vom Kunden verwalteten Schlüsselnamen.
    • BUCKET_NAME durch den Namen des Buckets.

    Beispiel:

    gsutil kms encryption \
      -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \
      gs://composer-logs-us-central1-example-environment
    
  3. Erstellen Sie eine neue Logsenke.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Ersetzen Sie:

    • ENVIRONMENT_NAME durch den Namen der Umgebung.
    • LOCATION durch die Region, in der sich die Umgebung befindet.
    • BUCKET_NAME durch den Namen des Buckets.

    Beispiel:

    gcloud logging sinks create \
    composer-log-sink-example-environment \
    storage.googleapis.com/composer-logs-us-central1-example-environment \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  4. Weisen Sie dem Dienstkonto für diesen Bucket die Rolle Storage Object Creator zu. Das Dienstkonto wird im Ergebnis des vorherigen Befehls angezeigt.

    gcloud projects add-iam-policy-binding \
      PROJECT_ID \
      --member="serviceAccount:LOGGING_SERVICE_AGENT" \
      --role="roles/storage.objectCreator" \
      --condition=None
    

    Ersetzen Sie:

    • PROJECT_ID durch die Projekt-ID.
    • LOGGING_SERVICE_AGENT durch das Logging-Dienstkonto für diesen Bucket. Der Name dieses Kontos wird im vorherigen Schritt abgerufen.

    Beispiel:

    gcloud projects add-iam-policy-binding \
      example-project \
      --member="serviceAccount:example-sa@gcp-sa-logging.iam.gserviceaccount.com" \
      --role="roles/storage.objectCreator" \
      --condition=None
    
  5. Schließen Sie die Logs für die neue Umgebung aus Monitoring aus.

    gcloud beta logging sinks update _Default \
      --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Ersetzen Sie:

    • ENVIRONMENT_NAME durch den Namen der Umgebung.
    • LOCATION durch die Region, in der sich die Umgebung befindet.

    Beispiel:

    gcloud beta logging sinks update _Default \
      --add-exclusion name=example-environment-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  6. Fügen Sie dem Log-Router die CMEK-Verschlüsselung auf Organisationsebene hinzu.

    gcloud logging cmek-settings describe \
      --organization=ORGANIZATION_ID
    
    gcloud kms keys add-iam-policy-binding \
          --project=KEY_PROJECT_ID \
          --member LOGGING_SERVICE_AGENT \
          --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
          --location=KEY_LOCATION \
          --keyring=KEY_RING_NAME \
          KEY_NAME
    
    gcloud logging cmek-settings update \
      --organization=ORGANIZATION_ID \
      --kms-project=KEY_PROJECT_ID \
      --kms-keyring=KEY_RING_NAME \
      --kms-location=KEY_LOCATION \
      --kms-key-name=KEY_NAME
    

    Ersetzen Sie:

    • ORGANIZATION_ID durch Ihre Organisations-ID.
    • KEY_PROJECT_ID durch die ID des Projekts, in dem sich der Schlüssel befindet. Wenn Sie einen Schlüssel aus einem anderen Projekt verwenden, unterscheidet sich dieser Wert von der ID Ihres Projekts. Wenn Sie einen Schlüssel aus demselben Projekt verwenden, ist dieser Wert die ID Ihres Projekts.
    • KEY_RING_NAME durch den Schlüsselbund, der Ihren vom Kunden verwalteten Schlüssel speichert.
    • KEY_LOCATION durch den Speicherort Ihres vom Kunden verwalteten Schlüssels. Dieser Standort muss mit dem Standort Ihrer Umgebung übereinstimmen.
    • KEY_NAME durch den vom Kunden verwalteten Schlüsselnamen.

Rotation von CMEK-Schlüsseln für Cloud Composer

Nachdem Sie die Verschlüsselung in Ihrer Umgebung mit CMEK-Schlüsseln konfiguriert haben, können Sie diese Schlüssel regelmäßig rotieren, wie in der KMS-Dokumentation beschrieben.

Wenn Sie einen CMEK-Schlüssel rotieren, werden Daten, die mit vorherigen Schlüsselversionen verschlüsselt wurden, nicht automatisch mit der neuen Schlüsselversion neu verschlüsselt. Weitere Informationen finden Sie unter Daten neu verschlüsseln.

Dies gilt insbesondere für:

  • Objekte, die im Bucket der Umgebung gespeichert sind.
  • In der Airflow-Datenbank gespeicherte Kataloge.
  • In Artifact Registry-Repositories gespeicherte Container-Images.
  • Alle anderen Datenobjekte, die in der Cloud Composer-Umgebung mit CMEK verschlüsselt wurden.

Nächste Schritte