Vom Kunden verwaltete Verschlüsselungsschlüssel für Secret Manager aktivieren

In diesem Thema wird die Unterstützung von vom Kunden verwalteten Verschlüsselungsschlüsseln (Customer-Managed Encryption Keys, CMEK) im Secret Manager erläutert.

Überblick

Secret Manager bietet Tools zum Speichern, Verwalten und Abrufen sensibler Daten in Ihren Anwendungen.

Standardmäßig werden in Secret Manager gespeicherte Secrets mit der Google-Standardverschlüsselung verschlüsselt. Mit der Google-Standardverschlüsselung werden geheime Nutzlasten von Schlüsseln verschlüsselt, die von Google verwaltet werden, bevor sie in den nichtflüchtigen Speicher geschrieben werden, ohne dass eine Konfiguration erforderlich ist.

Sie können die Verschlüsselung anpassen, die Secret Manager für Ihre Ressourcen verwendet. Geben Sie dazu Schlüsselverschlüsselungsschlüssel an. Mit Schlüsselverschlüsselungsschlüsseln werden Ihre Daten nicht direkt verschlüsselt, sondern die von Google generierten Schlüssel, die zur Verschlüsselung Ihrer Daten verwendet werden. Sie können CMEK-Schlüssel direkt erstellen oder sie mit dem Cloud KMS-Autoschlüssel (Vorschau) in Ihrem Namen erstellen. Weitere Informationen finden Sie unter Autokey – Übersicht.

Weitere Informationen zu Verschlüsselungsoptionen in Google Cloud finden Sie unter Standardverschlüsselung ruhender Daten. Spezifische Informationen zu CMEK einschließlich der Vor- und Nachteile finden Sie unter Vom Kunden verwaltete Verschlüsselungsschlüssel.

Funktionsweise von CMEK im Secret Manager

Bevor eine Secret-Version in den nichtflüchtigen Speicher an einem bestimmten Ort geschrieben wird, verschlüsselt Secret Manager die Daten mit einem eindeutigen Datenverschlüsselungsschlüssel (Data Encryption Key, DEK). Dieser DEK wird dann mit einem Replikat-spezifischen Schlüssel verschlüsselt, einem sogenannten Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK), der dem Secret Manager-Dienst gehört.

Wenn Sie CMEK für Secret Manager verwenden, wird der KEK als CMEK-Schlüssel bezeichnet und ist ein symmetrischer Schlüssel, den Sie in Cloud KMS verwalten. Der CMEK-Schlüssel muss sich am selben Google Cloud-Standort wie das verschlüsselte Secret-Versionsreplikat befinden. Sie können auch einen Cloud EKM-Schlüssel in der CMEK-Richtlinie zur Verschlüsselung und Entschlüsselung verwenden.

In dieser Anleitung wird beschrieben, wie Sie Secret Manager für die Verwendung von CMEK konfigurieren. Weitere allgemeine Informationen zu CMEK einschließlich ihrer Aktivierung finden Sie in der Dokumentation zum Cloud Key Management Service.

Beschränkungen

CMEK ist nur in der Secret Manager v1 API und gcloud verfügbar.

Hinweise

Sie können alle Ressourcen im selben Projekt oder Secrets und Schlüssel in separaten Projekten speichern. Weitere Informationen zu dieser Entscheidung finden Sie unter Aufgabentrennung in Cloud KMS.

Sie müssen die folgenden Voraussetzungen erfüllen, um Secret Manager und Cloud KMS einzurichten:

  • Secret Manager:

    • Erstellen Sie ein Projekt oder verwenden Sie ein vorhandenes Projekt, um Ihre Secret Manager-Ressourcen zu speichern.
    • Führen Sie bei Bedarf die Schritte im Abschnitt Secret Manager konfigurieren der Kurzanleitung zu Secret Manager aus.
  • Cloud KMS:

Legen Sie die folgenden Variablen auf die Projekt-IDs Ihrer Secret Manager- und Cloud KMS-Projekte fest.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Authentifizieren Sie sich bei Google Cloud:

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud auth login

Manuelle oder automatisierte Schlüsselerstellung

Sie können Cloud KMS-Schlüssel entweder manuell erstellen oder den Cloud KMS-Autoschlüssel verwenden (Vorschau). Autokey vereinfacht das Erstellen und Verwalten von Cloud KMS-Schlüsseln durch die Automatisierung der Bereitstellung und Zuweisung. Mit Autokey müssen Sie Schlüsselbunde, Schlüssel und Dienstkonten nicht im Voraus bereitstellen. Stattdessen werden sie bei Bedarf im Rahmen der Secret Manager-Ressourcenerstellung generiert. Weitere Informationen finden Sie unter Autokey – Übersicht. Informationen zum Aktivieren des Autokey für Secret Manager finden Sie unter Autokey aktivieren.

Die Anleitung auf dieser Seite bezieht sich auf das manuelle Erstellen und Zuweisen von Cloud KMS-Schlüsseln.

Dienst-Agent-Identität erstellen

Sie müssen für jedes Projekt, das vom Kunden verwaltete Verschlüsselungsschlüssel erfordert, eine Dienst-Agent-Identität erstellen.

Führen Sie den folgenden Befehl aus, um eine Dienstidentität mit der Google Cloud CLI zu erstellen:

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

Dadurch wird ein Dienstidentitätsname im folgenden Format zurückgegeben:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Speichern Sie den Namen der Dienstidentität:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Sie gewähren dieser Dienstidentität Zugriff auf die CMEK-Cloud KMS-Schlüssel, mit denen Ihre Secrets ver- und entschlüsselt werden.

CMEK mit automatischer Replikation

In diesem Abschnitt werden Secrets beschrieben, die über eine automatische Replikationsrichtlinie konfiguriert werden.

Bei Secrets, die die automatische Replikationsrichtlinie verwenden, muss sich Ihr CMEK-Schlüssel am multiregionalen Cloud KMS global befinden. Wenn Sie einen Cloud EKM-Schlüssel verwenden, können Sie Ihr Secret nicht für die Verwendung der automatischen Replikation konfigurieren, da Cloud EKM-Schlüssel in der Region global nicht verfügbar sind. Weitere Informationen zum Verwenden von Cloud EKM-Schlüsseln finden Sie unter Cloud EKM-Schlüssel einer CMEK-Richtlinie hinzufügen.

Erstellen Sie einen symmetrischen Cloud KMS-Schlüssel in der Cloud KMS-Region global oder verwenden Sie einen vorhandenen Schlüssel. In diesem Beispiel wird ein neuer Schlüsselbund namens secret-manager-cmek und dann ein neuer Schlüssel mit dem Namen my-cmek-key erstellt.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Gewähren Sie der Dienstidentität für Secret Manager Zugriff zum Verschlüsseln und Entschlüsseln mit dem CMEK-Schlüssel. Durch diesen Befehl wird der Dienstidentität die Rolle „Cloud KMS-Verschlüsseler/Entschlüsseler“ (roles/cloudkms.cryptoKeyEncrypterDecrypter) für den Cloud KMS-Schlüssel my-cmek-key zugewiesen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Secret mit automatischer Replikation erstellen Der Ressourcenname des CMEK-Schlüssels wird als Metadaten im Secret gespeichert.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

Legen Sie den Wert von replication.automatic.customerManagedEncryption.kmsKeyName auf den Ressourcennamen für den CMEK-Schlüssel fest.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Jedes Mal, wenn eine Secret-Version in diesem Secret erstellt wird, wird die Nutzlast der Secret-Version automatisch mit dem Schlüssel verschlüsselt, bevor sie in den nichtflüchtigen Speicher geschrieben wird. Voraussetzung dafür ist, dass die Dienstidentität Zugriff auf den CMEK-Schlüssel hat. Wenn die Dienstidentität keinen Zugriff mehr hat oder der Schlüssel nicht mehr verfügbar ist, wird beim Versuch, eine neue Secret-Version zu erstellen oder auf eine vorhandene Version zuzugreifen, ein Fehler zurückgegeben.

Fügen Sie eine neue Secret-Version hinzu. Beachten Sie, dass Sie nicht den Ressourcennamen des Cloud KMS-Schlüssels angeben. Er wird aus den Metadaten des Secrets gelesen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

Die Secret-Version wird auch dann erstellt, wenn der Aufrufer keinen direkten Zugriff zur Verwendung des CMEK-Schlüssels hat. Die Dienstidentität für Secret Manager ist nicht der Aufrufer, sondern für das Verschlüsseln und Entschlüsseln von Secrets beim Lesen oder Schreiben verantwortlich.

Ebenso benötigen Sie keinen direkten Zugriff auf den CMEK-Schlüssel, um auf das Secret zuzugreifen. Die Dienstidentität greift auf den Schlüssel zu und verschlüsselt oder entschlüsselt das Secret für Sie.

Rufen Sie die soeben erstellte Secret-Version auf:

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

CMEK-Konfiguration aktualisieren

Erstellen Sie einen neuen symmetrischen KMS-Schlüssel in der Multi-Cloud KMS-Region global.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Gewähren Sie der Dienstidentität für Secret Manager Zugriff zum Verschlüsseln und Entschlüsseln mit dem neuen CMEK-Schlüssel. Durch diesen Befehl wird der Dienstidentität die Cloud KMS-Verschlüsseler-/Entschlüsseler-Rolle (roles/cloudkms.cryptoKeyEncrypterDecrypter) für den Cloud KMS-Schlüssel my-other-key zugewiesen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Ändern Sie die CMEK-Konfiguration für ein Secret. Aktualisieren Sie dazu die Replikation für das Secret mit den neuen Namen der Cloud KMS-Schlüsselressourcen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK mit vom Nutzer verwalteter Replikation

In diesem Abschnitt werden Secrets beschrieben, die mit einer vom Nutzer verwalteten Replikationsrichtlinie konfiguriert sind. Mit einer vom Nutzer verwalteten Replikationsrichtlinie steuern Sie den Google Cloud-Speicherort, an dem das Secret gespeichert wird. Secrets sind immer von jedem Google Cloud-Standort aus zugänglich.

Secrets mit einer vom Nutzer verwalteten Replikationsrichtlinie müssen Cloud KMS-Schlüssel verwenden, die genau den Speicherorten der Secret-Versionen zugeordnet sind. In den Beispielen in diesem Leitfaden wird ein Secret an zwei separaten Speicherorten gespeichert: us-east1, us-central1. Anfragen für den Zugriff auf das Secret werden an einen dieser Orte weitergeleitet.

Erstellen Sie in jeder der beiden Regionen einen Schlüsselbund und einen Cloud KMS-Schlüssel zum Zweck der Verschlüsselung oder verwenden Sie einen vorhandenen Schlüssel. In diesem Beispiel wird ein neuer Schlüsselbund namens "secret-manager-cmek" und dann in jeder Region ein Schlüssel mit dem Namen "my-cmek-key" erstellt.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Erteilen Sie der Dienstidentität für Secret Manager die Berechtigung zum Verschlüsseln und Entschlüsseln mit dem CMEK-Schlüssel, indem Sie die Rolle „Cloud KMS-Verschlüsseler/Entschlüsseler“ (roles/cloudkms.cryptoKeyEncrypterDecrypter) für jeden der CMEK-Schlüssel einzeln oder für alle Schlüssel im Projekt zuweisen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

CMEK-fähiges Secret mit vom Nutzer verwalteter Replikation erstellen Der Ressourcenname des CMEK-Schlüssels wird als Metadaten im Secret gespeichert.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

Legen Sie den Wert von replication.userManaged.replicas.customerManagedEncryption.kmsKeyName auf die Ressourcennamen für die CMEK-Schlüssel fest.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Jedes Mal, wenn eine Secret-Version in diesem Secret erstellt wird, wird die Nutzlast der Secret-Version automatisch mit dem Schlüssel verschlüsselt, bevor sie in den nichtflüchtigen Speicher geschrieben wird. Voraussetzung dafür ist, dass die Dienstidentität Zugriff auf den CMEK-Schlüssel hat. Wenn die Dienstidentität keinen Zugriff mehr hat oder der Schlüssel nicht mehr verfügbar ist, wird beim Versuch, eine neue Secret-Version zu erstellen oder auf eine vorhandene Version zuzugreifen, ein Fehler zurückgegeben.

Fügen Sie eine neue Secret-Version hinzu. Beachten Sie, dass Sie nicht den Ressourcennamen des Cloud KMS-Schlüssels angeben. Er wird aus den Metadaten des Secrets gelesen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

Die Secret-Version wird auch dann erstellt, wenn der Aufrufer keinen direkten Zugriff zur Verwendung des CMEK-Schlüssels hat. Die Dienstidentität für Secret Manager ist nicht der Aufrufer, sondern für das Verschlüsseln und Entschlüsseln von Secrets beim Lesen oder Schreiben verantwortlich.

Ebenso benötigen Sie keinen direkten Zugriff auf den CMEK-Schlüssel, um auf das Secret zuzugreifen. Die Dienstidentität greift auf den Schlüssel zu und verschlüsselt oder entschlüsselt das Secret für Sie.

Rufen Sie die soeben erstellte Secret-Version auf.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

CMEK-Konfiguration aktualisieren

Erstellen Sie zwei neue symmetrische KMS-Schlüssel in derselben Region wie das Secret.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Gewähren Sie der Dienstidentität für Secret Manager Zugriff zum Verschlüsseln und Entschlüsseln mit den neuen CMEK-Schlüsseln. Durch diesen Befehl wird der Dienstidentität die Cloud KMS-Verschlüsseler-/Entschlüsseler-Rolle (roles/cloudkms.cryptoKeyEncrypterDecrypter) für die Cloud KMS-Schlüssel my-other-key zugewiesen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Ändern Sie die CMEK-Konfiguration für ein Secret. Aktualisieren Sie dazu die Replikation für das Secret mit den neuen Namen der Cloud KMS-Schlüsselressourcen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Wenn Sie mehrere Schlüssel in einem Secret gleichzeitig aktualisieren möchten, können Sie die Replikationsrichtlinie über eine Datei abrufen und festlegen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Aktualisieren Sie die Datei so, dass sie die gewünschte CMEK-Konfiguration in Ihrem bevorzugten Editor widerspiegelt. Legen Sie dann die neue Richtlinie fest:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

CMEK-Konfiguration der Secret-Version ansehen

Wenn Sie die Metadaten einer Secret-Version prüfen möchten, z. B. ob die Secret-Version CMEK-fähig ist, und den Ressourcennamen der CMEK-Schlüsselversion, rufen Sie die zugehörigen Metadaten auf.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Dies gibt den vollständigen Cloud KMS-Ressourcennamen der Schlüsselversion zurück, die zum Verschlüsseln der Secret-Version verwendet wird.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Cloud EKM-Schlüssel zu einer CMEK-Richtlinie hinzufügen

In diesem Abschnitt wird beschrieben, wie Sie einer CMEK-Richtlinie einen Cloud EKM-Schlüssel hinzufügen. Mit diesen Schritten wird ein Cloud EKM-Schlüssel zum Verschlüsseln oder Entschlüsseln von Secrets aktiviert.

Da Cloud EKM derzeit den multiregionalen Standort global nicht unterstützt, können Cloud EKM-Schlüssel nur mit Secrets verwendet werden, die für die vom Nutzer verwaltete Replikation konfiguriert sind.

Erstellen Sie einen symmetrischen Schlüssel in der Cloud KMS-Region us-central1 (oder in einer beliebigen Region mit Ausnahme von global). In diesem Beispiel wird ein neuer Schlüsselbund namens secret-manager-cmek-ekm und dann ein neuer Schlüssel mit dem Namen my-ekm-key für den Schlüsselbund erstellt.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

Erstellen Sie einen neuen Schlüsselbund:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Erstellen Sie einen Schlüssel in diesem Schlüsselbund:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

Erstellen Sie als Nächstes eine neue Version von my-ekm-key unter Verwendung des externen URI des Schlüssels. Weitere Informationen zu externen URIs für Cloud EKM-Schlüssel finden Sie unter Externen Schlüssel erstellen.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Gewähren Sie der Dienstidentität für Secret Manager Zugriff zum Verschlüsseln und Entschlüsseln mit dem externen Schlüssel. Dieser Befehl gewährt der Dienstidentität die Cloud KMS-Verschlüsseler-/Entschlüsseler-Rolle (roles/cloudkms.cryptoKeyEncrypterDecrypter) für my-ekm-key.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Erstellen Sie ein CMEK-fähiges Secret, das einen Cloud EKM-Schlüssel verwendet.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Jedes Mal, wenn in my-ekm-secret eine Secret-Version erstellt wird, wird die Nutzlast der Secret-Version automatisch mit dem Cloud EKM-Schlüssel verschlüsselt, bevor sie in den nichtflüchtigen Speicher geschrieben wird, sofern die Dienstidentität Zugriff auf den Schlüssel hat. Wenn die Dienstidentität keinen Zugriff mehr hat oder der Schlüssel nicht mehr verfügbar ist, wird beim Versuch, eine neue Secret-Version zu erstellen oder auf eine vorhandene Version zuzugreifen, ein Fehler zurückgegeben.

Fügen Sie eine neue Secret-Version hinzu. Beachten Sie, dass der Ressourcenname des Schlüssels aus den Metadaten des Secrets gelesen wird.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

Die Secret-Version wird auch dann erstellt, wenn der Aufrufer keinen direkten Zugriff zur Verwendung des Schlüssels hat. Die Dienstidentität für Secret Manager ist nicht der Aufrufer, sondern für das Verschlüsseln und Entschlüsseln von Secrets verantwortlich, wenn diese gelesen oder geschrieben werden.

Rufen Sie die soeben erstellte Secret-Version auf. Hier greift die Dienstidentität auf den Schlüssel zu und verschlüsselt oder entschlüsselt das Secret für Sie.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

CMEK deaktivieren

Entfernen Sie die CMEK-Konfiguration aus einem Secret, indem Sie die Replikationsrichtlinie aktualisieren.

gcloud

Wenn Sie Secret Manager in der Befehlszeile verwenden möchten, müssen Sie zuerst die Google Cloud CLI installieren oder ein Upgrade auf Version 378.0.0 oder höher ausführen. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

In diesen Beispielen wird curl verwendet, um die Verwendung mit der API zu demonstrieren. Sie können Zugriffstokens mit gcloud auth print-access-token generieren. In Compute Engine oder GKE müssen Sie sich mit dem Bereich cloud-platform authentifizieren.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

Nächste Schritte