Gizli Kapsayıcılar ve varsayılan ilke ile AKS kümesi dağıtma
Bu makalede, Azure CLI kullanarak bir Azure Kubernetes Service (AKS) kümesi dağıtacak ve Gizli Kapsayıcılar'ı (önizleme) varsayılan bir güvenlik ilkesiyle yapılandıracaksınız. Ardından bir uygulamayı Gizli kapsayıcı olarak dağıtırsınız. Daha fazla bilgi edinmek için AKS Gizli Kapsayıcılarına genel bakış konusunu okuyun.
Genel olarak, AKS Gizli Kapsayıcıları'nı kullanmaya başlamak için aşağıdaki adımlar yer alır.
- Azure CLI kullanarak AKS kümesini dağıtma veya yükseltme
- Podu gizli kapsayıcı olarak çalıştırılıyor olarak işaretlemek için pod YAML bildiriminize ek açıklama ekleme
- Pod YAML bildiriminize güvenlik ilkesi ekleme
- Güvenlik ilkesini zorlamayı etkinleştirme
- Uygulamanızı gizli bilgi işlemde dağıtma
Önkoşullar
Azure CLI sürüm 2.44.1 veya üzeri. Sürümü bulmak için komutunu
az --version
çalıştırın ve sürümü yükseltmek için komutunu çalıştırınaz upgrade
. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.aks-preview
Azure CLI uzantısı sürüm 0.5.169 veya üzeri.confcom
Gizli Kapsayıcı Azure CLI uzantısı 0.3.3 veya üzeri.confcom
bir güvenlik ilkesi oluşturmak için gereklidir.Preview
Özelliği Azure aboneliğinize kaydedin.AKS, 1.25.0 ve üzeri sürümlerde Gizli Kapsayıcılar'ı (önizleme) destekler.
İş yükü kimliği ve federasyon kimliği kimlik bilgileri. İş yükü kimliği kimlik bilgileri, Kubernetes uygulamalarının ek açıklamalı hizmet hesaplarını temel alan bir Microsoft Entra Kimliği ile Azure kaynaklarına güvenli bir şekilde erişmesini sağlar. Microsoft Entra İş Yükü Kimliği hakkında bilginiz yoksa Microsoft Entra İş Yükü Kimliği genel bakışa bakın ve İş Yükü Kimliği'nin AKS ile nasıl çalıştığını gözden geçirin.
Kümenizi oluşturmak için kullandığınız kimlik uygun en düşük izinlere sahiptir. AKS'ye erişim ve kimlik hakkında daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) için erişim ve kimlik seçenekleri.
Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisi kubectl'yi kullanın. Azure Cloud Shell ile birlikte
kubectl
gelir. az aks install-cli komutunu kullanarak kubectl'yi yerel olarak yükleyebilirsiniz.AKS'deki gizli kapsayıcılar, kanıtlama ve güvenli anahtar sürümü için sepet açık kaynak kapsayıcı sağlar. Sepet, doğrulama tamamlandıktan sonra kapsayıcı grubuna bir anahtar yayınlamak için Azure Key Vault gibi bir Anahtar Yönetim Merkezi (KMS) ile tümleşir. Azure Key Vault Yönetilen HSM'sini (Donanım Güvenlik Modülü) dağıtmak isteğe bağlıdır, ancak kapsayıcı düzeyinde bütünlüğü ve kanıtlamayı desteklemek için önerilir. Bkz . Yönetilen HSM'yi dağıtmak için Yönetilen HSM sağlama ve etkinleştirme.
aks-preview Azure CLI uzantısını yükleme
Önemli
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
aks-preview uzantısını yüklemek için aşağıdaki komutu çalıştırın:
az extension add --name aks-preview
Yayımlanan uzantının en son sürümüne güncelleştirmek için aşağıdaki komutu çalıştırın:
az extension update --name aks-preview
Confcom Azure CLI uzantısını yükleme
Confcom uzantısını yüklemek için aşağıdaki komutu çalıştırın:
az extension add --name confcom
Yayımlanan uzantının en son sürümüne güncelleştirmek için aşağıdaki komutu çalıştırın:
az extension update --name confcom
KataCcIsolationPreview özellik bayrağını kaydetme
KataCcIsolationPreview
Aşağıdaki örnekte gösterildiği gibi az feature register komutunu kullanarak özellik bayrağını kaydedin:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer. az feature show komutunu kullanarak kayıt durumunu doğrulayın:
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Durum Kayıtlı olarak gösterildiğinde az provider register komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin:
az provider register --namespace "Microsoft.ContainerService"
Yeni küme dağıtma
az aks create komutunu kullanarak ve aşağıdaki parametreleri belirterek bir AKS kümesi oluşturun:
- --os-sku: AzureLinux. Bu önizleme sürümünde bu özelliği yalnızca Azure Linux os-sku destekler.
- --node-vm-size: 2. nesil vm olan ve iç içe sanallaştırmayı destekleyen tüm Azure VM boyutları çalışır. Örneğin, VM'leri Standard_DC8as_cc_v5 .
- --enable-workload-identity: Podların Kubernetes kimliği kullanmasını sağlayan bir Microsoft Entra İş Yükü Kimliği oluşturulmasını etkinleştirir.
- --enable-oidc-issuer: OpenID Connect (OIDC) Vereni etkinleştirir. Microsoft Entra Id veya diğer bulut sağlayıcısı kimliğine ve erişim yönetimi platformuna API sunucusunun genel imzalama anahtarlarını bulma olanağı sağlar.
Aşağıdaki örnek myAKSCluster adlı kümeyi güncelleştirir ve myResourceGroup içinde tek bir sistem düğümü havuzu oluşturur:
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür. Önceki adımda oluşturulan kümenin tek düğüm havuzu vardır. Sonraki adımda kümeye ikinci bir düğüm havuzu ekleyeceğiz.
Küme hazır olduğunda az aks get-credentials komutunu kullanarak küme kimlik bilgilerini alın.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
az aks nodepool add komutunu kullanarak myResourceGroup'ta nodepool2 içinde iki düğüm içeren myAKSCluster'a bir kullanıcı düğümü havuzu ekleyin. Aşağıdaki parametreleri belirtin:
- --workload-runtime: Düğüm havuzunda Gizli Kapsayıcılar özelliğini etkinleştirmek için KataCcIsolation belirtin. Bu parametre ile, bu diğer parametreler aşağıdaki gereksinimleri karşılamalıdır. Aksi takdirde, komut başarısız olur ve ilgili parametrelerle ilgili bir sorun bildirir.
- --os-sku: AzureLinux. Bu önizleme sürümünde bu özelliği yalnızca Azure Linux os-sku destekler.
- --node-vm-size: 2. nesil vm olan ve iç içe sanallaştırmayı destekleyen tüm Azure VM boyutları çalışır. Örneğin, VM'leri Standard_DC8as_cc_v5 .
az aks nodepool add --resource-group myResourceGroup --name nodepool2 --cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Mevcut kümeye dağıtma
Bu özelliği mevcut bir AKS kümesiyle kullanmak için aşağıdaki gereksinimlerin karşılanması gerekir:
- KataCcIsolationPreview özellik bayrağını kaydetmek için adımları izleyin.
- Kümenin Kubernetes sürüm 1.25.0 ve üzerini çalıştırdığını doğrulayın.
- Henüz yapmadıysanız kümede iş yükü kimliğini etkinleştirin.
Barındırmak için bir düğüm havuzu oluşturarak Gizli Kapsayıcılar'ı (önizleme) etkinleştirmek için aşağıdaki komutu kullanın.
az aks nodepool add komutunu kullanarak AKS kümenize düğüm havuzu ekleyin . Aşağıdaki parametreleri belirtin:
- --resource-group: AKS kümesinin oluşturulacağı mevcut kaynak grubunun adını girin.
- --cluster-name: AKS kümesi için myAKSCluster gibi benzersiz bir ad girin.
- --name: Küme düğüm havuzunuz için nodepool2 gibi benzersiz bir ad girin.
- --workload-runtime: Özelliği düğüm havuzunda etkinleştirmek için KataCcIsolation belirtin. Parametresiyle
--workload-runtime
birlikte, bu diğer parametreler aşağıdaki gereksinimleri karşılamalıdır. Aksi takdirde, komut başarısız olur ve ilgili parametrelerle ilgili bir sorun bildirir. - --os-sku: AzureLinux. Bu önizleme sürümünde bu özelliği yalnızca Azure Linux os-sku destekler.
- --node-vm-size: 2. nesil vm olan ve iç içe sanallaştırmayı destekleyen tüm Azure VM boyutları çalışır. Örneğin, VM'leri Standard_DC8as_cc_v5 .
Aşağıdaki örnek, myResourceGroup'ta nodepool2'de iki düğüm içeren myAKSCluster'a bir kullanıcı düğümü havuzu ekler:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Kümede Gizli Kapsayıcılar'ı (önizleme) etkinleştirmek için az aks update komutunu çalıştırın.
az aks update --name myAKSCluster --resource-group myResourceGroup
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Küme hazır olduğunda az aks get-credentials komutunu kullanarak küme kimlik bilgilerini alın.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Kapsayıcıyı yapılandırma
Azure Key Vault'a ve gizli diziye erişimi yapılandırmadan ve bir uygulamayı Gizli kapsayıcı olarak dağıtmadan önce iş yükü kimliğinin yapılandırmasını tamamlamanız gerekir.
İş yükü kimliğini yapılandırmak için, İş yükü kimliğini dağıtma ve yapılandırma makalesinde açıklanan aşağıdaki adımları uygulayın:
- OIDC Veren URL'sini alma
- Yönetilen kimlik oluşturma
- Kubernetes hizmet hesabı oluşturma
- Federasyon kimliği kimlik bilgilerini oluşturma
Önemli
Bu öğreticiyi tamamlamaya devam etmek için iş yükü kimliğini dağıtma ve yapılandırma makalesindeki Ortam değişkenlerini dışarı aktarma bölümünden ortam değişkenlerini ayarlamanız gerekir. değişkeni SERVICE_ACCOUNT_NAMESPACE
kafka
olarak ayarlamayı ve iş yükü kimliğini yapılandırmadan önce komutunu kubectl create namespace kafka
yürütmeyi unutmayın.
Kata-cc ve kanıtlama kapsayıcısı ile güvenilir uygulama dağıtma
Aşağıdaki adımlar, Azure Yönetilen Donanım Güvenlik Modülleri (mHSM) tarafından yönetilen şifreleme anahtarlarını kullanarak Kafka iletileri için uçtan uca şifrelemeyi yapılandıracaktır . Anahtar yalnızca Kafka tüketicisi pod'a eklenmiş bir Azure kanıtlama gizli dizisi sağlama kapsayıcısı ile Gizli Kapsayıcı içinde çalıştığında serbest bırakılır.
Bu yapılandırma aşağıdaki dört bileşeni temel alır:
- Kafka Kümesi: Kümedeki Kafka ad alanında dağıtılan basit bir Kafka kümesi.
- Kafka Üreticisi: Bir Kafka konusuna ortak anahtar kullanarak şifrelenmiş kullanıcı tarafından yapılandırılmış iletiler gönderen, vanilya Kubernetes podu olarak çalışan bir Kafka üreticisi.
- Kafka Tüketicisi: Kafka iletilerinin şifresini çözmek ve iletileri web kullanıcı arabirimine işlemek için özel anahtarı almak için güvenli bir anahtar yayın kapsayıcısıyla donatılmış, kata-cc çalışma zamanıyla çalışan bir Kafka tüketici podu.
Bu önizleme sürümünde, anahtarların bir donanım güvenlik modülünde (HSM) depolanmasını desteklemek üzere mevcut bir Azure Key Vault Premium katmanı kaynağı oluşturmanızı veya kullanmanızı test ve değerlendirme amacıyla öneririz. Üretim anahtarı kasanızı kullanmanızı önermiyoruz. Azure Key Vault'nuz yoksa bkz . Azure CLI kullanarak anahtar kasası oluşturma.
Daha önce oluşturduğunuz yönetilen kimliğe ve hesabınıza anahtar kasasına erişim verin. Hem Key Vault Şifreleme Yetkilisi hem de Key Vault Şifreleme Kullanıcısı Azure RBAC rollerini atayın.
Not
Yönetilen kimlik, değişkene
USER_ASSIGNED_IDENTITY_NAME
atadığınız değerdir.Rol atamaları eklemek için Key Vault Veri Erişim Yöneticisi, Kullanıcı Erişim Yöneticisi veya Sahip gibi ve
Microsoft.Authorization/roleAssignments/delete
izinleriniz olmalıdır.Microsoft.Authorization/roleAssignments/write
HSM korumalı anahtarları desteklemek için Key Vault Premium SKU'yu kullanmanız gerekir.
Kapsamı ayarlamak için aşağıdaki komutu çalıştırın:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
Key Vault Şifreleme Yetkilisi rolünü atamak için aşağıdaki komutu çalıştırın.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Key Vault Şifreleme Kullanıcısı rolünü atamak için aşağıdaki komutu çalıştırın.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
Aşağıdaki komutu çalıştırarak Kafka kümesini kafka ad alanına yükleyin:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
Küme CR dosyasını uygulamak
kafka
için aşağıdaki komutu çalıştırın.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
GitHub'dan iş yükü için bash betiğini kullanarak RSA Şifreleme/Şifre Çözme anahtarını hazırlayın. Dosyayı
setup-key.sh
olarak kaydedin.MAA_ENDPOINT
Aşağıdaki komutu çalıştırarak Ortam değişkenini Test URI'sinin FQDN'siyle ayarlayın.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
Test URI'sinin FQDN'sinin doğru biçimde olup olmadığını denetleyin (MAA_ENDPOINT "https://" ön ekini içermemelidir):
echo $MAA_ENDPOINT
Not
Microsoft Azure Doğrulama ayarlamak için bkz. Hızlı Başlangıç: Azure CLI ile Azure Doğrulama ayarlama.
Aşağıdaki YAML bildirimini kopyalayın ve olarak
consumer.yaml
kaydedin.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
Not
Pod ortam değişkeninin
SkrClientAKVEndpoint
değerini, protokol değerihttps://
hariç olmak üzere Azure Key Vault'unuzun URL'si ile eşleşecek şekilde güncelleştirin. Geçerli değer yer tutucusu değeridirmyKeyVault.vault.azure.net
. Pod ortam değişkenininSkrClientMAAEndpoint
değerini değeriyle güncelleştirinMAA_ENDPOINT
. komutunu veyaaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-
komutunuecho $MAA_ENDPOINT
çalıştırarak değeriniMAA_ENDPOINT
bulabilirsiniz.Kafka tüketici YAML bildirimi için güvenlik ilkesini oluşturun ve aşağıdaki komutu çalıştırarak değişkende
WORKLOAD_MEASUREMENT
depolanan güvenlik ilkesinin karması alın:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
RSA asimetrik anahtar çifti (ortak ve özel anahtarlar) oluşturmak için aşağıdaki komutu kullanarak betiği çalıştırın
setup-key.sh
. Değer<Azure Key Vault URL>
şu şekilde olmalıdır:<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>
Not
envionment değişkeni
MANAGED_IDENTITY
bash betiğisetup-key.sh
tarafından gereklidir.Bash betiği yürütülürken ortak anahtar olarak
kafka-encryption-demo-pub.pem
kaydedilir.
Önemli
hatasını
ForbiddenByRbac
alırsanız, yönetilen kimlikler için arka uç hizmetleri 24 saate kadar kaynak URI'sine göre önbellek bulundururken 24 saate kadar beklemeniz gerekebilir. Ayrıca bkz. Azure RBAC sorunlarını giderme.Anahtarların anahtar kasasına başarıyla yüklendiğini doğrulamak için aşağıdaki komutları çalıştırın:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o table
Aşağıdaki YAML bildirimini kopyalayın ve olarak
producer.yaml
kaydedin.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
Not
ile başlayan
-----BEGIN PUBLIC KEY-----
ve dizelerle-----END PUBLIC KEY-----
biten değeri, önceki adımda oluşturulan içeriklekafka-encryption-demo-pub.pem
güncelleştirin.consumer
veproducer
YAML bildirimlerini daha önce kaydettiğiniz dosyaları kullanarak dağıtın.kubectl apply -f consumer.yaml
kubectl apply -f producer.yaml
Aşağıdaki komutu kullanarak web hizmetinin IP adresini alın:
kubectl get svc consumer -n kafka
Tüketici hizmetinin dış IP adresini kopyalayıp tarayıcınıza yapıştırın ve şifresi çözülen iletiyi gözlemleyin.
Aşağıdaki örnek komutun çıkışına benzer:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential Computing
Ayrıca ve
kata-cc runtime class
belirtimini kaldırarak tüketiciyi normal bir Kubernetes podu olarak çalıştırmayıskr container
denemeniz gerekir. Tüketiciyi kata-cc çalışma zamanı sınıfıyla çalıştırmadığınız için artık ilkeye ihtiyacınız yoktur.İlkenin tamamını kaldırın ve iş yükünü yeniden dağıtdıktan sonra iletileri tarayıcıda yeniden gözlemleyin. özel şifreleme anahtarı alınamadığından iletiler base64 ile kodlanmış şifreleme metni olarak görünür. Tüketici artık gizli bir ortamda çalışmadığından ve eksik olduğundan anahtar alınamıyor ve
skr container
iletilerin şifresinin çözülmesini engelliyor.
Temizleme
Bu özelliği değerlendirmeyi bitirdiğinizde Azure ücretlerinden kaçınmak için gereksiz kaynaklarınızı temizleyin. Değerlendirme veya test kapsamında yeni bir küme dağıttıysanız az aks delete komutunu kullanarak kümeyi silebilirsiniz .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Mevcut bir kümede Gizli Kapsayıcılar'ı (önizleme) etkinleştirdiyseniz kubectl delete pod komutunu kullanarak podları kaldırabilirsiniz.
kubectl delete pod pod-name
Sonraki adımlar
- Donanım yalıtımını kullanmak ve Azure platformu bakım olayları üzerinde denetim sağlamak üzere AKS kümenize sahip düğümler için Azure Ayrılmış konakları hakkında daha fazla bilgi edinin.
Azure Kubernetes Service