Verschlüsselung von Kubernetes-Geheimnissen mit KMS in vorhandenen Clustern - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Verschlüsselung von Kubernetes-Geheimnissen mit KMS in vorhandenen Clustern

Wichtig

Dieses Verfahren gilt nur für EKS-Cluster, auf denen Kubernetes Version 1.27 oder niedriger ausgeführt wird. Wenn Sie Kubernetes Version 1.28 oder höher ausführen, werden Ihre Kubernetes-Geheimnisse standardmäßig durch Umschlagverschlüsselung geschützt. Weitere Informationen finden Sie unter Standardmäßige Umschlagverschlüsselung für alle Kubernetes-API-Daten.

Wenn Sie die Geheimnisverschlüsselung aktivieren, werden die Kubernetes-Geheimnisse mit dem von Ihnen ausgewählten AWS-KMS-Schlüssel verschlüsselt. Der KMS-Schlüssel muss die folgenden Bedingungen erfüllen:

  • Symmetrisch

  • Kann Daten verschlüsseln und entschlüsseln

  • Erstellt in derselben AWS-Region wie der Cluster

  • Wenn der KMS-Schlüssel in einem anderen Konto erstellt wurde, muss der IAM-Prinzipal Zugriff auf den KMS-Schlüssel haben.

Weitere Informationen finden Sie unter Zulassen, dass IAM-Prinzipale in anderen Konten einen KMS-Schlüssel verwenden im Entwicklerhandbuch zum AWS-Schlüsselverwaltungsservice .

Warnung

Sie können die Verschlüsselung von Geheimnissen nicht deaktivieren, nachdem Sie sie aktiviert haben. Diese Aktion ist unumkehrbar.

eksctl

Dieses Verfahren gilt nur für EKS-Cluster, auf denen Kubernetes Version 1.27 oder niedriger ausgeführt wird. Weitere Informationen finden Sie unter Standardmäßige Umschlagverschlüsselung für alle Kubernetes-API-Daten.

Sie können die Verschlüsselung auf zwei Arten aktivieren:

  • Fügen Sie Ihrem Cluster mit einem einzigen Befehl Verschlüsselung hinzu.

    Um Ihre Secrets automatisch erneut zu verschlüsseln, führen Sie den folgenden Befehl aus.

    eksctl utils enable-secrets-encryption \ --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key

    Um die automatische Neuverschlüsselung Ihrer Secrets zu deaktivieren, führen Sie den folgenden Befehl aus.

    eksctl utils enable-secrets-encryption --cluster my-cluster \ --key-arn arn:aws:kms:region-code:account:key/key \ --encrypt-existing-secrets=false
  • Fügen Sie Ihrem Cluster eine Verschlüsselung mit einer kms-cluster.yaml-Datei hinzu.

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code secretsEncryption: keyARN: arn:aws:kms:region-code:account:key/key

    Um Ihre Secrets automatisch erneut zu verschlüsseln, führen Sie den folgenden Befehl aus.

    eksctl utils enable-secrets-encryption -f kms-cluster.yaml

    Um die automatische Neuverschlüsselung Ihrer Secrets zu deaktivieren, führen Sie den folgenden Befehl aus.

    eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
    AWS-Managementkonsole
    1. Dieses Verfahren gilt nur für EKS-Cluster, auf denen Kubernetes Version 1.27 oder niedriger ausgeführt wird. Weitere Informationen finden Sie unter Standardmäßige Umschlagverschlüsselung für alle Kubernetes-API-Daten.

    2. Öffnen Sie die Amazon-EKS-Konsole.

    3. Wählen Sie den Cluster aus, dem Sie die KMS-Verschlüsselung hinzufügen möchten.

    4. Wählen Sie die Registerkarte Overview (Übersicht) aus (sie ist standardmäßig ausgewählt).

    5. Scrollen Sie nach unten zum Abschnitt Secrets encryption (Secrets-Verschlüsselung) und wählen Sie Enable (Aktivieren) aus.

    6. Wählen Sie einen Schlüssel in der Dropdown-Liste und dann die Schaltfläche Enable (Aktivieren) aus. Wenn keine Schlüssel aufgeführt sind, müssen Sie zuerst einen erstellen. Weitere Informationen finden Sie unter Erstellen von Schlüsseln

    7. Wählen Sie die Schaltfläche Confirm (Bestätigen) aus, um den ausgewählten Schlüssel zu verwenden.

    AWS-CLI
    1. Dieses Verfahren gilt nur für EKS-Cluster, auf denen Kubernetes Version 1.27 oder niedriger ausgeführt wird. Weitere Informationen finden Sie unter Standardmäßige Umschlagverschlüsselung für alle Kubernetes-API-Daten.

    2. Ordnen Sie Ihrem Cluster mit dem folgenden AWS-CLI-Befehl die Konfiguration der Geheimnisverschlüsselung zu. Ersetzen Sie die Beispielwerte durch Ihre eigenen Werte.

      aws eks associate-encryption-config \ --cluster-name my-cluster \ --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'

      Eine Beispielausgabe sieht wie folgt aus.

      {   "update": {     "id": "3141b835-8103-423a-8e68-12c2521ffa4d",     "status": "InProgress",     "type": "AssociateEncryptionConfig",     "params": [       {         "type": "EncryptionConfig",         "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"       }     ],     "createdAt": 1613754188.734,     "errors": []   } }
    3. Sie können den Status Ihrer Verschlüsselungsaktualisierung mit dem folgenden Befehl überwachen. Verwenden Sie den cluster name und die update ID, die in der vorherigen Ausgabe zurückgegeben wurden. Wenn der Status Successful angezeigt wird, ist das Update abgeschlossen.

      aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id 3141b835-8103-423a-8e68-12c2521ffa4d

      Eine Beispielausgabe sieht wie folgt aus.

      {   "update": {     "id": "3141b835-8103-423a-8e68-12c2521ffa4d",     "status": "Successful",     "type": "AssociateEncryptionConfig",     "params": [       {         "type": "EncryptionConfig",         "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"       }     ],     "createdAt": 1613754188.734>,     "errors": []   } }
    4. Führen Sie den Befehl describe-cluster aus, um zu überprüfen, ob die Verschlüsselung in Ihrem Cluster aktiviert ist. Die Antwort enthält eine EncryptionConfig-Zeichenfolge.

      aws eks describe-cluster --region region-code --name my-cluster

Nachdem Sie die Verschlüsselung in Ihrem Cluster aktiviert haben, müssen Sie alle vorhandenen Secrets mit dem neuen Schlüssel verschlüsseln:

Anmerkung

Wenn Sie eksctl verwenden, ist die Ausführung des folgenden Befehls nur dann erforderlich, wenn Sie die automatische Neuverschlüsselung Ihrer Secrets deaktivieren.

kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
Warnung

Wenn Sie die Geheimnisverschlüsselung für einen vorhandenen Cluster aktivieren und der von Ihnen verwendete KMS-Schlüssel jemals gelöscht wird, können Sie den Cluster nicht wiederherstellen. Wenn Sie den KMS-Schlüssel löschen, wird der Cluster dauerhaft auf einen degradierten Zustand festgelegt. Weitere Informationen finden Sie unter Löschen von AWS-KMS-Schlüsseln.

Anmerkung

Standardmäßig erstellt der create-key-Befehl einen symmetrischen KMS-Verschlüsselungsschlüssel mit einer Schlüsselrichtlinie, die dem Root-Administrator des Kontos Zugriff auf AWS-KMS-Aktionen und -Ressourcen gewährt. Wenn Sie die Berechtigungen begrenzen möchten, müssen Sie sicherstellen, dass die Aktionen kms:DescribeKey und kms:CreateGrant für die Richtlinie für den Prinzipal zulässig sind, der die API create-cluster aufruft.

Für Cluster, die KMS-Umschlagverschlüsselung verwenden, sind kms:CreateGrant-Berechtigungen erforderlich. Die Bedingung kms:GrantIsForAWSResource wird für die Aktion CreateCluster nicht unterstützt und sollte nicht in KMS-Richtlinien verwendet werden, um kms:CreateGrant-Berechtigungen für Benutzer zu steuern, die CreateCluster ausführen.