Freigeben über


Hinzufügen der etcd-Verschlüsselung von KMS (Schlüsselverwaltungsdienst) zu einem AKS-Cluster (Azure Kubernetes Service)

In diesem Artikel erfahren Sie, wie Sie die Verschlüsselung ruhender Daten für Ihre AKS-Geheimnisse (Azure Kubernetes Service) in einem etcd-Schlüssel-Wert-Speicher mithilfe von Azure Key Vault und dem KMS-Plug-In (Schlüsselverwaltungsdienst) aktivieren. Sie können das KMS-Plug-In für Folgendes verwenden:

  • Verwenden eines Schlüssels in einem Schlüsseltresor für die etcd-Verschlüsselung
  • Verwenden eigener Schlüssel (BYOK).
  • Bereitstellen von Verschlüsselung ruhender Daten für in etcd gespeicherte Geheimnisse
  • Rotieren der Schlüssel in einem Schlüsseltresor

Weitere Informationen zur Verwendung von KMS finden Sie unter Verwenden eines KMS-Anbieters für die Datenverschlüsselung.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Azure CLI, Version 2.39.0 oder höher Führen Sie az --version aus, um Ihre Version zu ermitteln. Installations- und Upgradeinformationen finden Sie bei Bedarf unter Installieren von Azure CLI.

Warnung

Ab dem 15. September 2024 wird Konnectivity für private Schlüsseltresore für neue Abonnements oder Abonnements, die diese Konfiguration zuvor noch nicht verwendet haben, nicht mehr unterstützt. Für Abonnements, die diese Konfiguration derzeit verwenden oder sie in den letzten 60 Tagen verwendet haben, wird der Support fortgesetzt, bis die AKS-Version 1.30 das Ende der Lebensdauer des Communitysupports erreicht.

KMS unterstützt Konnectivity oder die API-Server-VNet-Integration (Vorschau) für öffentliche Schlüsseltresore.

KMS unterstützt die API-Server-VNet-Integration (Vorschau) sowohl für private als auch öffentliche Schlüsseltresore.

Mithilfe von kubectl get po -n kube-system können Sie in den Ergebnissen überprüfen, ob ein Pod vom Typ „konnectivity-agent“ ausgeführt wird. Wenn ein Pod ausgeführt wird, verwendet der AKS-Cluster Konnectivity. Wenn Sie die API Server-VNet-Integration verwenden, können Sie den Befehl az aks show -g -n ausführen, um zu überprüfen, ob die Einstellung enableVnetIntegration auf true festgelegt ist.

Begrenzungen

Die folgenden Einschränkungen gelten, wenn Sie KMS-etcd-Verschlüsselung mit AKS integrieren:

  • Eine Löschung des Schlüssels, des Schlüsseltresors oder der zugehörigen Identität wird nicht unterstützt.
  • etcd-Verschlüsselung von KMS funktioniert nicht mit systemseitig zugewiesenen verwalteten Identitäten. Die Zugriffsrichtlinie für den Schlüsseltresor muss festgelegt werden, bevor das Feature aktiviert wird. Die systemseitig zugewiesene verwaltete Identität ist erst verfügbar, nachdem der Cluster erstellt wurde. Beachten Sie die Zyklusabhängigkeit.
  • Azure Key Vault mit einer Firewalleinstellung "Öffentlichen Zugriff von bestimmten virtuellen Netzwerken und IP-Adressen zulassen" oder "Öffentlichen Zugriff deaktivieren" wird nicht unterstützt, da der Datenverkehr vom KMS-Plug-In zum Schlüsseltresor blockiert wird.
  • Die maximale Anzahl Geheimnisse, die von einem Cluster unterstützt werden, für den KMS aktiviert ist, beträgt 2.000. Beachten Sie jedoch unbedingt, dass KMS v2 nicht dieser Einschränkung unterliegt und eine höhere Anzahl von Geheimnissen verarbeiten kann.
  • Die Verwendung einer eigenen Azure Key Vault-Instanz (BYO) aus einem anderen Mandanten wird nicht unterstützt.
  • Wenn KMS aktiviert ist, können Sie den zugeordneten Schlüsseltresormodus (öffentlich oder privat) nicht ändern. Um den Schlüsseltresormodus zu aktualisieren, müssen Sie zuerst KMS deaktivieren und dann erneut aktivieren.
  • Wenn KMS für ein Cluster aktiviert und der Cluster über einen privaten Schlüsseltresor verfügt, muss er den Tunnel von API Server VNet Integration (Vorschau) verwenden. Konnectivity wird nicht unterstützt.
  • Wenn Sie die Virtual Machine Scale Sets-API verwenden, um die Knoten im Cluster auf null herunter zu skalieren, wird die Zuordnung der Knoten aufgehoben. Der Cluster wird dann heruntergefahren und kann nicht wiederhergestellt werden.
  • Nachdem Sie KMS deaktiviert haben, können Sie die Schlüssel nicht mehr löschen. Wenn Sie die Schlüssel löschen, funktioniert der API-Server nicht mehr.

KMS unterstützt einen öffentlichen Schlüsseltresor und einen privaten Schlüsseltresor.

Aktivieren von KMS für einen öffentlichen Schlüsseltresor

In den folgenden Abschnitten wird beschrieben, wie Sie KMS für einen öffentlichen Schlüsseltresor aktivieren.

Erstellen eines öffentlichen Schlüsseltresors und eines Schlüssels

Warnung

Das Löschen des Schlüssels oder des Schlüsseltresors wird nicht unterstützt, da es dazu führt, dass die Geheimnisse im Cluster nicht wiederhergestellt werden können.

Wenn Sie Ihren Schlüsseltresor oder Schlüssel wiederherstellen müssen, lesen Sie Azure Key Vault-Wiederherstellungsverwaltung mit vorläufigem Löschen und Bereinigungsschutz.

Erstellen eines Schlüsseltresors und Schlüssels für einen öffentlichen Schlüsseltresor ohne RBAC

Verwenden Sie az keyvault create, um einen Schlüsseltresor zu erstellen, der die rollenbasierte Zugriffssteuerung in Azure (RBAC) nicht verwendet:

az keyvault create --name MyKeyVault --resource-group MyResourceGroup

Verwenden Sie az keyvault key create zum Erstellen eines Schlüssels:

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Verwenden Sie az keyvault key show zum Exportieren der Schlüssel-ID:

export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID

In diesem Beispiel wird die Schlüssel-ID in KEY_ID gespeichert.

Erstellen eines Schlüsseltresors und Schlüssels für einen öffentlichen Schlüsseltresor mit RBAC

Verwenden Sie az keyvault create zum Erstellen eines Schlüsseltresors, der Azure RBAC verwendet:

export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup  --enable-rbac-authorization true --query id -o tsv)

Weisen Sie sich die Berechtigung zum Erstellen eines Schlüssels zu:

az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id -o tsv) --assignee-principal-type "User" --scope $KEYVAULT_RESOURCE_ID

Verwenden Sie az keyvault key create zum Erstellen eines Schlüssels:

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Verwenden Sie az keyvault key show zum Exportieren der Schlüssel-ID:

export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID

In diesem Beispiel wird die Schlüssel-ID in KEY_ID gespeichert.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität für einen öffentlichen Schlüsseltresor

Verwenden Sie az identity create zum Erstellen einer benutzerseitig zugewiesenen verwalteten Identität:

az identity create --name MyIdentity --resource-group MyResourceGroup

Verwenden Sie az identity show zum Abrufen der Objekt-ID der Identität:

IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID

Im vorherigen Beispiel wird der Wert der Objekt-ID der Identität in IDENTITY_OBJECT_ID gespeichert.

Verwenden Sie az identity show zum Abrufen der Ressourcen-ID der Identität:

IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID

In diesem Beispiel wird der Wert der Ressourcen-ID der Identität in IDENTITY_RESOURCE_ID gespeichert.

Zuweisen von Berechtigungen zum Entschlüsseln und Verschlüsseln eines öffentlichen Schlüsseltresors

In den folgenden Abschnitten wird beschrieben, wie Sie die Berechtigungen zum Entschlüsseln und Verschlüsseln für einen privaten Schlüsseltresor zuweisen.

Zuweisen von Berechtigungen für einen öffentlichen Schlüsseltresor ohne RBAC

Wenn Ihr Schlüsseltresor nicht mit --enable-rbac-authorization festgelegt wurde, können Sie mit az keyvault set-policy eine Azure Key Vault-Richtlinie erstellen.

az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

Zuweisen von Berechtigungen für einen öffentlichen Schlüsseltresor mit RBAC

Wenn Ihr Schlüsseltresor mit --enable-rbac-authorization festgelegt wurde, weisen Sie die Rolle „Kryptografiebenutzer für Schlüsseltresore“ zu, um die Berechtigungen zum Entschlüsseln und Verschlüsseln zu erteilen.

az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

Erstellen eines AKS-Clusters mit einem öffentlichen Schlüsseltresor und Aktivieren der etcd-Verschlüsselung von KMS

Um die etcd-Verschlüsselung von KMS zu aktivieren, erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-id mit az aks create verwenden.

az aks create \
    --name myAKSCluster \
    --resource-group MyResourceGroup \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-vault-network-access "Public" \
    --azure-keyvault-kms-key-id $KEY_ID \
    --generate-ssh-keys

Aktualisieren eines vorhandenen AKS-Clusters zum Aktivieren der etcd-Verschlüsselung von KMS für einen öffentlichen Schlüsseltresor

Um die etcd-Verschlüsselung von KMS für einen vorhandenen Cluster zu aktivieren, verwenden Sie den Befehl az aks update. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-id mit az-aks-update verwenden.

az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $KEY_ID

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie diesen Befehl nicht ausführen, werden die zuvor erstellten Geheimnisse nicht mehr verschlüsselt. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Rotieren vorhandener Schlüssel in einem öffentlichen Schlüsseltresor

Nachdem Sie die Schlüssel-ID geändert haben (einschließlich der Änderung des Schlüsselnamens oder der Schlüsselversion), können Sie den Befehl az aks update verwenden. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-id mit az-aks-update verwenden, um vorhandene Schlüssel in KMS zu rotieren.

Warnung

Denken Sie daran, nach der Schlüsselrotation alle Geheimnisse zu aktualisieren. Wenn Sie nicht alle Geheimnisse aktualisieren, kann auf die Geheimnisse nicht zugegriffen, wenn die zuvor erstellten Schlüssel nicht mehr vorhanden sind oder nicht mehr funktionieren.

KMS verwendet 2 Tasten gleichzeitig. Nach der ersten Schlüsselrotation müssen Sie sicherstellen, dass sowohl die alten als auch die neuen Tasten gültig (nicht abgelaufen) sind, bis die nächste Tastendrehung erfolgt. Nach der zweiten Schlüsselrotation kann der älteste Schlüssel sicher entfernt werden/abgelaufen sein.

Überprüfen Sie nach dem Rotieren der KMS-Schlüsselversion mit der neuen keyId bitte securityProfile.azureKeyVaultKms.keyId in AKS-Ressourcen-JSON. Stellen Sie sicher, dass die neue Schlüsselversion verwendet wird.

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $NEW_KEY_ID 

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie diesen Befehl nicht ausführen, werden die zuvor erstellten Geheimnisse weiterhin mit dem alten Schlüssel verschlüsselt. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Aktivieren von KMS für einen privaten Schlüsseltresor

Wenn Sie KMS für einen privaten Schlüsseltresor aktivieren, erstellt AKS automatisch einen privaten Endpunkt und eine private Verbindung in der Knotenressourcengruppe. Dem Schlüsseltresor wird eine Verbindung mit dem privaten Endpunkt und dem AKS-Cluster hinzugefügt.

Warnung

KMS unterstützt API Server VNet Integration (Vorschau) nur für private Schlüsseltresore.

Erstellen eines privaten Schlüsseltresors und eines Schlüssels

Warnung

Das Löschen des Schlüssels oder des Schlüsseltresors wird nicht unterstützt, da es dazu führt, dass die Geheimnisse im Cluster nicht wiederhergestellt werden können.

Wenn Sie Ihren Schlüsseltresor oder Schlüssel wiederherstellen müssen, lesen Sie Azure Key Vault-Wiederherstellungsverwaltung mit vorläufigem Löschen und Bereinigungsschutz.

Verwenden Sie az keyvault create zum Erstellen eines privaten Schlüsseltresors:

az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled

Verwenden Sie az keyvault key create zum Erstellen eines Schlüssels:

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Das Erstellen oder Aktualisieren von Schlüsseln in einem privaten Schlüsseltresor, der keinen privaten Endpunkt hat, wird nicht unterstützt. Weitere Informationen zum Verwalten privater Schlüsseltresore finden Sie unter Integrieren eines Schlüsseltresors mithilfe von Azure Private Link.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität für einen privaten Schlüsseltresor

Verwenden Sie az identity create zum Erstellen einer benutzerseitig zugewiesenen verwalteten Identität:

az identity create --name MyIdentity --resource-group MyResourceGroup

Verwenden Sie az identity show zum Abrufen der Objekt-ID der Identität:

IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID

Im vorherigen Beispiel wird der Wert der Objekt-ID der Identität in IDENTITY_OBJECT_ID gespeichert.

Verwenden Sie az identity show zum Abrufen der Ressourcen-ID der Identität:

IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID

In diesem Beispiel wird der Wert der Ressourcen-ID der Identität in IDENTITY_RESOURCE_ID gespeichert.

Zuweisen von Berechtigungen zum Entschlüsseln und Verschlüsseln eines privaten Schlüsseltresors

In den folgenden Abschnitten wird beschrieben, wie Sie die Berechtigungen zum Entschlüsseln und Verschlüsseln für einen privaten Schlüsseltresor zuweisen.

Zuweisen von Berechtigungen für einen privaten Schlüsseltresor ohne RBAC

Hinweis

Wenn Sie einen privaten Schlüsseltresor verwenden, kann AKS die Berechtigungen der Identität nicht überprüfen. Überprüfen Sie, ob der Identität die Berechtigung für den Zugriff auf den Schlüsseltresor zugewiesen wurden, bevor Sie KMS aktivieren.

Wenn Ihr Schlüsseltresor nicht mit --enable-rbac-authorization festgelegt wurde, können Sie mit az keyvault set-policy in Azure eine Key Vault-Richtlinie erstellen:

az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

Zuweisen von Berechtigungen für einen privaten Schlüsseltresor mit RBAC

Wenn Ihr Schlüsseltresor mit --enable-rbac-authorization festgelegt wurde, weisen Sie eine Azure RBAC-Rolle zu, die Berechtigungen für das Entschlüsseln und Verschlüsseln umfasst:

az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

Für private Schlüsseltresore ist die Rolle „Key Vault-Mitwirkender“ erforderlich, um eine private Verbindung zwischen dem privaten Schlüsseltresor und dem Cluster zu erstellen.

az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

Erstellen eines AKS-Clusters mit einem privaten Schlüsseltresor und Aktivieren der etcd-Verschlüsselung von KMS

Um die etcd-Verschlüsselung von KMS für einen privaten Schlüsseltresor zu aktivieren, erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-vault-resource-id mit az-aks-create verwenden.

az aks create \
    --name myAKSCluster \
    --resource-group MyResourceGroup \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID \
    --azure-keyvault-kms-key-vault-network-access "Private" \
    --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID \
    --generate-ssh-keys

Aktualisieren eines vorhandenen AKS-Clusters zum Aktivieren der etcd-Verschlüsselung von KMS für einen privaten Schlüsseltresor

Um die etcd-Verschlüsselung von KMS für einen vorhandenen Cluster zu aktivieren, der über einen privaten Schlüsseltresor verfügt, verwenden Sie den Befehl az aks update. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-vault-resource-id mit az-aks-update verwenden.

az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $KEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie diesen Befehl nicht ausführen, werden die zuvor erstellten Geheimnisse nicht verschlüsselt. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Rotieren vorhandener Schlüssel in einem privaten Schlüsseltresor

Nachdem Sie die Schlüssel-ID (einschließlich des Schlüsselnamens und der Schlüsselversion) geändert haben, können Sie den Befehl az aks update verwenden. Sie können die Parameter --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access und --azure-keyvault-kms-key-vault-resource-id mit az-aks-update verwenden, um vorhandene Schlüssel in KMS zu rotieren.

Warnung

Denken Sie daran, nach der Schlüsselrotation alle Geheimnisse zu aktualisieren. Wenn Sie nicht alle Geheimnisse aktualisieren, kann auf die Geheimnisse nicht zugegriffen, wenn die zuvor erstellten Schlüssel nicht mehr vorhanden sind oder nicht mehr funktionieren.

Nach einer Schlüsselrotation bleibt der alte Schlüssel (key1) weiterhin zwischengespeichert und sollte nicht gelöscht werden. Wenn Sie den alten Schlüssel (key1) sofort löschen möchten, müssen Sie den Schlüssel zweimal rotieren. Dann werden key2 und key3 zwischengespeichert, und key1 kann ohne Auswirkungen auf den vorhandenen Cluster gelöscht werden.

Überprüfen Sie nach dem Rotieren der KMS-Schlüsselversion mit der neuen keyId bitte securityProfile.azureKeyVaultKms.keyId in AKS-Ressourcen-JSON. Stellen Sie sicher, dass die neue Schlüsselversion verwendet wird.

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie nicht alle Geheimnisse aktualisieren, werden zuvor erstellte Geheimnisse mit dem alten Schlüssel verschlüsselt. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Ändern des Schlüsseltresormodus

Hinweis

Um den Modus eines Schlüsseltresors (öffentlich, privat) zu ändern, können Sie az aks update direkt ausführen. Um den Modus eines angefügten Schlüsseltresors zu ändern, müssen Sie zunächst KMS deaktivieren und dann mit den neuen Schlüsseltresor-IDs erneut aktivieren.

In den folgenden Abschnitten wird beschrieben, wie Sie einen angefügten öffentlichen Schlüsseltresor zum privaten Modus migrieren. Diese Schritte können auch für die Migration von privat zu öffentlich verwendet werden.

Deaktivieren von KMS im Cluster

So deaktivieren Sie KMS in einem vorhandenen Cluster und geben den Schlüsseltresor frei

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie diesen Befehl nicht ausführen, werden die zuvor erstellten Geheimnisse weiterhin mit dem alten Schlüssel verschlüsselt. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Ändern des Schlüsseltresormodus

Ändern Sie den Modus des Schlüsseltresors von öffentlich in privat:

az keyvault update --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled

Zum Migrieren von „Privat“ zu „Öffentlich“ legen Sie --public-network-access im Befehl oben auf Enabled fest.

Aktivieren von KMS für einen Cluster mithilfe des aktualisierten Schlüsseltresors

So aktivieren Sie KMS mithilfe des aktualisierten privaten Schlüsseltresors

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

Nachdem Sie KMS eingerichtet haben, können Sie Diagnoseeinstellungen für den Schlüsseltresor aktivieren, um die Verschlüsselungsprotokolle zu überprüfen.

Deaktivieren von KMS

Bevor Sie KMS deaktivieren, können Sie mit dem folgenden Azure CLI-Befehl überprüfen, ob KMS aktiviert ist:

az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table

Wenn die Ergebnisse bestätigen, dass KMS aktiviert ist, führen Sie den folgenden Befehl aus, um KMS im Cluster zu deaktivieren:

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

Verwenden Sie den folgenden Befehl zum Aktualisieren aller Geheimnisse. Wenn Sie diesen Befehl nicht ausführen, werden die zuvor erstellten Geheimnisse weiterhin mit dem alten Schlüssel verschlüsselt, und es sind weiterhin Berechtigungen zum Entschlüsseln und Verschlüsseln im Schlüsseltresor erforderlich. Bei größeren Clustern sollten Sie die Geheimnisse nach Namespace unterteilen oder ein Updateskript erstellen.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

KMS v2-Unterstützung

Ab AKS Version 1.27 wird beim Aktivieren des KMS-Features KMS v2 konfiguriert. Bei KMS v2 gilt nicht die Beschränkung auf 2.000 Geheimnisse, wie in früheren Versionen. Weitere Informationen finden Sie unter Verbesserungen in KMS v2.

Migrieren zu KMS v2

Wenn Ihre Clusterversion älter als 1.27 ist und Sie KMS bereits aktiviert haben, wird ein Upgrade auf Clusterversion 1.27 oder höher blockiert. Führen Sie die folgenden Schritte aus, um zu KMS v2 zu migrieren:

  1. Deaktivieren Sie KMS im Cluster.
  2. Führen Sie die Speichermigration durch.
  3. Führen Sie im Cluster ein Upgrade auf Version 1.27 oder höher durch.
  4. Aktivieren Sie KMS im Cluster.
  5. Führen Sie die Speichermigration durch.

Deaktivieren von KMS zum Migrieren des Speichers

Um KMS in einem vorhandenen Cluster zu deaktivieren, verwenden Sie den Befehl az aks update mit dem Argument --disable-azure-keyvault-kms:

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

Migrieren von Speicher

Um alle Geheimnisse zu aktualisieren, verwenden Sie den Befehl kubectl get secrets mit dem Argument --all-namespaces:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Durchführen eines Upgrades für einen AKS-Cluster

Verwenden Sie den Befehl az aks upgrade, um ein Upgrade eines AKS-Clusters auszuführen. Legen Sie die Version mithilfe des Arguments --kubernetes-version auf 1.27.x oder höher fest.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <AKS version>

Ein Beispiel:

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version 1.27.1

Aktivieren von KMS nach der Speichermigration

Sie können das KMS-Feature im Cluster erneut aktivieren, um die Geheimnisse zu verschlüsseln. Danach verwendet der AKS-Cluster KMS v2. Wenn Sie nicht zu KMS v2 migrieren möchten, können Sie einen neuen Cluster mit Version 1.27 oder höher erstellen, in dem KMS aktiviert ist.

Migrieren von Speicher für KMS v2

Um alle Geheimnisse in KMS v2 erneut zu verschlüsseln, verwenden Sie den Befehl kubectl get secrets mit dem Argument --all-namespaces:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

KMS-Einblick

AKS-Ressourcen-JSON

Sie können die KMS-Konfiguration in der AKS-Ressourcen-JSON wie folgt überprüfen:

  1. Verwenden des az aks show-Befehls
  2. Über das Azure-Portal

Der Abschnitt securityProfile.azureKeyVaultKms zeigt die KMS-Konfiguration, einschließlich Key Vault, Schlüssel, aktueller und vorheriger Schlüsselversionen.

Diagnose und Problembehandlung

Da das KMS-Plug-In ein Sidecar des kube-apiserver-Pods ist, können Sie nicht direkt darauf zugreifen. Um den Einblick von KMS zu verbessern, können Sie den KMS-Status wie folgt überprüfen:

  1. Öffnen Sie die Azure-Portal-Seite Ihres AKS-Clusters.
  2. Wechseln Sie zu Diagnose and solve problems, und suchen Sie nach KMS.
  3. Im KMS-Detektor können Sie den Status von KMS sehen und erkennen, ob er sich in einigen bekannten Ausfallszenarien befindet.

Nehmen Sie KeyExpired: Operation encrypt is not allowed on an expired key als Beispiel:

Da das AKS KMS-Plug-In derzeit nur BYO-Schlüsseltresor und Schlüssel zulässt, liegt es in Ihrer Verantwortung, den Schlüssellebenszyklus zu verwalten. Wenn der Schlüssel abgelaufen ist, kann das KMS-Plug-In die vorhandenen geheimen Schlüssel nicht entschlüsseln. Sie müssen folgende Schritte durchführen

  1. Erweitern des Schlüsselablaufdatums, damit KMS funktioniert
  2. Rotieren der Schlüsselversion