Dodawanie szyfrowania usługi KMS itp. do klastra Azure Kubernetes Service (AKS)
W tym artykule pokazano, jak włączyć szyfrowanie danych magazynowanych dla danych kubernetes itp. przy użyciu wtyczki usługi Azure Key Vault z wtyczką usługi zarządzania kluczami (KMS). Wtyczka usługi KMS umożliwia:
- Używanie klucza w Key Vault do szyfrowania etcd
- Używanie własnych kluczy
- Zapewnianie szyfrowania magazynowanych dla wpisów tajnych przechowywanych w itd.
- Obracanie kluczy w Key Vault
Aby uzyskać więcej informacji na temat korzystania z wtyczki usługi KMS, zobacz Szyfrowanie danych tajnych w spoczynku.
Zanim rozpoczniesz
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, możesz utworzyć bezpłatne konto.
- Interfejs wiersza polecenia platformy Azure w wersji 2.39.0 lub nowszej. Uruchom polecenie
az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Ostrzeżenie
Usługa KMS obsługuje tylko konnectivity. Możesz użyć kubectl get po -n kube-system
polecenia , aby sprawdzić, czy jest uruchomiony zasobnik "konnectivity-agent-xxx".
Ograniczenia
Podczas integrowania szyfrowania KMS itp. z usługą AKS obowiązują następujące ograniczenia:
- Usunięcie klucza, Key Vault lub skojarzonej tożsamości.
- Szyfrowanie usługi KMS itp. nie działa z tożsamością zarządzaną System-Assigned. Przed włączeniem funkcji należy ustawić zasady dostępu do usługi Keyvault. Ponadto tożsamość zarządzana System-Assigned nie jest dostępna do momentu utworzenia klastra, dlatego istnieje zależność cyklu.
- Używanie ponad 2000 wpisów tajnych w klastrze.
- Bring your own (BYO) Azure Key Vault z innej dzierżawy.
- Zmień skojarzony model usługi Azure Key Vault (publiczny, prywatny), jeśli usługa KMS jest włączona. Aby zmienić skojarzony tryb magazynu kluczy, należy ponownie wyłączyć i włączyć usługę KMS.
- Zatrzymaj/uruchom klaster, który jest włączony w usłudze KMS z prywatnym magazynem kluczy.
Usługa KMS obsługuje teraz publiczny magazyn kluczy i prywatny magazyn kluczy .
Włączanie usługi KMS z publicznym magazynem kluczy
Tworzenie magazynu kluczy i klucza
Ostrzeżenie
Usunięcie klucza lub Key Vault platformy Azure nie jest obsługiwane i spowoduje, że wpisy tajne będą nieodwracalne w klastrze.
Jeśli musisz odzyskać Key Vault lub klucz, zapoznaj się z dokumentacją zarządzania odzyskiwaniem w usłudze Azure Key Vault za pomocą usuwania nietrwałego i ochrony przed przeczyszczeniem.
W przypadku magazynu kluczy innych niż RBAC
Użyj az keyvault create
polecenia , aby utworzyć usługę KeyVault.
az keyvault create --name MyKeyVault --resource-group MyResourceGroup
Użyj az keyvault key create
polecenia , aby utworzyć klucz.
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Użyj az keyvault key show
polecenia , aby wyeksportować identyfikator klucza.
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
Powyższy przykład przechowuje identyfikator klucza w KEY_ID.
W przypadku magazynu kluczy RBAC
Użyj az keyvault create
polecenia , aby utworzyć usługę KeyVault przy użyciu Access Control opartej na rolach platformy Azure.
export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup --enable-rbac-authorization true --query id -o tsv)
Przypisz sobie uprawnienia do tworzenia klucza.
az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id --out tsv) --assignee-principal-type "User" --scope $KEYVAULT_RESOURCE_ID
Użyj az keyvault key create
polecenia , aby utworzyć klucz.
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Użyj az keyvault key show
polecenia , aby wyeksportować identyfikator klucza.
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
Powyższy przykład przechowuje identyfikator klucza w KEY_ID.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Użyj polecenia az identity create
, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika.
az identity create --name MyIdentity --resource-group MyResourceGroup
Użyj az identity show
polecenia , aby uzyskać identyfikator obiektu tożsamości.
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
Powyższy przykład przechowuje wartość identyfikatora obiektu tożsamości w IDENTITY_OBJECT_ID.
Użyj az identity show
polecenia , aby uzyskać identyfikator zasobu tożsamości.
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
Powyższy przykład przechowuje wartość identyfikatora zasobu tożsamości w IDENTITY_RESOURCE_ID.
Przypisywanie uprawnień (odszyfrowywanie i szyfrowanie) w celu uzyskania dostępu do magazynu kluczy
W przypadku magazynu kluczy innych niż RBAC
Jeśli magazyn kluczy nie jest włączony za --enable-rbac-authorization
pomocą usługi , możesz użyć az keyvault set-policy
polecenia , aby utworzyć zasady usługi Azure KeyVault.
az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
W przypadku magazynu kluczy RBAC
Jeśli magazyn kluczy jest włączony w --enable-rbac-authorization
usłudze , musisz przypisać rolę RBAC "Key Vault Crypto User", która ma odszyfrowywać, szyfrować uprawnienia.
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Tworzenie klastra usługi AKS z włączonym szyfrowaniem kmS itp.
Utwórz klaster usługi AKS przy użyciu polecenia az aks create z parametrami --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-vault-network-access
i --azure-keyvault-kms-key-id
w celu włączenia szyfrowania usługi KMS itp.
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
Aktualizowanie istniejącego klastra usługi AKS w celu włączenia szyfrowania KMS itp.
Użyj polecenia az aks update z parametrami --enable-azure-keyvault-kms
i --azure-keyvault-kms-key-id
, --azure-keyvault-kms-key-vault-network-access
aby włączyć szyfrowanie usługi KMS itp. w istniejącym klastrze.
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
Użyj poniższego polecenia, aby zaktualizować wszystkie wpisy tajne. W przeciwnym razie stare wpisy tajne nie są szyfrowane.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uwaga
W przypadku większych klastrów możesz rozdzielić wpisy tajne według przestrzeni nazw lub skryptu aktualizacji.
Obracanie istniejących kluczy
Po zmianie identyfikatora klucza (w tym nazwy klucza i wersji klucza) można użyć polecenia az aks update z --enable-azure-keyvault-kms
parametrami , --azure-keyvault-kms-key-vault-network-access
i --azure-keyvault-kms-key-id
do rotacji kluczy zakończenia usługi KMS.
Ostrzeżenie
Pamiętaj, aby zaktualizować wszystkie wpisy tajne po rotacji kluczy. W przeciwnym razie wpisy tajne będą niedostępne, jeśli stare klucze nie istnieją lub działają.
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
Użyj poniższego polecenia, aby zaktualizować wszystkie wpisy tajne. W przeciwnym razie stare wpisy tajne są nadal szyfrowane przy użyciu poprzedniego klucza.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uwaga
W przypadku większych klastrów możesz rozdzielić wpisy tajne według przestrzeni nazw lub skryptu aktualizacji.
Włączanie usługi KMS z prywatnym magazynem kluczy
Jeśli włączysz usługę KMS z prywatnym magazynem kluczy, usługa AKS automatycznie utworzy prywatny punkt końcowy i link prywatny w grupie zasobów węzła. Magazyn kluczy zostanie dodany do prywatnego połączenia punktu końcowego z klastrem usługi AKS.
Tworzenie prywatnego magazynu kluczy i klucza
Ostrzeżenie
Usunięcie klucza lub Key Vault platformy Azure nie jest obsługiwane i spowoduje, że wpisy tajne będą nieodwracalne w klastrze.
Jeśli musisz odzyskać Key Vault lub klucz, zapoznaj się z dokumentacją zarządzania odzyskiwaniem w usłudze Azure Key Vault za pomocą usuwania nietrwałego i ochrony przed przeczyszczeniem.
Użyj az keyvault create
polecenia , aby utworzyć priate KeyVault.
az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
Bez prywatnego punktu końcowego nie jest obsługiwane tworzenie ani aktualizowanie kluczy w prywatnym magazynie kluczy. Aby zarządzać prywatnym magazynem kluczy, zobacz Integrowanie Key Vault z Azure Private Link.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Użyj polecenia az identity create
, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika.
az identity create --name MyIdentity --resource-group MyResourceGroup
Użyj az identity show
polecenia , aby uzyskać identyfikator obiektu tożsamości.
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
Powyższy przykład przechowuje wartość identyfikatora obiektu tożsamości w IDENTITY_OBJECT_ID.
Użyj az identity show
polecenia , aby uzyskać identyfikator zasobu tożsamości.
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
Powyższy przykład przechowuje wartość identyfikatora zasobu tożsamości w IDENTITY_RESOURCE_ID.
Przypisywanie uprawnień (odszyfrowywanie i szyfrowanie) w celu uzyskania dostępu do magazynu kluczy
W przypadku magazynu kluczy innych niż RBAC
Jeśli magazyn kluczy nie jest włączony za --enable-rbac-authorization
pomocą usługi , możesz użyć az keyvault set-policy
polecenia , aby utworzyć zasady usługi Azure KeyVault.
az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
W przypadku magazynu kluczy RBAC
Jeśli magazyn kluczy jest włączony z usługą --enable-rbac-authorization
, musisz przypisać rolę RBAC, która zawiera co najmniej odszyfrowywanie, szyfrowanie uprawnień.
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Przypisywanie uprawnień do tworzenia łącza prywatnego
W przypadku magazynu kluczy prywatnych usługa AKS musi Key Vault rolę Współautor, aby utworzyć połączenie prywatne między prywatnym magazynem kluczy a klastrem.
az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Tworzenie klastra usługi AKS z prywatnym magazynem kluczy i włączanie szyfrowania usługi KMS itp.
Utwórz klaster usługi AKS przy użyciu polecenia az aks create z parametrami --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
i --azure-keyvault-kms-key-vault-resource-id
w --azure-keyvault-kms-key-vault-network-access
celu włączenia szyfrowania usługi KMS itpd z prywatnym magazynem kluczy.
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
Aktualizowanie istniejącego klastra usługi AKS w celu włączenia szyfrowania kmS itp. za pomocą prywatnego magazynu kluczy
Użyj polecenia az aks update z parametrami --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
i --azure-keyvault-kms-key-vault-resource-id
, --azure-keyvault-kms-key-vault-network-access
aby włączyć szyfrowanie usługi KMS itp. w istniejącym klastrze z prywatnym magazynem kluczy.
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
Użyj poniższego polecenia, aby zaktualizować wszystkie wpisy tajne. W przeciwnym razie stare wpisy tajne nie są szyfrowane.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uwaga
W przypadku większych klastrów możesz rozdzielić wpisy tajne według przestrzeni nazw lub skryptu aktualizacji.
Obracanie istniejących kluczy
Po zmianie identyfikatora klucza (w tym nazwy klucza i wersji klucza) można użyć polecenia az aks update z parametrami --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
--azure-keyvault-kms-key-vault-network-access
i --azure-keyvault-kms-key-vault-resource-id
do rotacji istniejących kluczy usługi KMS.
Ostrzeżenie
Pamiętaj, aby zaktualizować wszystkie wpisy tajne po rotacji kluczy. W przeciwnym razie wpisy tajne będą niedostępne, jeśli stare klucze nie istnieją lub działają.
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
Użyj poniższego polecenia, aby zaktualizować wszystkie wpisy tajne. W przeciwnym razie stare wpisy tajne są nadal szyfrowane przy użyciu poprzedniego klucza.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uwaga
W przypadku większych klastrów możesz rozdzielić wpisy tajne według przestrzeni nazw lub skryptu aktualizacji.
Aktualizowanie trybu magazynu kluczy
Uwaga
Aby zmienić inny magazyn kluczy z innym trybem (publicznym, prywatnym), można uruchomić az aks update
bezpośrednio. Aby zmienić tryb dołączonego magazynu kluczy, należy przeprowadzić dystrybucję usługi KMS i ponownie włączyć ją przy użyciu nowych identyfikatorów magazynu kluczy.
Poniżej przedstawiono kroki migracji dołączonego magazynu kluczy publicznych do trybu prywatnego.
Wyłączanie usługi KMS w klastrze
Użyj poniższego polecenia, aby wyłączyć usługę KMS w istniejącym klastrze i zwolnić magazyn kluczy.
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Zmienianie trybu magazynu kluczy
Zaktualizuj magazyn kluczy z publicznego na prywatny.
az keyvault update --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
Włączanie usługi KMS w klastrze ze zaktualizowanym magazynem kluczy
Użyj poniższego polecenia, aby ponownie włączyć usługę KMS ze zaktualizowanym prywatnym magazynem kluczy.
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
Po skonfigurowaniu usługi KMS można włączyć ustawienia diagnostyczne magazynu kluczy w celu sprawdzenia dzienników szyfrowania.
Wyłączanie usługi KMS
Użyj poniższego polecenia, aby wyłączyć usługę KMS w istniejącym klastrze.
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Użyj poniższego polecenia, aby zaktualizować wszystkie wpisy tajne. W przeciwnym razie stare wpisy tajne są nadal szyfrowane przy użyciu poprzedniego klucza.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uwaga
W przypadku większych klastrów możesz rozdzielić wpisy tajne według przestrzeni nazw lub skryptu aktualizacji.