Udostępnij przez


Włączanie szyfrowania danych usługi KMS w klastrach usługi Azure Kubernetes Service (AKS) (wersja zapoznawcza)

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

  • 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-preview Azure w wersji 19.0.0b13 lub nowszej .
    • Jeśli nie masz aks-preview jeszcze rozszerzenia, zainstaluj je przy użyciu az extension add polecenia .
      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 polecenia az extension update.
      az extension update --name aks-preview
      
  • kubectl Zainstalowane 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.

  1. Zarejestruj flagę funkcji przy użyciu az feature register polecenia .

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia . Wyświetlenie stanu Zarejestrowane trwa kilka minut.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Gdy stan ma wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu az provider register polecenia .

    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.

  1. 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)
    
  2. 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_ID
    
  3. Utwó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|/[^/]*$||')
    
  4. 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 AzureServices
    

    Parametr --default-action Deny blokuje dostęp do sieci publicznej, a --bypass AzureServices parametr 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

  1. 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)
    
  2. 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

  1. 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)
    
  2. 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_ID
    
  3. Utwó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

  1. 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)
    
  2. 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.