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.
Dalam artikel ini, Anda menggunakan Azure CLI untuk menyebarkan kluster Azure Kubernetes Service (AKS) dan mengonfigurasi Kontainer Rahasia (pratinjau) dengan kebijakan keamanan yang dihasilkan secara otomatis. Anda kemudian menyebarkan aplikasi sebagai kontainer Rahasia. Untuk mempelajari lebih lanjut , baca gambaran umum Kontainer Rahasia AKS.
Secara umum, memulai AKS Confidential Containers melibatkan langkah-langkah berikut.
- Menyebarkan atau meningkatkan kluster AKS menggunakan Azure CLI
- Tambahkan anotasi ke manifes YAML pod Anda untuk menandai pod sebagai menggunakan kontainer rahasia
- Menambahkan kebijakan keamanan ke manifes YAML pod Anda
- Menyebarkan aplikasi Anda dalam komputasi rahasia
Prasyarat
Azure CLI versi 2.44.1 atau yang lebih baru. Jalankan
az --version
untuk menemukan versi, dan jalankanaz upgrade
untuk meningkatkan versi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.aks-preview
Ekstensi Azure CLI versi 0.5.169 atau yang lebih baru.confcom
Ekstensi Azure CLI Kontainer Rahasia 0.3.3 atau yang lebih baru.confcom
diperlukan untuk menghasilkan kebijakan keamanan.Daftarkan
Preview
fitur di langganan Azure Anda.AKS mendukung Kontainer Rahasia (pratinjau) pada versi 1.25.0 dan yang lebih tinggi.
Identitas beban kerja dan kredensial identitas federasi. Kredensial identitas beban kerja memungkinkan akses aplikasi Kubernetes ke sumber daya Azure dengan aman dengan ID Microsoft Entra berdasarkan akun layanan yang diannotasi. Jika Anda tidak terbiasa dengan ID Beban Kerja Microsoft Entra, lihat gambaran umum ID Beban Kerja Microsoft Entra dan tinjau cara kerja Identitas Beban Kerja dengan AKS.
Identitas yang Anda gunakan untuk membuat kluster memiliki izin minimum yang sesuai. Untuk informasi selengkapnya tentang akses dan identitas untuk AKS, lihat Opsi akses dan identitas untuk Azure Kubernetes Service (AKS).
Untuk mengelola kluster Kubernetes, gunakan kubectl klien baris perintah Kube. Azure Cloud Shell dilengkapi dengan
kubectl
. Anda dapat menginstal kubectl secara lokal menggunakan perintah az aks install-cli .Kontainer rahasia pada AKS menyediakan kontainer sumber terbuka sidecar untuk pengesahan dan rilis kunci yang aman. Sidecar terintegrasi dengan Key Management Service (KMS), seperti Azure Key Vault, untuk merilis kunci ke grup kontainer setelah validasi selesai. Menyebarkan Azure Key Vault Managed HSM (Modul Keamanan Perangkat Keras) bersifat opsional tetapi disarankan untuk mendukung integritas dan pengesahan tingkat kontainer. Lihat Memprovisikan dan mengaktifkan HSM Terkelola untuk menyebarkan HSM Terkelola.
Menginstal ekstensi Azure CLI pratinjau aks
Penting
Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Untuk menginstal ekstensi aks-preview, jalankan perintah berikut:
az extension add --name aks-preview
Jalankan perintah berikut untuk memperbarui ke versi terbaru ekstensi:
az extension update --name aks-preview
Menginstal ekstensi Confcom Azure CLI
Untuk menginstal ekstensi confcom, jalankan perintah berikut:
az extension add --name confcom
Jalankan perintah berikut untuk memperbarui ke versi terbaru ekstensi:
az extension update --name confcom
Daftarkan bendera fitur KataCcIsolationPreview
Daftarkan KataCcIsolationPreview
bendera fitur dengan menggunakan perintah daftar fitur az, seperti yang ditunjukkan dalam contoh berikut:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Dibutuhkan beberapa menit agar status menampilkan Terdaftar. Verifikasi status pendaftaran dengan menggunakan perintah az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService dengan menggunakan perintah az provider register :
az provider register --namespace "Microsoft.ContainerService"
Menyebarkan kluster baru
Buat kluster AKS menggunakan perintah az aks create dan tentukan parameter berikut:
- --os-sku: AzureLinux. Hanya os-sku Linux Azure yang mendukung fitur ini dalam rilis pratinjau ini.
- --node-vm-size: Ukuran Azure VM apa pun yang mendukung VM anak yang dilindungi AMD SEV-SNP berfungsi. Misalnya, Standard_DC8as_cc_v5 VM.
- --enable-workload-identity: Memungkinkan pembuatan ID Beban Kerja Microsoft Entra yang memungkinkan pod menggunakan identitas Kubernetes.
- --enable-oidc-issuer: Mengaktifkan Penerbit OpenID Connect (OIDC). Ini memungkinkan ID Microsoft Entra atau identitas penyedia cloud lainnya dan platform manajemen akses kemampuan untuk menemukan kunci penandatanganan publik server API.
- --workload-runtime: Tentukan KataCcIsolation untuk mengaktifkan fitur Kontainer Rahasia pada kumpulan simpul.
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolation --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Ketika kluster siap, dapatkan kredensial kluster menggunakan perintah az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Menyebarkan ke kluster yang ada
Untuk menggunakan fitur ini dengan kluster AKS yang ada, persyaratan berikut harus dipenuhi:
- Ikuti langkah-langkah untuk mendaftarkan bendera fitur KataCcIsolationPreview .
- Verifikasi bahwa kluster menjalankan Kubernetes versi 1.25.0 dan yang lebih tinggi.
- Aktifkan identitas beban kerja pada kluster jika belum.
Gunakan perintah berikut untuk mengaktifkan Kontainer Rahasia (pratinjau) dengan membuat kumpulan simpul untuk menghostingnya.
Tambahkan kumpulan simpul ke kluster AKS Anda menggunakan perintah az aks nodepool add . Tentukan parameter berikut:
- --resource-group: Masukkan nama grup sumber daya yang ada untuk membuat kluster AKS.
- --cluster-name: Masukkan nama unik untuk kluster AKS, seperti myAKSCluster.
- --name: Masukkan nama unik untuk kumpulan simpul kluster Anda, seperti nodepool2.
- --workload-runtime: Tentukan KataCcIsolation untuk mengaktifkan fitur pada kumpulan simpul. Seiring dengan
--workload-runtime
parameter , parameter lain ini harus memenuhi persyaratan berikut. Jika tidak, perintah gagal dan melaporkan masalah dengan parameter yang sesuai. - --os-sku: AzureLinux. Hanya os-sku Linux Azure yang mendukung fitur ini dalam rilis pratinjau ini.
- --node-vm-size: Ukuran Azure VM apa pun yang mendukung virtualisasi berlapis VM anak yang dilindungi AMD SEV-SNP berfungsi. Misalnya, Standard_DC8as_cc_v5 VM.
Contoh berikut menambahkan kumpulan simpul pengguna ke myAKSCluster dengan dua node di nodepool2 di myResourceGroup:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolation
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Jalankan perintah az aks update untuk mengaktifkan Kontainer Rahasia (pratinjau) pada kluster.
az aks update --name myAKSCluster --resource-group myResourceGroup
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Ketika kluster siap, dapatkan kredensial kluster menggunakan perintah az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Mengonfigurasi kontainer
Sebelum mengonfigurasi akses ke Azure Key Vault dan rahasia, dan menyebarkan aplikasi sebagai kontainer Rahasia, Anda perlu menyelesaikan konfigurasi identitas beban kerja.
Untuk mengonfigurasi identitas beban kerja, lakukan langkah-langkah berikut yang dijelaskan dalam artikel Menyebarkan dan mengonfigurasi identitas beban kerja:
- Mengambil URL Pengeluar Sertifikat OIDC
- Buat identitas terkelola
- Membuat akun layanan Kubernetes
- Menetapkan kredensial identitas federasi
Penting
Anda perlu mengatur variabel lingkungan dari bagian Ekspor variabel lingkungan di artikel Menyebarkan dan mengonfigurasi identitas beban kerja untuk terus menyelesaikan tutorial ini. Ingatlah untuk mengatur variabel SERVICE_ACCOUNT_NAMESPACE
ke kafka
, dan jalankan perintah kubectl create namespace kafka
sebelum mengonfigurasi identitas beban kerja.
Menyebarkan aplikasi tepercaya dengan kata-cc dan kontainer pengesahan
Langkah-langkah berikut mengonfigurasi enkripsi end-to-end untuk pesan Kafka menggunakan kunci enkripsi yang dikelola oleh Modul Keamanan Perangkat Keras Terkelola Azure (mHSM). Kunci hanya dirilis ketika konsumen Kafka berjalan dalam Kontainer Rahasia dengan kontainer provisi rahasia pengesahan Azure yang disuntikkan ke pod.
Konfigurasi ini didasarkan pada empat komponen berikut:
- Kluster Kafka: Kluster Kafka sederhana yang disebarkan di namespace Kafka pada kluster.
- Produsen Kafka: Produser Kafka yang berjalan sebagai pod Vanilla Kubernetes yang mengirim pesan terenkripsi yang dikonfigurasi pengguna menggunakan kunci publik ke topik Kafka.
- Konsumen Kafka: Pod konsumen Kafka yang berjalan dengan runtime kata-cc, dilengkapi dengan kontainer rilis kunci yang aman untuk mengambil kunci privat untuk mendekripsi pesan Kafka dan merender pesan ke UI web.
Untuk rilis pratinjau ini, kami sarankan untuk tujuan pengujian dan evaluasi untuk membuat atau menggunakan sumber daya tingkat Azure Key Vault Premium yang ada untuk mendukung penyimpanan kunci dalam modul keamanan perangkat keras (HSM). Kami tidak menyarankan penggunaan brankas kunci produksi Anda. Jika Anda tidak memiliki Azure Key Vault, lihat Membuat brankas kunci menggunakan Azure CLI.
Berikan identitas terkelola yang Anda buat sebelumnya, dan akun Anda, akses ke brankas kunci. Tetapkan kedua identitas peran Key Vault Crypto Officer dan Key Vault Crypto User Azure RBAC.
Catatan
Identitas terkelola adalah nilai yang Anda tetapkan ke
USER_ASSIGNED_IDENTITY_NAME
variabel .Untuk menambahkan penetapan peran, Anda harus memiliki
Microsoft.Authorization/roleAssignments/write
izin danMicrosoft.Authorization/roleAssignments/delete
, seperti Administrator Akses Data Key Vault, Administrator Akses Pengguna, atau Pemilik.Anda harus menggunakan Key Vault Premium SKU untuk mendukung kunci yang dilindungi HSM.
Jalankan perintah berikut untuk mengatur cakupan:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Jalankan perintah berikut untuk menetapkan peran Petugas Kripto Key Vault.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Jalankan perintah berikut untuk menetapkan peran Pengguna Kripto Key Vault.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Instal kluster Kafka di namespace kafka dengan menjalankan perintah berikut:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Jalankan perintah berikut untuk menerapkan
kafka
file CR kluster.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
Siapkan kunci Enkripsi/Dekripsi RSA menggunakan skrip bash untuk beban kerja dari GitHub. Simpan file sebagai
setup-key.sh
.Atur
MAA_ENDPOINT
variabel lingkungan dengan FQDN URI Attest dengan menjalankan perintah berikut.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Periksa apakah FQDN URI Attest dalam format yang benar (MAA_ENDPOINT tidak boleh menyertakan awalan "https://"):
echo $MAA_ENDPOINT
Catatan
Untuk menyiapkan Microsoft Azure Attestation, lihat Mulai Cepat: Menyiapkan Azure Attestation dengan Azure CLI.
Salin manifes YAML berikut dan simpan sebagai
consumer.yaml
.apiVersion: v1 kind: Pod metadata: name: kafka-golang-consumer namespace: kafka labels: azure.workload.identity/use: "true" app.kubernetes.io/name: kafka-golang-consumer spec: serviceAccountName: workload-identity-sa runtimeClassName: kata-cc-isolation containers: - image: "mcr.microsoft.com/aci/skr:2.7" imagePullPolicy: Always name: skr env: - name: SkrSideCarArgs value: ewogICAgImNlcnRjYWNoZSI6IHsKCQkiZW5kcG9pbnRfdHlwZSI6ICJMb2NhbFRISU0iLAoJCSJlbmRwb2ludCI6ICIxNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvVEhJTS9hbWQvY2VydGlmaWNhdGlvbiIKCX0gIAp9 command: - /bin/skr volumeMounts: - mountPath: /opt/confidential-containers/share/kata-containers/reference-info-base64 name: endor-loc - image: "mcr.microsoft.com/acc/samples/kafka/consumer:1.0" imagePullPolicy: Always name: kafka-golang-consumer env: - name: SkrClientKID value: kafka-encryption-demo - name: SkrClientMAAEndpoint value: sharedeus2.eus2.test.attest.azure.net - name: SkrClientAKVEndpoint value: "myKeyVault.vault.azure.net" - name: TOPIC value: kafka-demo-topic command: - /consume ports: - containerPort: 3333 name: kafka-consumer resources: limits: memory: 1Gi cpu: 200m volumes: - name: endor-loc hostPath: path: /opt/confidential-containers/share/kata-containers/reference-info-base64 --- apiVersion: v1 kind: Service metadata: name: consumer namespace: kafka spec: type: LoadBalancer selector: app.kubernetes.io/name: kafka-golang-consumer ports: - protocol: TCP port: 80 targetPort: kafka-consumer
Catatan
Perbarui nilai untuk variabel
SkrClientAKVEndpoint
lingkungan pod agar sesuai dengan URL Azure Key Vault Anda, tidak termasuk nilaihttps://
protokol . Nilai tempat penampung nilai saat ini adalahmyKeyVault.vault.azure.net
. Perbarui nilai untuk variabelSkrClientMAAEndpoint
lingkungan pod dengan nilaiMAA_ENDPOINT
. Anda dapat menemukan nilaiMAA_ENDPOINT
dengan menjalankan perintahecho $MAA_ENDPOINT
atau perintahaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
.Hasilkan kebijakan keamanan untuk manifes YAML konsumen Kafka dan dapatkan hash kebijakan keamanan yang disimpan dalam
WORKLOAD_MEASUREMENT
variabel dengan menjalankan perintah berikut:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
Untuk menghasilkan pasangan kunci asimetris RSA (kunci publik dan privat), jalankan
setup-key.sh
skrip menggunakan perintah berikut. Nilainya<Azure Key Vault URL>
harus<your-unique-keyvault-name>.vault.azure.net
export MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID} bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>
Catatan
Variabel
MANAGED_IDENTITY
iritasi diperlukan oleh skripsetup-key.sh
bash .Kunci publik akan disimpan seperti
kafka-encryption-demo-pub.pem
setelah menjalankan skrip bash.
Penting
Jika Anda menerima kesalahan
ForbiddenByRbac
, Anda mungkin perlu menunggu hingga 24 jam karena layanan backend untuk identitas terkelola mempertahankan cache per URI sumber daya hingga 24 jam. Lihat juga: Memecahkan masalah Azure RBAC.Untuk memverifikasi bahwa kunci telah berhasil diunggah ke brankas kunci, jalankan perintah berikut:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Salin manifes YAML berikut dan simpan sebagai
producer.yaml
.apiVersion: v1 kind: Pod metadata: name: kafka-producer namespace: kafka spec: containers: - image: "mcr.microsoft.com/acc/samples/kafka/producer:1.0" name: kafka-producer command: - /produce env: - name: TOPIC value: kafka-demo-topic - name: MSG value: "Azure Confidential Computing" - name: PUBKEY value: |- -----BEGIN PUBLIC KEY----- MIIBojAN***AE= -----END PUBLIC KEY----- resources: limits: memory: 1Gi cpu: 200m
Catatan
Perbarui nilai yang dimulai dengan
-----BEGIN PUBLIC KEY-----
dan diakhiri dengan-----END PUBLIC KEY-----
string dengan kontenkafka-encryption-demo-pub.pem
yang dibuat di langkah sebelumnya.Sebarkan
consumer
manifes YAML danproducer
menggunakan file yang Anda simpan sebelumnya.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Dapatkan alamat IP layanan web menggunakan perintah berikut:
kubectl get svc consumer -n kafka
Salin dan tempel alamat IP eksternal layanan konsumen ke browser Anda dan amati pesan yang didekripsi.
Contoh berikut menyerupai output perintah:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
Anda juga harus mencoba menjalankan konsumen sebagai pod Kubernetes biasa dengan menghapus
skr container
spesifikasi dankata-cc runtime class
. Karena Anda tidak menjalankan konsumen dengan kelas runtime kata-cc, Anda tidak lagi memerlukan kebijakan.Hapus seluruh kebijakan dan amati pesan lagi di browser setelah menyebarkan ulang beban kerja. Pesan muncul sebagai ciphertext yang dikodekan base64 karena kunci enkripsi privat tidak dapat diambil. Kunci tidak dapat diambil karena konsumen tidak lagi berjalan di lingkungan rahasia, dan
skr container
hilang, mencegah dekripsi pesan.
Pembersihan
Setelah selesai mengevaluasi fitur ini, untuk menghindari biaya Azure, bersihkan sumber daya yang tidak perlu. Jika Anda menyebarkan kluster baru sebagai bagian dari evaluasi atau pengujian, Anda dapat menghapus kluster menggunakan perintah az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Jika Anda mengaktifkan Kontainer Rahasia (pratinjau) pada kluster yang ada, Anda dapat menghapus pod menggunakan perintah kubectl delete pod .
kubectl delete pod pod-name
Langkah berikutnya
- Pelajari selengkapnya tentang host Azure Dedicated untuk simpul dengan kluster AKS Anda untuk menggunakan isolasi dan kontrol perangkat keras atas peristiwa pemeliharaan platform Azure.
Azure Kubernetes Service