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.
Platforma Azure szyfruje wszystkie dane spoczywające na dysku zarządzanym. Domyślnie dane są szyfrowane przy użyciu kluczy zarządzanych przez firmę Microsoft. Aby uzyskać większą kontrolę nad kluczami szyfrowania, możesz podać klucze zarządzane przez klienta do szyfrowania w spoczynku zarówno systemu operacyjnego, jak i dysków danych dla klastrów AKS.
Dowiedz się więcej o kluczach zarządzanych przez klienta w systemach Linux i Windows.
Wymagania wstępne
- Należy włączyć ochronę przed usuwaniem nietrwałym i przeczyszczać usługę Azure Key Vault podczas szyfrowania dysków zarządzanych przy użyciu usługi Key Vault.
- Potrzebujesz interfejsu wiersza polecenia platformy Azure w wersji 2.11.1 lub nowszej.
- Szyfrowanie dysków danych i klucze zarządzane przez klienta są obsługiwane na platformie Kubernetes w wersji 1.24 lub nowszej.
- Jeśli zdecydujesz się okresowo obracać (zmieniać) klucze, zobacz Klucze zarządzane przez klienta i szyfrowanie dysku zarządzanego platformy Azure, aby uzyskać więcej informacji.
Ograniczenia
Szyfrowanie dysku systemu operacyjnego przy użyciu kluczy zarządzanych przez klienta można włączyć tylko podczas tworzenia klastra usługi AKS.
Węzły wirtualne nie są obsługiwane.
W przypadku szyfrowania efemerycznej puli węzłów z włączoną obsługą dysku systemu operacyjnego przy użyciu kluczy zarządzanych przez klienta, jeśli chcesz obrócić klucz w usłudze Azure Key Vault, należy wziąć pod uwagę dwie opcje:
Natychmiastowe użycie nowego CMK
- Skaluj w dół liczbę puli węzłów do 0.
- Obróć klucz.
- Przeskaluj pulę węzłów w górę do oryginalnej liczby.
Stopniowe użycie nowego klucza CMK zarządzanego przez klienta
- Zezwalaj na uaktualnienia obrazu węzła lub wersji w AKS, aby z czasem w naturalny sposób wdrażały nowy CMK.
- Dopóki wszystkie węzły w puli nie zostaną uaktualnione, istniejący CMK będzie nadal działać bez zakłóceń.
- Po zakończeniu procesu uaktualniania we wszystkich węzłach nowy klucz zarządzania aplikacjami jest bezproblemowo obowiązywać.
Utwórz instancję Azure Key Vault
Użyj wystąpienia usługi Azure Key Vault do przechowywania kluczy. Opcjonalnie możesz użyć witryny Azure Portal do skonfigurowania kluczy zarządzanych przez klienta za pomocą usługi Azure Key Vault
Utwórz nową grupę zasobów, a następnie utwórz nowe wystąpienie usługi Key Vault i włącz usuwanie nietrwałe i ochronę przed przeczyszczeniem. Upewnij się, że używasz tych samych nazw regionów i grup zasobów dla każdego polecenia.
# Optionally retrieve Azure region short names for use on upcoming commands
az account list-locations
# Create new resource group in a supported Azure region
az group create --location myAzureRegionName --name myResourceGroup
# Create an Azure Key Vault resource in a supported Azure region
az keyvault create --name myKeyVaultName --resource-group myResourceGroup --location myAzureRegionName --enable-purge-protection true
Utwórz instancję zestawu szyfrowania dysku
Zastąp ciąg myKeyVaultName nazwą skarbca kluczy. Aby wykonać poniższe kroki, potrzebujesz również klucza przechowywanego w usłudze Azure Key Vault. Zapisz istniejący klucz w magazynie kluczy utworzonym w poprzednich krokach lub wygeneruj nowy klucz i zastąp ciąg myKeyName nazwą klucza.
Uwaga
Aby umożliwić dostęp między kontami do kluczy szyfrowania zarządzanych przez klienta, należy stworzyć zestaw DiskEncryptionSet dla kluczy zarządzanych przez klienta w różnych dzierżawach, zgodnie z tym przewodnikiem. Pozostała konfiguracja klasy pamięci jest taka sama jak standardowe klucze zarządzane przez klienta.
# Retrieve the Key Vault Id and store it in a variable
keyVaultId=$(az keyvault show --name myKeyVaultName --query "[id]" -o tsv)
# Retrieve the Key Vault key URL and store it in a variable
keyVaultKeyUrl=$(az keyvault key show --vault-name myKeyVaultName --name myKeyName --query "[key.kid]" -o tsv)
# Create a DiskEncryptionSet
az disk-encryption-set create --name myDiskEncryptionSetName --location myAzureRegionName --resource-group myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl
Ważne
Upewnij się, że element DiskEncryptionSet znajduje się w tym samym regionie co klaster usługi AKS i że tożsamość klastra usługi AKS ma dostęp do odczytu do elementu DiskEncryptionSet.
Przyznaj zestawowi szyfrowania dysku dostęp do magazynu kluczy
Użyj zestawu DiskEncryptionSet i grup zasobów utworzonych w poprzednich krokach i przyznaj zasobowi DiskEncryptionSet dostęp do usługi Azure Key Vault.
# Retrieve the DiskEncryptionSet value and set a variable
desIdentity=$(az disk-encryption-set show --name myDiskEncryptionSetName --resource-group myResourceGroup --query "[identity.principalId]" -o tsv)
# Update security policy settings
az keyvault set-policy --name myKeyVaultName --resource-group myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
Tworzenie nowego klastra usługi AKS i szyfrowanie dysku systemu operacyjnego
Utwórz nową grupę zasobów lub wybierz istniejącą grupę zasobów hostująca inne klastry usługi AKS, a następnie użyj klucza do zaszyfrowania przy użyciu dysków systemu operacyjnego dołączonych do sieci lub efemerycznego dysku systemu operacyjnego. Domyślnie klaster używa efemerycznego dysku systemu operacyjnego, jeśli jest to możliwe w połączeniu z rozmiarem maszyny wirtualnej i rozmiarem dysku systemu operacyjnego.
Uruchom następujące polecenie, aby pobrać wartość DiskEncryptionSet i ustawić zmienną:
diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)
Jeśli chcesz utworzyć nową grupę zasobów dla klastra, uruchom następujące polecenie:
az group create --name myResourceGroup --location myAzureRegionName
Aby utworzyć zwykły klaster przy użyciu dysków systemu operacyjnego dołączonych do sieci zaszyfrowanych przy użyciu klucza, możesz to zrobić, określając --node-osdisk-type=Managed argument.
az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed
Aby utworzyć klaster z efemerycznym dyskiem systemu operacyjnego zaszyfrowanym przy użyciu klucza, możesz to zrobić, określając --node-osdisk-type=Ephemeral argument. Należy również określić argument --node-vm-size , ponieważ domyślny rozmiar maszyny wirtualnej jest zbyt mały i nie obsługuje efemerycznego dysku systemu operacyjnego.
az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Ephemeral --node-vm-size Standard_DS3_v2
Po dodaniu nowych pul węzłów do klastra klucz zarządzany przez klienta podczas procesu tworzenia jest używany do szyfrowania dysku systemu operacyjnego. W poniższym przykładzie pokazano, jak wdrożyć nową pulę węzłów z efemerycznym dyskiem systemu operacyjnego.
az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral
Ważne
Zestaw szyfrowania dysku, który wcześniej zastosowaliśmy do klasy magazynu, szyfruje tylko nowe PVC. Szyfrowanie istniejących kontrolerów PVC wymaga wcześniejszego odłączenia przed użyciem interfejsu API/interfejsu wiersza polecenia usługi Azure Disks w celu zaktualizowania dysków bazowych, jak pokazano w tym powiązanym przewodniku.
Szyfrowanie dysku danych klastra usługi AKS
Jeśli podczas tworzenia klastra podano już zestaw szyfrowania dysku, szyfrowanie dysków danych przy użyciu tego samego zestawu szyfrowania dysków jest opcją domyślną. W związku z tym ten krok jest opcjonalny. Jeśli jednak chcesz zaszyfrować dyski danych przy użyciu innego zestawu szyfrowania dysków, możesz wykonać następujące kroki.
Ważne
Sprawdź, czy posiadasz odpowiednie poświadczenia do AKS. Zarządzana tożsamość musi mieć dostęp współtwórcy do grupy zasobów, w której wdrożono zestaw diskencryptionset. W przeciwnym razie zostanie wyświetlony błąd sugerujący, że tożsamość zarządzana nie ma uprawnień.
Aby przypisać tożsamość klastra AKS rolę Współtwórca dla diskencryptionset, wykonaj następujące polecenia:
aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId
Utwórz plik o nazwie byok-azure-disk.yaml zawierający następujące informacje. Zastąp myAzureSubscriptionId, myResourceGroup i myDiskEncrptionSetName swoimi wartościami, a następnie zastosuj plik YAML. Upewnij się, że używasz grupy zasobów, w której wdrożono zestaw DiskEncryptionSet.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: byok
provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
parameters:
skuname: StandardSSD_LRS
kind: managed
diskEncryptionSetID: "/subscriptions/{myAzureSubscriptionId}/resourceGroups/{myResourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{myDiskEncryptionSetName}"
Następnie uruchom następujące polecenia, aby zaktualizować klaster usługi AKS:
# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table
# Update cluster
kubectl apply -f byok-azure-disk.yaml
Następne kroki
Zapoznaj się z najlepszymi rozwiązaniami dotyczącymi zabezpieczeń klastra usługi AKS