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
Zuweisen von Berechtigungen zum Erstellen einer privaten Verbindung
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:
- Deaktivieren Sie KMS im Cluster.
- Führen Sie die Speichermigration durch.
- Führen Sie im Cluster ein Upgrade auf Version 1.27 oder höher durch.
- Aktivieren Sie KMS im Cluster.
- 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:
- Verwenden des
az aks show
-Befehls - Ü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:
- Öffnen Sie die Azure-Portal-Seite Ihres AKS-Clusters.
- Wechseln Sie zu
Diagnose and solve problems
, und suchen Sie nachKMS
. - 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
- Erweitern des Schlüsselablaufdatums, damit KMS funktioniert
- Rotieren der Schlüsselversion
Azure Kubernetes Service