Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menunjukkan cara mengaktifkan enkripsi data Key Management Service (KMS) untuk rahasia Kubernetes di Azure Kubernetes Service (AKS). Enkripsi KMS mengenkripsi rahasia Kubernetes yang disimpan di etcd menggunakan kunci Azure Key Vault.
AKS mendukung dua opsi manajemen kunci:
- Kunci yang dikelola platform (PMK): AKS secara otomatis membuat dan mengelola kunci enkripsi. Opsi ini menyediakan pengaturan paling sederhana dengan rotasi kunci otomatis.
- Kunci yang dikelola pelanggan (CMK): Anda membuat dan mengelola Azure Key Vault dan kunci enkripsi Anda sendiri. Opsi ini memberikan kontrol penuh atas siklus hidup utama dan memenuhi persyaratan kepatuhan yang mengamanatkan kunci yang dikelola pelanggan.
Untuk informasi selengkapnya tentang konsep enkripsi dan opsi utama, lihat Konsep enkripsi data saat tidak aktif untuk AKS.
Penting
Fitur pratinjau AKS tersedia atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau AKS sebagian didukung oleh dukungan pelanggan berdasarkan upaya terbaik yang dapat dilakukan. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Prasyarat
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai menggunakan Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah az login. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Mengautentikasi ke Azure menggunakan Azure CLI.
Saat diminta, instal ekstensi Azure CLI saat pertama kali digunakan. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan dan mengelola ekstensi dengan Azure CLI.
Jalankan az version untuk menemukan versi dan pustaka dependen yang terinstal. Untuk meng-upgrade ke versi terbaru, jalankan az upgrade.
- Artikel ini memerlukan Azure CLI versi 2.73.0 atau yang lebih baru. Jika Anda menggunakan Azure Cloud Shell, versi terbaru sudah diinstal di sana.
- Anda memerlukan
aks-previewekstensi Azure CLI versi 19.0.0b13 atau yang lebih baru.- Jika Anda belum memiliki
aks-previewekstensi, instal menggunakanaz extension addperintah .az extension add --name aks-preview - Jika Anda sudah memiliki
aks-previewekstensi, perbarui untuk memastikan Anda memiliki versi terbaru menggunakanaz extension updateperintah .az extension update --name aks-preview
- Jika Anda belum memiliki
-
kubectlAlat CLI terinstal.
Daftarkan bendera fitur
Untuk menggunakan enkripsi data KMS dengan kunci yang dikelola platform, daftarkan KMSPMKPreview bendera fitur di langganan Anda.
Daftarkan bendera fitur menggunakan
az feature registerperintah .az feature register --namespace Microsoft.ContainerService --name KMSPMKPreviewVerifikasi status pendaftaran menggunakan
az feature showperintah . Dibutuhkan beberapa menit agar status menampilkan Terdaftar.az feature show --namespace Microsoft.ContainerService --name KMSPMKPreviewSaat status menunjukkan Terdaftar, segar ulang pendaftaran penyedia sumber daya Microsoft.ContainerService dengan perintah
az provider register.az provider register --namespace Microsoft.ContainerService
Menyiapkan variabel lingkungan
Setel variabel lingkungan untuk deployment Anda. Ganti nilai placeholder dengan nilai Anda sendiri.
# 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
Mengaktifkan enkripsi kunci yang dikelola platform
Dengan kunci yang dikelola platform, AKS secara otomatis membuat dan mengelola Azure Key Vault dan kunci enkripsi. Rotasi kunci ditangani secara otomatis oleh platform.
Membuat kluster AKS baru dengan kunci yang dikelola platform
Buat kluster AKS baru dengan enkripsi KMS menggunakan kunci yang dikelola platform.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--generate-ssh-keys
Mengaktifkan kunci yang dikelola platform pada kluster yang ada
Aktifkan enkripsi KMS dengan kunci yang dikelola platform pada kluster AKS yang ada.
Nota
Kluster harus menjalankan Kubernetes versi 1.33 atau yang lebih baru.
Jika perintah az aks update mengembalikan error ReconcileAzureKeyVaultKmsError, jalankan perintah berikut untuk memeriksa apakah Anda dapat membaca dan menulis rahasia yang ada:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Jika perintah ini gagal (misalnya, penolakan webhook atau sumber daya tidak ditemukan), perbaiki masalah dan jalankan kembali perintah pembaruan. Pesan "Objek telah dimodifikasi" tidak memerlukan tindakan — anggap itu sebagai berhasil.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled
Memverifikasi konfigurasi KMS
Setelah mengaktifkan enkripsi KMS, verifikasi konfigurasi.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
Output mencakup konfigurasi KMS:
{
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
Mengaktifkan enkripsi kunci yang dikelola pelanggan dengan brankas kunci privat
Untuk keamanan yang ditingkatkan, Anda dapat menggunakan brankas kunci privat yang menonaktifkan akses jaringan publik. AKS mengakses brankas kunci pribadi melalui pengecualian firewall layanan tepercaya. Bagian ini menunjukkan cara mengonfigurasi kunci yang dikelola pelanggan dengan brankas kunci privat.
Buat penyimpanan kunci dan kunci dengan akses layanan tepercaya
Nota
Bagian ini menggambarkan pembuatan Key Vault dengan mulanya akses jaringan publik, lalu mengaktifkan firewall dengan melewati layanan yang dipercaya. Pendekatan ini hanya untuk tujuan ilustrasi. Di lingkungan produksi, Anda harus membuat dan mengelola brankas kunci secara privat sejak awal. Untuk panduan tentang mengelola brankas kunci privat, lihat Keamanan jaringan Azure Key Vault.
Buat brankas kunci dengan Azure RBAC diaktifkan.
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)Tetapkan diri Anda peran Petugas Kripto Key Vault untuk membuat kunci.
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_IDBuat kunci di brankas kunci. Pastikan
encryptdandecryptoperasi utama diaktifkan.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|/[^/]*$||')Aktifkan firewall key vault dengan melewati layanan tepercaya.
az keyvault update \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --default-action Deny \ --bypass AzureServicesParameter
--default-action Denymemblokir akses jaringan publik, dan--bypass AzureServicesparameter memungkinkan layanan Azure tepercaya (termasuk AKS) untuk mengakses brankas kunci.
Buat identitas terkelola yang ditetapkan pengguna
Buat identitas terkelola yang ditetapkan pengguna untuk kluster.
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)Tetapkan peran yang diperlukan ke identitas terkelola.
# 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
Membuat kluster AKS baru dengan kunci yang dikelola pelanggan (privat)
Buat kluster AKS baru dengan enkripsi KMS menggunakan kunci yang dikelola pelanggan dengan brankas kunci privat.
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
Mengaktifkan kunci yang dikelola pelanggan pada kluster yang ada (privat)
Aktifkan enkripsi KMS dengan kunci yang dikelola pelanggan menggunakan brankas kunci privat pada kluster AKS yang ada.
Nota
Kluster harus menjalankan Kubernetes versi 1.33 atau yang lebih baru.
Jika perintah az aks update mengembalikan error ReconcileAzureKeyVaultKmsError, jalankan perintah berikut untuk memeriksa apakah Anda dapat membaca dan menulis rahasia yang ada:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Jika perintah ini gagal (misalnya, penolakan webhook atau sumber daya tidak ditemukan), perbaiki masalah dan jalankan kembali perintah pembaruan. Pesan "Objek telah dimodifikasi" tidak memerlukan tindakan — anggap itu sebagai berhasil.
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
Memverifikasi konfigurasi KMS
Setelah mengaktifkan enkripsi KMS, verifikasi konfigurasi.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
Output mencakup konfigurasi KMS:
{
"azureKeyVaultKms": {
"enabled": true,
"keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
"keyVaultNetworkAccess": "Private",
"keyVaultResourceId": "<key-vault-resource-id>"
},
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
Mengaktifkan enkripsi kunci yang dikelola pelanggan dengan brankas kunci publik
Dengan kunci yang dikelola pelanggan, Anda membuat dan mengelola Azure Key Vault dan kunci enkripsi Anda sendiri. Bagian ini menunjukkan cara mengonfigurasi kunci yang dikelola pelanggan dengan brankas kunci publik.
Buat brankas kunci dan kunci
Buat brankas kunci dengan Azure RBAC diaktifkan.
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)Tetapkan diri Anda peran Petugas Kripto Key Vault untuk membuat kunci.
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_IDBuat kunci di brankas kunci. Pastikan
encryptdandecryptoperasi utama diaktifkan.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|/[^/]*$||')
Buat identitas terkelola yang ditetapkan pengguna
Buat identitas terkelola yang ditetapkan pengguna untuk kluster.
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)Tetapkan peran yang diperlukan ke identitas terkelola.
# 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
Membuat kluster AKS baru dengan kunci yang dikelola pelanggan
Buat kluster AKS baru dengan enkripsi KMS menggunakan kunci yang dikelola pelanggan.
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
Mengaktifkan kunci yang dikelola pelanggan pada kluster yang ada
Aktifkan enkripsi KMS dengan kunci yang dikelola pelanggan pada kluster AKS yang ada.
Nota
Kluster harus menjalankan Kubernetes versi 1.33 atau yang lebih baru.
az aks update Jika perintah mengembalikan ReconcileAzureKeyVaultKmsError kesalahan, jalankan perintah berikut untuk memeriksa apakah rahasia yang ada dapat dibaca dan ditulis:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Jika perintah ini gagal (misalnya, penolakan webhook atau sumber daya tidak ditemukan), perbaiki masalah dan jalankan kembali perintah pembaruan. Pesan "Objek telah dimodifikasi" tidak memerlukan tindakan — anggap itu sebagai berhasil.
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
Memverifikasi konfigurasi KMS
Setelah mengaktifkan enkripsi KMS, verifikasi konfigurasi.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
Output mencakup konfigurasi 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"
}
}
Migrasi antara opsi manajemen kunci
Anda dapat bermigrasi antara kunci yang dikelola platform dan kunci yang dikelola pelanggan.
Bermigrasi dari kunci yang dikelola platform ke kunci yang dikelola pelanggan
Untuk bermigrasi dari kunci yang dikelola platform ke kunci yang dikelola pelanggan, pertama-tama siapkan brankas kunci, kunci, dan identitas terkelola seperti yang dijelaskan di bagian kunci yang dikelola pelanggan, lalu jalankan perintah pembaruan:
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
Bermigrasi dari kunci yang dikelola pelanggan ke kunci yang dikelola platform
Untuk bermigrasi dari kunci yang dikelola pelanggan ke kunci yang dikelola platform:
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--disable-azure-keyvault-kms
Rotasi kunci
Dengan enkripsi data KMS, rotasi kunci ditangani secara berbeda tergantung pada opsi manajemen kunci Anda:
- Kunci yang dikelola platform: Rotasi kunci bersifat otomatis. Tidak diperlukan tindakan.
- Kunci yang dikelola pelanggan: Setelah Anda merotasi kunci di Azure Key Vault, KMS secara berkala mendeteksi versi kunci baru. Tunggu setidaknya tujuh hari setelah membuat versi kunci baru sebelum menghapus yang lama.
Nota
Tidak seperti pengalaman KMS warisan, dengan implementasi baru ini Anda tidak perlu mengenkripsi ulang rahasia secara manual setelah rotasi kunci. Platform menangani ini secara otomatis.
Jangan hapus atau biarkan versi kunci lama kedaluwarsa tepat setelah Anda membuat yang baru.