Bring Your Own Key (BYOK) dengan disk Azure di Azure Kubernetes Service (AKS)

Azure Storage mengenkripsi semua data dalam akun penyimpanan 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.

Batasan

  • Dukungan enkripsi disk data terbatas pada kluster AKS yang menjalankan Kube versi 1.17 dan yang lebih baru.
  • Enkripsi disk OS dengan kunci yang dikelola pelanggan hanya dapat diaktifkan saat membuat kluster AKS.

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.
  • Kunci yang dikelola pelanggan hanya didukung di Kubernetes versi 1.17 dan yang lebih baru.
  • Jika Anda memilih untuk memutar (mengubah) kunci Anda secara berkala, untuk informasi selengkapnya lihat Kunci yang dikelola pelanggan dan enkripsi disk terkelola Azure.

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 --enable-soft-delete 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 berikut. Simpan Kunci yang ada di Key Vault yang Anda buat pada langkah sebelumnya, atau buat kunci baru dan ganti myKeyName di bawah ini 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 identitas kluster AKS Anda telah membaca izin 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 dan kluster AKS, lalu gunakan kunci Anda untuk mengenkripsi disk OS.

Penting

Pastikan Anda membuat grup sumber daya baru untuk kluster AKS Anda

# Retrieve the DiskEncryptionSet value and set a variable
$diskEncryptionSetId=az disk-encryption-set show -n mydiskEncryptionSetName -g myResourceGroup --query "[id]" -o tsv

# Create a resource group for the AKS cluster
az group create -n myResourceGroup -l myAzureRegionName

# Create the AKS cluster
az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --kubernetes-version KUBERNETES_VERSION --generate-ssh-keys

Ketika kumpulan node baru ditambahkan ke kluster yang dibuat di atas, kunci yang dikelola pelanggan yang disediakan selama pembuatan digunakan untuk mengenkripsi disk OS.

Mengenkripsi disk data kluster AKS Anda(opsional)

Kunci enkripsi disk OS digunakan untuk mengenkripsi disk data jika kunci tidak disediakan untuk disk data dari AKS versi 1.17.2. Anda juga dapat mengenkripsi disk data AKS dengan kunci Anda yang lain.

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.

# Retrieve your Azure Subscription Id from id property as shown below
az account list

Contoh berikut menyerupai output dari perintah:

someuser@Azure:~$ az account list
[
  {
    "cloudName": "AzureCloud",
    "id": "666e66d8-1e43-4136-be25-f25bb5de5893",
    "isDefault": true,
    "name": "MyAzureSubscription",
    "state": "Enabled",
    "tenantId": "3ebbdf90-2069-4529-a1ab-7bdcb24df7cd",
    "user": {
      "cloudShellID": true,
      "name": "someuser@azure.com",
      "type": "user"
    }
  }
]

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. Jika Anda menggunakan Azure Cloud Shell, file ini dapat dibuat menggunakan vi atau nano seolah-olah bekerja pada sistem virtual atau fisik:

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

Menggunakan tag Azure

Untuk detail selengkapnya tentang menggunakan tag Azure, lihat Menggunakan tag Azure di Azure Kubernetes Service (AKS).

Langkah berikutnya

Tinjau praktik terbaik untuk keamanan kluster AKS