Azure Kubernetes Service'te Microsoft Entra pod ile yönetilen kimlikleri kullanma (Önizleme)
Microsoft Entra pod ile yönetilen kimlikler, Azure kaynakları için yönetilen kimlikleri ve Microsoft Entra Kimliği'ndeki kimlikleri podlarla ilişkilendirmek için Kubernetes temel öğelerini kullanır. Yöneticiler, podların kimlik sağlayıcısı olarak Microsoft Entra Id kullanan Azure kaynaklarına erişmesine olanak sağlayan Kubernetes temel bilgileri olarak kimlikler ve bağlamalar oluşturur.
Önemli
Microsoft Entra İş Yükü Kimliği gözden geçirmenizi öneririz. Bu kimlik doğrulama yöntemi, uygulama adına herhangi bir dış kimlik sağlayıcısıyla federasyon sağlamak için Kubernetes yerel özellikleriyle tümleşen pod ile yönetilen kimliğin (önizleme) yerini alır.
Azure Kubernetes Service'teki açık kaynak Microsoft Entra pod yönetilen kimliği (önizleme) 24.10.2022 tarihinde kullanımdan kaldırılmıştır ve proje Eylül 2023'te arşivlenmiştir. Daha fazla bilgi için kullanımdan kaldırma bildirimine bakın. AKS Pod Kimliği Yönetilen eklentisi, müşterilerin Microsoft Entra İş Yükü Kimliği geçişine zaman tanıyacak şekilde Eylül 2025'e kadar yamalanacak ve desteklenecektir
AKS Yönetilen eklentisini devre dışı bırakmak için şu komutu kullanın: az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
.
Başlamadan önce
Azure CLI sürüm 2.20.0 veya üzeri yüklü olmalıdır.
Sınırlamalar
- Küme için en fazla 200 pod ile yönetilen kimlik kullanılabilir.
- Bir küme için en fazla 200 pod tarafından yönetilen kimlik özel durumuna izin verilir.
- Pod ile yönetilen kimlikler yalnızca Linux düğüm havuzlarında kullanılabilir.
- Bu özellik yalnızca Sanal Makine Ölçek Kümeleri desteklenen kümeler için desteklenir.
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
'EnablePodIdentityPreview' özellik bayrağını kaydetme
EnablePodIdentityPreview
Aşağıdaki örnekte gösterildiği gibi az feature register komutunu kullanarak özellik bayrağını kaydedin:
az feature register --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
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 "EnablePodIdentityPreview"
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
İşlem modu seçenekleri
Microsoft Entra pod ile yönetilen kimlik iki işlem modunu destekler:
- Standart Mod: Bu modda, AKS kümesine aşağıdaki iki bileşen dağıtılır:
- Yönetilen Kimlik Denetleyicisi (MIC):MIC, Kubernetes API Sunucusu aracılığıyla podlarda, AzureIdentity'de ve AzureIdentityBinding'de yapılan değişiklikleri izleyen bir Kubernetes denetleyicisidir. İlgili bir değişiklik algıladığında, MIC gerektiğinde AzureAssignedIdentity ekler veya siler. Özel olarak, bir pod zamanlandığında, MIC Azure'da yönetilen kimliği oluşturma aşamasında düğüm havuzu tarafından kullanılan temel Sanal Makine Ölçek Kümesine atar. Kimliği kullanan tüm podlar silindiğinde, aynı yönetilen kimlik diğer podlar tarafından kullanılmadığı sürece kimliği düğüm havuzunun Sanal Makine Ölçek Kümesinden kaldırır. AzureIdentity veya AzureIdentityBinding oluşturulduğunda veya silindiğinde MIC de benzer eylemler gerçekleştirir.
- Düğüm Yönetilen Kimliği (NMI): NMI, AKS kümesindeki her düğümde DaemonSet olarak çalışan bir poddur. NMI, her düğümdeki Azure Örnek Meta Veri Hizmeti'ne yönelik güvenlik belirteci isteklerini durdurur, bunları kendisine yönlendirir ve podun belirteç istediği kimliğe erişimi olup olmadığını doğrular ve uygulama adına Microsoft Entra kiracısından belirteci getirir.
- Yönetilen Mod: Bu mod yalnızca NMI sunar. AKS kümesi eklentisi aracılığıyla yüklendiğinde Azure, kullanıcının CLI komutlarına yanıt olarak Kubernetes temel öğelerinin (AzureIdentity ve AzureIdentityBinding) oluşturulmasını ve kimlik atamasını yönetir. Aksi takdirde Helm grafiği aracılığıyla yüklenirse, kimliğin kullanıcı tarafından el ile atanması ve yönetilmesi gerekir. Daha fazla bilgi için bkz . Yönetilen modda pod kimliği.
Microsoft Entra pod yönetilen kimliğini Yükleme Kılavuzu'nda gösterildiği gibi Helm grafiği veya YAML bildirimi aracılığıyla yüklediğinizde, ve managed
modu arasında standard
seçim yapabilirsiniz. Bunun yerine, bu makalede gösterildiği gibi AKS kümesi eklentisini kullanarak Microsoft Entra pod yönetilen kimliğini yüklemeye karar verirseniz, kurulum modu kullanır managed
.
Azure Container Networking Interface (CNI) ile AKS kümesi oluşturma
Not
Bu varsayılan önerilen yapılandırmadır
Azure CNI ve pod ile yönetilen kimlik etkin bir AKS kümesi oluşturun. Aşağıdaki komutlar myResourceGroup adlı bir kaynak grubu oluşturmak için az group create ve myResourceGroup kaynak grubunda myAKSCluster adlı bir AKS kümesi oluşturmak için az aks create komutunu kullanır.
az group create --name myResourceGroup --location eastus
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--enable-pod-identity \
--network-plugin azure \
--generate-ssh-keys
AKS kümenizde oturum açmak için az aks get-credentials komutunu kullanın. Bu komut ayrıca geliştirme bilgisayarınızdaki istemci sertifikasını kubectl
indirir ve yapılandırr.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Not
AKS kümenizde pod ile yönetilen kimliği etkinleştirdiğinizde, kube-system ad alanına aks-addon-exception adlı bir AzurePodIdentityException eklenir. AzurePodIdentityException, belirli etiketleri olan podların NMI sunucusu tarafından müdahale edilmeden Azure Örnek Meta Veri Hizmeti (IMDS) uç noktasına erişmesine olanak tanır. aks-addon-exception, Microsoft Entra pod ile yönetilen kimlik gibi AKS birinci taraf eklentilerinin AzurePodIdentityException'ı el ile yapılandırmak zorunda kalmadan çalışmasına olanak tanır. İsteğe bağlı olarak, , az aks pod-identity exception delete
az aks pod-identity exception update
, veya kubectl
kullanarak az aks pod-identity exception add
bir AzurePodIdentityException ekleyebilir, kaldırabilir ve güncelleştirebilirsiniz.
Mevcut AKS kümesini Azure CNI ile güncelleştirme
Mevcut aks kümesini Azure CNI ile pod ile yönetilen kimlik içerecek şekilde güncelleştirin.
az aks update --resource-group $MY_RESOURCE_GROUP --name $MY_CLUSTER --enable-pod-identity
Microsoft Entra pod ile yönetilen kimliklerle Kubenet ağ eklentisini kullanma
Önemli
Microsoft Entra pod yönetilen kimliğini Kubenet ile bir kümede çalıştırmak, güvenlik sorunlarından dolayı önerilen bir yapılandırma değildir. Varsayılan Kubenet yapılandırması, bir pod tarafından başka bir pod olarak hareket etmek ve sahip olması amaçlanmamış bir kimliğe erişim elde etmek için kullanılabilecek ARP kimlik sahtekarlıklarını önleyemiyor. Kubenet ile bir kümede Microsoft Entra pod ile yönetilen kimliği etkinleştirmeden önce lütfen risk azaltma adımlarını izleyin ve ilkeleri yapılandırın.
Risk azaltma
Güvenlik açığını küme düzeyinde azaltmak için, CAP_NET_RAW saldırısını sınırlamak için "Kubernetes küme kapsayıcıları yalnızca izin verilen özellikleri kullanmalıdır" Azure yerleşik ilkesini kullanabilirsiniz.
"Gerekli bırakma özellikleri"ne NET_RAW ekleme
Azure İlkesi kullanmıyorsanız, OpenPolicyAgent erişim denetleyicisini Ağ Geçidi Denetleyicisi web kancasını doğrulayarak birlikte kullanabilirsiniz. Kümenizde Gatekeeper zaten yüklüyse K8sPSPCapabilities türündeki ConstraintTemplate değerini ekleyin:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper-library/master/library/pod-security-policy/capabilities/template.yaml
NET_RAW özelliğiyle Podların doğuşunu sınırlamak için bir şablon ekleyin:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPCapabilities
metadata:
name: prevent-net-raw
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces:
- "kube-system"
parameters:
requiredDropCapabilities: ["NET_RAW"]
Kubenet ağ eklentisi ile AKS kümesi oluşturma
Kubenet ağ eklentisi ve pod ile yönetilen kimlik etkinleştirilmiş bir AKS kümesi oluşturun.
az aks create \
--resource-group $MY_RESOURCE_GROUP \
--name $MY_CLUSTER \
--enable-pod-identity \
--enable-pod-identity-with-kubenet \
--generate-ssh-keys
Mevcut AKS kümesini Kubenet ağ eklentisiyle güncelleştirme
Mevcut aks kümesini Kubenet ağ eklentisiyle pod ile yönetilen kimlik içerecek şekilde güncelleştirin.
az aks update --resource-group $MY_RESOURCE_GROUP --name $MY_CLUSTER --enable-pod-identity --enable-pod-identity-with-kubenet
Kimlik oluşturma
Önemli
Kimliği oluşturmak için aboneliğinizde ilgili izinlere (örneğin Sahip) sahip olmanız gerekir.
az identity create ile demo pod tarafından kullanılacak bir kimlik oluşturun ve IDENTITY_CLIENT_ID ve IDENTITY_RESOURCE_ID değişkenlerini ayarlayın.
az group create --name myIdentityResourceGroup --location eastus
export IDENTITY_RESOURCE_GROUP="myIdentityResourceGroup"
export IDENTITY_NAME="application-identity"
az identity create --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
export IDENTITY_CLIENT_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query clientId -o tsv)"
export IDENTITY_RESOURCE_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query id -o tsv)"
Yönetilen kimlik için izin atama
Pod'a atanacak yönetilen kimliğe, gerçekleştireceği eylemlerle uyumlu izinler verilmesi gerekir.
Tanıtımı çalıştırmak için IDENTITY_CLIENT_ID yönetilen kimliğin AKS kümenizin Sanal Makine Ölçek Kümesini içeren kaynak grubunda Sanal Makine Katılımcısı izinlerine sahip olması gerekir.
# Obtain the name of the resource group containing the Virtual Machine Scale set of your AKS cluster, commonly called the node resource group
NODE_GROUP=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
# Obtain the id of the node resource group
NODES_RESOURCE_ID=$(az group show --name $NODE_GROUP -o tsv --query "id")
# Create a role assignment granting your managed identity permissions on the node resource group
az role assignment create --role "Virtual Machine Contributor" --assignee "$IDENTITY_CLIENT_ID" --scope $NODES_RESOURCE_ID
Pod kimliği oluşturma
kullanarak az aks pod-identity add
küme için pod ile yönetilen bir kimlik oluşturun.
export POD_IDENTITY_NAME="my-pod-identity"
export POD_IDENTITY_NAMESPACE="my-app"
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME} --identity-resource-id ${IDENTITY_RESOURCE_ID}
Not
"POD_IDENTITY_NAME" RFC 1123'te tanımlandığı gibi geçerli bir DNS alt etki alanı adı olmalıdır.
Not
kullanarak pod-identity add
pod ile yönetilen kimliği atadığınızda Azure CLI, pod ile yönetilen kimlik (IDENTITY_RESOURCE_ID) üzerinden Yönetilen Kimlik operatörü rolünü küme kimliğine atamayı dener.
Azure, kümenizde Azure'daki kimliği temsil eden bir AzureIdentity kaynağı ve AzureIdentity'yi seçiciye bağlayan bir AzureIdentityBinding kaynağı oluşturur. Bu kaynakları şu kaynaklarla görüntüleyebilirsiniz:
kubectl get azureidentity -n $POD_IDENTITY_NAMESPACE
kubectl get azureidentitybinding -n $POD_IDENTITY_NAMESPACE
Örnek uygulama çalıştırma
Bir pod'un Microsoft Entra pod ile yönetilen kimliği kullanması için pod, AzureIdentityBinding'den bir seçiciyle eşleşen bir değere sahip bir aadpodidbinding etiketine ihtiyaç duyar. Varsayılan olarak, seçici pod ile yönetilen kimliğin adıyla eşleşecektir, ancak çağrılırken az aks pod-identity add
seçeneği kullanılarak --binding-selector
da ayarlanabilir.
Microsoft Entra pod ile yönetilen kimliği kullanarak örnek bir uygulama çalıştırmak için aşağıdaki içeriğe sahip bir demo.yaml
dosya oluşturun. POD_IDENTITY_NAME, IDENTITY_CLIENT_ID ve IDENTITY_RESOURCE_GROUP önceki adımlarda yer alan değerlerle değiştirin. SUBSCRIPTION_ID değerini abonelik kimliğiniz ile değiştirin.
Not
Önceki adımlarda POD_IDENTITY_NAME, IDENTITY_CLIENT_ID ve IDENTITY_RESOURCE_GROUP değişkenlerini oluşturdunuz. gibi bir komut echo
kullanarak değişkenler için ayarladığınız değeri görüntüleyebilirsiniz, örneğin echo $POD_IDENTITY_NAME
.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: $POD_IDENTITY_NAME
spec:
containers:
- name: demo
image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.6.3
args:
- --subscriptionid=$SUBSCRIPTION_ID
- --clientid=$IDENTITY_CLIENT_ID
- --resourcegroup=$IDENTITY_RESOURCE_GROUP
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
nodeSelector:
kubernetes.io/os: linux
Pod tanımında, önceki adımda çalıştırdığınız az aks pod-identity add
pod ile yönetilen kimliğin adıyla eşleşen bir değere sahip bir aadpodidbinding etiketi olduğuna dikkat edin.
kullanarak kubectl apply
pod ile yönetilen kimliğiniz ile aynı ad alanına dağıtındemo.yaml
:
kubectl apply -f demo.yaml --namespace $POD_IDENTITY_NAMESPACE
kullanarak kubectl logs
örnek uygulamanın başarıyla çalıştığını doğrulayın.
kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACE
Günlüklerde bir belirtecin başarıyla alındığını ve GET işleminin başarılı olduğunu doğrulayın.
...
successfully doARMOperations vm count 0
successfully acquired a token using the MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token)
successfully acquired a token, userAssignedID MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) clientID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
successfully made GET on instance metadata
...
Bir uygulamayı birden çok kimlikle çalıştırma
Bir uygulamanın birden çok kimlik kullanmasını sağlamak için pod kimlikleri oluştururken öğesini aynı seçiciye ayarlayın --binding-selector
.
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_1} --identity-resource-id ${IDENTITY_RESOURCE_ID_1} --binding-selector myMultiIdentitySelector
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_2} --identity-resource-id ${IDENTITY_RESOURCE_ID_2} --binding-selector myMultiIdentitySelector
Ardından pod YAML'nizdeki alanı belirttiğiniz bağlama seçici olarak ayarlayın aadpodidbinding
.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: myMultiIdentitySelector
...
Mevcut kümede pod ile yönetilen kimliği devre dışı bırakma
Mevcut bir kümede pod ile yönetilen kimliği devre dışı bırakmak için pod ile yönetilen kimlikleri kümeden kaldırın. Ardından kümedeki özelliği devre dışı bırakın.
az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSCluster
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-pod-identity
Temizleme
Kümenizden Microsoft Entra pod yönetilen kimliğini kaldırmak için örnek uygulamayı ve pod ile yönetilen kimliği kümeden kaldırın. Ardından, küme kimliğinin kimliğini ve rol atamasını kaldırın.
kubectl delete pod demo --namespace $POD_IDENTITY_NAMESPACE
az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSCluster
az identity delete --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
az role assignment delete --role "Managed Identity Operator" --assignee "$IDENTITY_CLIENT_ID" --scope "$IDENTITY_RESOURCE_ID"
Sonraki adımlar
Yönetilen kimlikler hakkında daha fazla bilgi için bkz . Azure kaynakları için yönetilen kimlikler.
Azure Kubernetes Service