Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak włączyć szyfrowanie danych w usłudze zarządzania kluczami (KMS) dla tajemnic Kubernetes w usłudze Azure Kubernetes Service (AKS). Szyfrowanie KMS szyfruje sekrety Kubernetes przechowywane w etcd przy użyciu kluczy Azure Key Vault.
AKS obsługuje dwie opcje zarządzania kluczami:
- Klucze zarządzane przez platformę (PMK): usługa AKS automatycznie tworzy klucze szyfrowania i zarządza nimi. Ta opcja zapewnia najprostszą konfigurację z automatycznym obracaniem kluczy.
- Klucze zarządzane przez klienta (CMK) : możesz tworzyć własne usługi Azure Key Vault i klucze szyfrowania oraz zarządzać nimi. Ta opcja zapewnia pełną kontrolę nad zarządzaniem cyklem życia klucza i spełnia wymogi zgodności, w tym wymóg użycia kluczy zarządzanych przez klienta.
Aby uzyskać więcej informacji na temat pojęć szyfrowania danych oraz opcji kluczy, zobacz Pojęcia dotyczące szyfrowania danych przechowywanych dla usługi AKS.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania wstępne
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do Azure CLI za pomocą polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
- Ten artykuł wymaga wersji 2.73.0 lub nowszej interfejsu wiersza polecenia platformy Azure. Jeśli używasz usługi Azure Cloud Shell, najnowsza wersja jest już tam zainstalowana.
- Potrzebujesz rozszerzenia interfejsu wiersza polecenia platformy
aks-previewAzure w wersji 19.0.0b13 lub nowszej .- Jeśli nie masz
aks-previewjeszcze rozszerzenia, zainstaluj je przy użyciuaz extension addpolecenia .az extension add --name aks-preview - Jeśli masz już rozszerzenie
aks-preview, zaktualizuj je, aby upewnić się, że masz najnowszą wersję z użyciem poleceniaaz extension update.az extension update --name aks-preview
- Jeśli nie masz
-
kubectlZainstalowane narzędzie CLI.
Rejestrowanie flagi funkcji
Aby użyć szyfrowania danych usługi KMS z kluczami zarządzanymi przez platformę, zarejestruj KMSPMKPreview jako flagę funkcji w subskrypcji.
Zarejestruj flagę funkcji przy użyciu
az feature registerpolecenia .az feature register --namespace Microsoft.ContainerService --name KMSPMKPreviewSprawdź stan rejestracji przy użyciu
az feature showpolecenia . Wyświetlenie stanu Zarejestrowane trwa kilka minut.az feature show --namespace Microsoft.ContainerService --name KMSPMKPreviewGdy stan ma wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu
az provider registerpolecenia .az provider register --namespace Microsoft.ContainerService
Konfgurowanie zmiennych środowiskowych
Skonfiguruj zmienne środowiskowe dla wdrożenia. Zamień wartości zastępcze na własne.
# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"
# Set subscription
az account set --subscription $SUBSCRIPTION_ID
# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION
Włączanie szyfrowania kluczy zarządzanych przez platformę
Za pomocą kluczy zarządzanych przez platformę, AKS automatycznie tworzy i zarządza usługą Azure Key Vault oraz kluczami szyfrowania. Rotacja kluczy jest obsługiwana automatycznie przez platformę.
Tworzenie nowego klastra usługi AKS przy użyciu kluczy zarządzanych przez platformę
Utwórz nowy klaster usługi AKS z szyfrowaniem KMS przy użyciu kluczy zarządzanych przez platformę.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--generate-ssh-keys
Włączanie kluczy zarządzanych przez platformę w istniejącym klastrze
Włącz szyfrowanie usługi KMS przy użyciu kluczy zarządzanych przez platformę w istniejącym klastrze usługi AKS.
Uwaga / Notatka
Klaster musi mieć uruchomioną platformę Kubernetes w wersji 1.33 lub nowszej.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled
Włączanie szyfrowania kluczy zarządzanych przez klienta za pomocą prywatnego magazynu kluczy
W przypadku zwiększonych zabezpieczeń można użyć prywatnego magazynu kluczy, który ma wyłączony dostęp do sieci publicznej. Usługa AKS uzyskuje dostęp do prywatnego magazynu kluczy za pośrednictwem wyjątku zapory zaufanych usług. W tej sekcji przedstawiono sposób konfigurowania kluczy zarządzanych przez klienta przy użyciu prywatnego magazynu kluczy.
Utwórz magazyn kluczy i klucz z dostępem do zaufanych usług
Uwaga / Notatka
W tej sekcji pokazano, jak początkowo utworzyć magazyn kluczy z dostępem do sieci publicznej, a następnie włączyć zaporę z obejściem zaufanych usług. Takie podejście jest przeznaczone tylko do celów ilustracyjnych. W środowiskach produkcyjnych należy utworzyć magazyn kluczy i zarządzać nim jako prywatny od samego początku. Aby uzyskać wskazówki dotyczące zarządzania magazynami kluczy prywatnych, zobacz Zabezpieczenia sieciowe usługi Azure Key Vault.
Utwórz magazyn kluczy z włączoną funkcją Azure RBAC (kontrola dostępu opartą na rolach).
export KEY_VAULT_NAME="<your-key-vault-name>" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --enable-rbac-authorization true \ --public-network-access Enabled # Get the key vault resource ID export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)Przypisz sobie rolę administratora kryptograficznego usługi Key Vault, aby utworzyć klucz.
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 $KEY_VAULT_RESOURCE_IDUtwórz klucz w skarbcu kluczy.
export KEY_NAME="<your-key-name>" az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME # Get the key ID (without version for automatic rotation) export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv) export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')Włącz zaporę sieciową magazynu kluczy, umożliwiając obejście dla zaufanych usług.
az keyvault update \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --default-action Deny \ --bypass AzureServicesParametr
--default-action Denyblokuje dostęp do sieci publicznej, a--bypass AzureServicesparametr umożliwia zaufanym usługom platformy Azure (w tym usłudze AKS) dostęp do magazynu kluczy.
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Utwórz tożsamość zarządzaną przypisaną przez użytkownika dla klastra.
export IDENTITY_NAME="<your-identity-name>" az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP # Get the identity details export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)Przypisz wymagane role do tożsamości zarządzanej.
# Assign Key Vault Crypto User role for encrypt/decrypt operations az role assignment create \ --role "Key Vault Crypto User" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID # Assign Key Vault Contributor role for key management az role assignment create \ --role "Key Vault Contributor" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID
Tworzenie nowego klastra usługi AKS przy użyciu kluczy zarządzanych przez klienta (prywatnych)
Utwórz nowy klaster usługi AKS z szyfrowaniem KMS przy użyciu kluczy zarządzanych przez klienta z prywatnym magazynem kluczy.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Private \
--assign-identity $IDENTITY_RESOURCE_ID \
--generate-ssh-keys
Włączanie kluczy zarządzanych przez klienta w istniejącym klastrze (prywatnym)
Włącz szyfrowanie KMS kluczami zarządzanymi przez klienta przy użyciu prywatnego magazynu kluczy w istniejącym klastrze AKS.
Uwaga / Notatka
Klaster musi mieć uruchomioną platformę Kubernetes w wersji 1.33 lub nowszej.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Private \
--assign-identity $IDENTITY_RESOURCE_ID
Włączanie szyfrowania kluczy zarządzanych przez klienta za pomocą publicznego magazynu kluczy
Za pomocą kluczy zarządzanych przez klienta tworzysz i zarządzasz własnymi zasobami Azure Key Vault i kluczami szyfrowania. W tej sekcji przedstawiono sposób konfigurowania kluczy zarządzanych przez klienta za pomocą publicznego magazynu kluczy.
Tworzenie magazynu kluczy i klucza
Utwórz magazyn kluczy z włączoną funkcją Azure RBAC (kontrola dostępu opartą na rolach).
export KEY_VAULT_NAME="<your-key-vault-name>" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --enable-rbac-authorization true \ --public-network-access Enabled # Get the key vault resource ID export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)Przypisz sobie rolę administratora kryptograficznego usługi Key Vault, aby utworzyć klucz.
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 $KEY_VAULT_RESOURCE_IDUtwórz klucz w skarbcu kluczy.
export KEY_NAME="<your-key-name>" az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME # Get the key ID (without version for automatic rotation) export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv) export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Utwórz tożsamość zarządzaną przypisaną przez użytkownika dla klastra.
export IDENTITY_NAME="<your-identity-name>" az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP # Get the identity details export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)Przypisz wymagane role do tożsamości zarządzanej.
# Assign Key Vault Crypto User role for encrypt/decrypt operations az role assignment create \ --role "Key Vault Crypto User" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID # Assign Key Vault Contributor role for key management az role assignment create \ --role "Key Vault Contributor" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID
Tworzenie nowego klastra usługi AKS przy użyciu kluczy zarządzanych przez klienta
Utwórz nowy klaster usługi AKS z szyfrowaniem KMS przy użyciu kluczy zarządzanych przez klienta.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID \
--generate-ssh-keys
Włączanie kluczy zarządzanych przez klienta w istniejącym klastrze
Włącz szyfrowanie usługi KMS przy użyciu kluczy zarządzanych przez klienta w istniejącym klastrze usługi AKS.
Uwaga / Notatka
Klaster musi mieć uruchomioną platformę Kubernetes w wersji 1.33 lub nowszej.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID
Weryfikowanie konfiguracji usługi KMS
Po włączeniu szyfrowania kmS sprawdź konfigurację.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
Dane wyjściowe obejmują konfigurację usługi KMS:
{
"azureKeyVaultKms": {
"enabled": true,
"keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
"keyVaultNetworkAccess": "Public",
"keyVaultResourceId": "<key-vault-resource-id>"
},
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
Migrowanie między opcjami zarządzania kluczami
Można migrować między kluczami zarządzanymi przez platformę i kluczami zarządzanymi przez klienta.
Migrowanie z kluczy zarządzanych przez platformę do kluczy zarządzanych przez klienta
Aby przeprowadzić migrację z kluczy zarządzanych przez platformę do kluczy zarządzanych przez klienta, najpierw skonfiguruj magazyn kluczy, klucz i tożsamość zarządzaną zgodnie z opisem w sekcji Klucze zarządzane przez klienta, a następnie uruchom polecenie aktualizacji:
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID
Migrowanie z kluczy zarządzanych przez klienta do kluczy zarządzanych przez platformę
Aby przeprowadzić migrację z kluczy zarządzanych przez klienta do kluczy zarządzanych przez platformę:
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--disable-azure-keyvault-kms
Rotacja klucza
W przypadku szyfrowania danych usługi KMS rotacja kluczy jest obsługiwana inaczej w zależności od opcji zarządzania kluczami:
- Klucze zarządzane przez platformę: rotacja kluczy jest automatyczna. Nie trzeba podejmować żadnych działań.
- Klucze zarządzane przez klienta: po rotacji wersji klucza w usłudze Azure Key Vault kontroler usługi KMS okresowo wykrywa rotację (co 6 godzin) i używa nowej wersji klucza.
Uwaga / Notatka
W przeciwieństwie do starszego środowiska usługi KMS, dzięki tej nowej implementacji nie trzeba ręcznie ponownie szyfrować sekretów po rotacji kluczy. Platforma obsługuje to automatycznie.