Ansichten:
Profilanwendbarkeit: Stufe 2
Verschlüsseln Sie Kubernetes-Geheimnisse, die in etcd gespeichert sind, auf Anwendungsebene mit einem kundengesteuerten 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 zusätzliche Maßnahmen Ihrerseits erforderlich sind.
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 Dienstkontoschlüssel, die alle in etcd gespeichert sind.
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 Encrypter/Decrypter' 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 zu öffnen, 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 Encrypter/Decrypter
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.
  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 vom Kunden verwalteten Schlüssel aus und erteilen Sie, falls dazu aufgefordert, dem GKE-Dienstkonto Berechtigungen.
  5. Klicken Sie auf CREATE.
So aktivieren Sie einen bereits vorhandenen Cluster:
  1. Gehen Sie zur Kubernetes Engine-Website.
  2. Wählen Sie den zu aktualisierenden Cluster aus.
  3. Unter dem Detailbereich, unter der Überschrift Sicherheit, klicken Sie auf den Stift mit der Bezeichnung Verschlüsselung von Anwendungsschicht-Geheimnissen.
  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:
Erstellen Sie einen Schlüsselbund:
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>