Bawa kunci Anda sendiri (BYOK) dengan disk terkelola Azure di Azure Kubernetes Service (AKS)

Azure mengenkripsi semua data dalam disk terkelola saat tidak aktif. Secara default, data dienkripsi dengan kunci yang dikelola Microsoft. Untuk kontrol tambahan atas kunci enkripsi, Anda dapat menyediakan kunci yang dikelola pelanggan untuk digunakan sebagai enkripsi saat tidak aktif baik untuk OS maupun disk data bagi kluster AKS Anda.

Pelajari selengkapnya kunci yang dikelola pelanggan di Linux dan Windows.

Prasyarat

  • Anda harus mengaktifkan penghapusan sementara dan perlindungan penghapusan menyeluruh untuk Azure Key Vault saat menggunakan Key Vault untuk mengenkripsi disk terkelola.
  • Azure CLI versi 2.11.1 atau yang lebih baru.
  • Enkripsi disk data dan kunci yang dikelola pelanggan didukung pada Kubernetes versi 1.24 dan yang lebih tinggi.
  • Jika Anda memilih untuk memutar (mengubah) kunci Anda secara berkala, lihat Kunci yang dikelola pelanggan dan enkripsi disk terkelola Azure untuk informasi selengkapnya.

Pembatasan

  • Enkripsi disk OS dengan kunci yang dikelola pelanggan hanya dapat diaktifkan saat membuat kluster AKS.

  • Simpul virtual tidak didukung.

  • Saat mengenkripsi kumpulan simpul berkemampuan disk OS ephemeral dengan kunci yang dikelola pelanggan, jika Anda ingin memutar kunci di Azure Key Vault, Anda perlu:

    • Menurunkan skala jumlah kumpulan simpul menjadi 0
    • Memutar kunci
    • Tingkatkan kumpulan simpul ke jumlah asli.

Membuat instans Azure Key Vault

Gunakan instans Azure Key Vault untuk menyimpan kunci Anda. Anda dapat secara opsional menggunakan portal Microsoft Azure untuk Mengonfigurasi kunci yang dikelola pelanggan dengan Azure Key Vault

Buat grup sumber daya baru, lalu buat instans Key Vault baru dan aktifkan penghapusan sementara dan perlindungan penghapusan menyeluruh. Pastikan Anda menggunakan nama grup wilayah dan sumber daya yang sama untuk setiap perintah.

# 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 -l myAzureRegionName -n myResourceGroup

# Create an Azure Key Vault resource in a supported Azure region
az keyvault create -n myKeyVaultName -g myResourceGroup -l myAzureRegionName  --enable-purge-protection true

Membuat instans dari DiskEncryptionSet

Ganti myKeyVaultName dengan nama brankas kunci Anda. Anda juga memerlukan kunci yang disimpan di Azure Key Vault untuk menyelesaikan langkah-langkah berikut. Simpan Kunci yang ada di Key Vault yang Anda buat pada langkah sebelumnya, atau buat kunci baru dan ganti myKeyName dengan nama kunci Anda.

# 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 -n myDiskEncryptionSetName  -l myAzureRegionName  -g myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl

Penting

Pastikan bahwa DiskEncryptionSet terletak di wilayah yang sama dengan kluster AKS Anda dan identitas kluster AKS memiliki akses baca ke DiskEncryptionSet.

Berikan akses diskEncryptionSet ke brankas kunci

Gunakan DiskEncryptionSet dan grup sumber daya yang Anda buat pada langkah sebelumnya, dan berikan akses sumber daya DiskEncryptionSet ke Azure Key Vault.

# Retrieve the DiskEncryptionSet value and set a variable
desIdentity=$(az disk-encryption-set show -n myDiskEncryptionSetName  -g myResourceGroup --query "[identity.principalId]" -o tsv)

# Update security policy settings
az keyvault set-policy -n myKeyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get

Membuat kluster AKS baru dan mengenkripsi disk OS

Buat grup sumber daya baru, atau pilih grup sumber daya yang ada yang menghosting kluster AKS lainnya, lalu gunakan kunci Anda untuk mengenkripsi baik menggunakan disk OS yang terpasang jaringan atau disk OS ephemeral. Secara default, kluster menggunakan disk OS ephemeral jika memungkinkan bersama dengan ukuran VM dan ukuran disk OS.

Jalankan perintah berikut untuk mengambil nilai DiskEncryptionSet dan atur variabel:

diskEncryptionSetId=$(az disk-encryption-set show -n mydiskEncryptionSetName -g myResourceGroup --query "[id]" -o tsv)

Jika Anda ingin membuat grup sumber daya baru untuk kluster, jalankan perintah berikut:

az group create -n myResourceGroup -l myAzureRegionName

Untuk membuat kluster reguler menggunakan disk OS yang terpasang jaringan yang dienkripsi dengan kunci Anda, Anda dapat melakukannya dengan menentukan --node-osdisk-type=Managed argumen .

az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed

Untuk membuat kluster dengan disk OS ephemeral yang dienkripsi dengan kunci Anda, Anda dapat melakukannya dengan menentukan --node-osdisk-type=Ephemeral argumen . Anda juga perlu menentukan argumen --node-vm-size karena ukuran vm default terlalu kecil dan tidak mendukung disk OS ephemeral.

az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Ephemeral --node-vm-size Standard_DS3_v2

Ketika kumpulan simpul baru ditambahkan ke kluster, kunci yang dikelola pelanggan yang disediakan selama proses pembuatan digunakan untuk mengenkripsi disk OS. Contoh berikut menunjukkan cara menyebarkan kumpulan simpul baru dengan disk OS ephemeral.

az aks nodepool add --cluster-name $CLUSTER_NAME -g $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral

Mengenkripsi disk data kluster AKS Anda

Jika Anda telah menyediakan set enkripsi disk selama pembuatan kluster, mengenkripsi disk data dengan set enkripsi disk yang sama adalah opsi default. Oleh karena itu, langkah ini bersifat opsional. Namun, jika Anda ingin mengenkripsi disk data dengan kumpulan enkripsi disk yang berbeda, Anda dapat mengikuti langkah-langkah ini.

Penting

Pastikan Anda memiliki informasi masuk AKS yang tepat. Identitas terkelola harus memiliki akses kontributor ke grup sumber daya tempat diskencryptionset disebarkan. Jika tidak, Anda akan mendapatkan kesalahan yang menunjukkan bahwa identitas terkelola tidak memiliki izin.

Untuk menetapkan identitas kluster AKS, peran Kontributor untuk diskencryptionset, jalankan perintah berikut:

aksIdentity=$(az aks show -g $RG_NAME -n $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId

Buat file yang diberi nama byok-azure-disk.yaml yang berisi informasi berikut. Ganti myAzureSubscriptionId, myResourceGroup, dan myDiskEncrptionSetName dengan nilai Anda, dan terapkan yaml. Pastikan untuk menggunakan grup sumber daya di tempat DiskEncryptionSet Anda disebarkan.

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}"

Selanjutnya, jalankan perintah berikut untuk memperbarui kluster AKS Anda:

# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table

# Update cluster
kubectl apply -f byok-azure-disk.yaml

Langkah berikutnya

Tinjau praktik terbaik untuk keamanan kluster AKS