Ansichten:
Profilanwendbarkeit: Stufe 2
Verschlüsseln Sie Kubernetes-Geheimnisse, die in etcd gespeichert sind, auf Anwendungsebene mit einem vom Kunden verwalteten Schlüssel in Cloud KMS.
Standardmäßig verschlüsselt GKE Kundeninhalte, die im Ruhezustand gespeichert sind, einschließlich Geheimnisse. GKE übernimmt und verwaltet diese Standardverschlüsselung für Sie, ohne dass Sie zusätzliche Maßnahmen ergreifen müssen.
Die Verschlüsselung von Geheimnissen auf Anwendungsebene bietet eine zusätzliche Sicherheitsschicht für sensible Daten, wie benutzerdefinierte Geheimnisse und Geheimnisse, die für den Betrieb des Clusters erforderlich sind, wie z. B. Dienstkontoschlüssel, die alle in etcd gespeichert werden.
Mit dieser Funktionalität können Sie einen Schlüssel verwenden, den Sie in Cloud KMS verwalten, um Daten auf der Anwendungsebene zu verschlüsseln. Dies schützt vor Angreifern, falls sie es schaffen, Zugriff auf etcd zu erlangen.
Hinweis
Hinweis
Standardmäßig ist die Verschlüsselung von Geheimnissen auf Anwendungsebene deaktiviert.

Auswirkung

Um den Cloud KMS CryptoKey zum Schutz von etcd im Cluster zu verwenden, muss das Dienstkonto 'Kubernetes Engine Service Agent' die Rolle 'Cloud KMS CryptoKey Verschlüsseln/Entschlüsseln' innehaben.

Prüfung

Verwendung der Google Cloud Console:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. Wählen Sie aus der Liste der Cluster jeden Cluster aus, um das Detailfenster aufzurufen, und stellen Sie sicher, dass die Verschlüsselung von Anwendungsschicht-Geheimnissen auf 'Aktiviert' gesetzt ist.
Verwendung der Befehlszeile:
gcloud container clusters describe $CLUSTER_NAME --zone $COMPUTE_ZONE --
format json | jq '.databaseEncryption'
Wenn korrekt konfiguriert, gibt die Ausgabe des Befehls eine Antwort mit den folgenden Details zurück:
keyName=projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/
cryptoKeys/<key_name>] 
state=ENCRYPTED 
{ 
  "currentState": "CURRENT_STATE_ENCRYPTED", 
  "keyName": "projects/<key_project_id>/locations/us-
central1/keyRings/<ring_name>/cryptoKeys/<key_name>", 
  "state": "ENCRYPTED" 
}

Wiederherstellung

Um die Verschlüsselung von Geheimnissen auf Anwendungsebene zu aktivieren, sind mehrere Konfigurationselemente erforderlich. Dazu gehören:
  • Ein Schlüsselbund
  • Ein Schlüssel
  • Ein GKE-Dienstkonto mit der Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler
Sobald diese erstellt sind, kann die Verschlüsselung von Geheimnissen auf Anwendungsebene in einem bestehenden oder neuen Cluster aktiviert werden.
Verwendung der Google Cloud Console:
Einen Schlüssel erstellen:
  1. Gehen Sie zur Cloud KMS-Website.
  2. Wählen Sie CREATE KEY RING aus.
  3. Geben Sie einen Schlüsselbundnamen und die Region ein, in der die Schlüssel gespeichert werden.
  4. Klicken Sie auf CREATE.
  5. Geben Sie einen Schlüsselnamen und einen geeigneten Rotationszeitraum im Bereich "Schlüssel erstellen" ein.
  6. Klicken Sie auf CREATE.
Um einen neuen Cluster zu aktivieren:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. Klicken Sie auf CREATE CLUSTER und wählen Sie den erforderlichen Clustermodus aus.
  3. Unter der Überschrift Security, unter CLUSTER, aktivieren Sie das Kontrollkästchen Encrypt secrets at the application layer.
  4. Wählen Sie den KMS-Schlüssel als kundenverwalteten Schlüssel aus und erteilen Sie, falls aufgefordert, Berechtigungen für das GKE-Dienstkonto.
  5. Klicken Sie auf CREATE.
Um einen vorhandenen Cluster zu aktivieren:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. Wählen Sie den zu aktualisierenden Cluster aus.
  3. Unter dem Detailbereich, im Abschnitt Sicherheit, klicken Sie auf den Stift mit der Bezeichnung Anwendungsschicht-Geheimnisse-Verschlüsselung.
  4. Aktivieren Sie Encrypt secrets at the application layer und wählen Sie einen KMS-Schlüssel aus.
  5. Klicken Sie auf SAVE CHANGES.
Verwendung der Befehlszeile:
Einen Schlüssel erstellen:
Einen Schlüsselbund erstellen:
gcloud kms keyrings create <ring_name> --location <location> --project 
<key_project_id>
Schlüssel erstellen:
gcloud kms keys create <key_name> --location <location> --keyring <ring_name> 
--purpose encryption --project <key_project_id>
Gewähren Sie dem Dienstkonto des Kubernetes Engine Service Agent die Rolle Cloud KMS CryptoKey Encrypter/Decrypter:
gcloud kms keys add-iam-policy-binding <key_name> --location <location> 
--keyring <ring_name> --member serviceAccount:<service_account_name> 
--role roles/cloudkms.cryptoKeyEncrypterDecrypter --project <key_project_id>
Um einen neuen Cluster mit Verschlüsselung von Anwendungsschicht-Geheimnissen zu erstellen:
gcloud container clusters create <cluster_name> --cluster-version=latest 
--zone <zone> --database-encryption-key 
projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/cryptoKeys/
<key_name> --project <cluster_project_id>
Um auf einem bestehenden Cluster zu aktivieren:
gcloud container clusters update <cluster_name> --zone <zone> --database-
encryption-key 
projects/<key_project_id>/locations/<location>/keyRings/<ring_name>/cryptoKeys/
<key_name> --project <cluster_project_id>