Udostępnij za pośrednictwem


Używanie własnych kluczy (BYOK) z dyskami zarządzanymi platformy Azure w usłudze Azure Kubernetes Service (AKS)

Platforma Azure szyfruje wszystkie dane na dysku zarządzanym magazynowanych. 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 magazynowanych zarówno dla systemu operacyjnego, jak i dysków danych dla klastrów usługi 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 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, musisz:

    • Skalowanie w dół liczby puli węzłów do 0
    • Obracanie klucza
    • Przeskaluj pulę węzłów w górę do oryginalnej liczby.

Tworzenie wystąpienia usługi Azure Key Vault

Przechowywanie kluczy przy użyciu wystąpienia usługi Azure Key Vault. 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

Tworzenie wystąpienia elementu DiskEncryptionSet

Zastąp ciąg myKeyVaultName nazwą magazynu 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.

# 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.

Udzielanie dostępu diskEncryptionSet 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

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

Upewnij się, że masz odpowiednie poświadczenia usługi AKS. Tożsamość zarządzana musi mieć dostęp współautora 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 usługi AKS rolę Współautor dla elementu 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 wartości myAzureSubscriptionId, myResourceGroup i myDiskEncrptionSetName wartościami i 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