Azure Arc özellikli Kubernetes kümelerinde Azure RBAC kullanma
Kubernetes ClusterRoleBinding ve RoleBinding nesne türleri, Kubernetes'te yerel olarak yetkilendirme tanımlamaya yardımcı olur. Bu özelliği kullanarak Azure'daki Microsoft Entra Id ve rol atamalarını kullanarak kümedeki yetkilendirme denetimlerini denetleyebilirsiniz. Azure rol atamaları, hangi kullanıcıların dağıtım, pod ve hizmet gibi Kubernetes nesnelerini okuyabileceğini, yazabileceğini ve silebileceğini ayrıntılı olarak denetlemenize olanak sağlar.
Bu özelliğe kavramsal genel bakış için bkz . Azure Arc özellikli Kubernetes üzerinde Azure RBAC.
Önkoşullar
Azure CLI'yi yükleyin veya en son sürüme yükseltin.
Azure CLI uzantısının
connectedk8s
en son sürümünü yükleyin:az extension add --name connectedk8s
connectedk8s
Uzantı zaten yüklüyse, aşağıdaki komutu kullanarak uzantıyı en son sürüme güncelleştirebilirsiniz:az extension update --name connectedk8s
Mevcut Azure Arc özellikli Kubernetes kümesini bağlama:
- Henüz bir kümeyi bağlamadıysanız hızlı başlangıcımızı kullanın.
- Aracılarınızı en son sürüme yükseltin.
Not
Azure RBAC, API sunucusuna kullanıcı erişiminin kısıtlandığı Red Hat OpenShift veya yönetilen Kubernetes tekliflerinde kullanılamaz (örneğin: Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE)).
Azure RBAC şu anda ARM64 mimarisinde çalışan Kubernetes kümelerini desteklememektedir. ARM64 tabanlı Kubernetes kümelerinin erişim denetimini yönetmek için lütfen Kubernetes RBAC kullanın.
Azure Kubernetes Service (AKS) kümeleri için bu özellik yerel olarak kullanılabilir ve AKS kümesinin Azure Arc'a bağlanması gerekmez.
Azure Stack HCI 23H2 üzerinde Azure Arc tarafından etkinleştirilen Azure Kubernetes Service (AKS) kümeleri için Azure RBAC'nin etkinleştirilmesi şu anda yalnızca Kubernetes kümesi oluşturma sırasında desteklenmektedir. Azure RBAC etkinken Azure Arc tarafından etkinleştirilen bir AKS kümesi oluşturmak için Kubernetes için Azure RBAC yetkilendirme kılavuzunu kullanın. Azure RBAC'nin Azure Stack HCI, sürüm 22H2 için desteklenmediğini unutmayın.
Kümede Azure RBAC’yi etkinleştirme
Aşağıdaki komutu çalıştırarak küme MSI kimliğini alın:
az connectedk8s show -g <resource-group> -n <connected-cluster-name>
Çıktıdan kimliği (
identity.principalId
) alın ve aşağıdaki komutu çalıştırarak Küme MSI'sine Bağlı Küme Yönetilen Kimliği CheckAccess Okuyucusu rolünü atayın:az role assignment create --role "Connected Cluster Managed Identity CheckAccess Reader" --assignee "<Cluster MSI ID>" --scope <cluster ARM ID>
Aşağıdaki komutu çalıştırarak Azure Arc özellikli Kubernetes kümenizde Azure rol tabanlı erişim denetimini (RBAC) etkinleştirin:
az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac
Not
Yukarıdaki komutu çalıştırmadan önce, makinedeki dosyanın Azure RBAC özelliğini etkinleştirebileceğiniz kümeyi işaret ettiğinden emin olun
kubeconfig
.Azure RBAC yerine Kubernetes yerel
ClusterRoleBinding
veRoleBinding
nesneleri kullanarak yetkilendirme denetimlerinden geçen kullanıcı adları, e-postalar ve OpenID bağlantılarının virgülle ayrılmış listesi için yukarıdaki komutla kullanın--skip-azure-rbac-list
.
Belirtim üzerinde apiserver
hiçbir reconcinin çalışmadığı genel küme
Kümenin her ana düğümüne SSH ekleyin ve aşağıdaki adımları uygulayın:
Statik podunuz
kube-apiserver
varsa:azure-arc-guard-manifests
Ad alanında gizlikube-system
dizi iki dosya içerir:guard-authn-webhook.yaml
veguard-authz-webhook.yaml
. Bu dosyaları düğümün/etc/guard
dizinine kopyalayın.sudo mkdir -p /etc/guard kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authn-webhook.yaml"' | base64 -d > /etc/guard/guard-authn-webhook.yaml kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authz-webhook.yaml"' | base64 -d > /etc/guard/guard-authz-webhook.yaml
apiserver
Bildirimi düzenleme modunda açın:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
altına
volumes
aşağıdaki belirtimi ekleyin:- hostPath path: /etc/guard type: Directory name: azure-rbac
altına
volumeMounts
aşağıdaki belirtimi ekleyin:- mountPath: /etc/guard name: azure-rbac readOnly: true
Statik
kube-apiserver
podunuz değilse:apiserver
Bildirimi düzenleme modunda açın:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
altına
volumes
aşağıdaki belirtimi ekleyin:- name: azure-rbac secret: secretName: azure-arc-guard-manifests
altına
volumeMounts
aşağıdaki belirtimi ekleyin:- mountPath: /etc/guard name: azure-rbac readOnly: true
Aşağıdaki
apiserver
bağımsız değişkenleri ekleyin:- --authentication-token-webhook-config-file=/etc/guard/guard-authn-webhook.yaml - --authentication-token-webhook-cache-ttl=5m0s - --authorization-webhook-cache-authorized-ttl=5m0s - --authorization-webhook-config-file=/etc/guard/guard-authz-webhook.yaml - --authorization-webhook-version=v1 - --authorization-mode=Node,RBAC,Webhook
Kubernetes kümesi sürüm 1.19.0 veya üzeriyse, aşağıdaki
apiserver
bağımsız değişkeni de ayarlamanız gerekir:- --authentication-token-webhook-version=v1
Podu güncelleştirmek için düzenleyiciyi
apiserver
kaydedin ve kapatın.
Küme API'si kullanılarak oluşturulan küme
kimlik doğrulaması ve yetkilendirme web kancası yapılandırma dosyalarını içeren koruma gizli dizisini iş yükü kümesinden makinenize kopyalayın:
kubectl get secret azure-arc-guard-manifests -n kube-system -o yaml > azure-arc-guard-manifests.yaml
namespace
azure-arc-guard-manifests.yaml dosyasındaki alanı, iş yükü kümelerinin oluşturulması için özel kaynakları uyguladığınız yönetim kümesindeki ad alanıyla değiştirin.Bu bildirimi uygula:
kubectl apply -f azure-arc-guard-manifests.yaml
KubeadmControlPlane
komutunu çalıştırarakkubectl edit kcp <clustername>-control-plane
nesnesini düzenleyin:altına
files
aşağıdaki kod parçacığını ekleyin:- contentFrom: secret: key: guard-authn-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authn-webhook.yaml permissions: "0644" - contentFrom: secret: key: guard-authz-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authz-webhook.yaml permissions: "0644"
altına
apiServer
>extraVolumes
aşağıdaki kod parçacığını ekleyin:- hostPath: /etc/kubernetes/guard-authn-webhook.yaml mountPath: /etc/guard/guard-authn-webhook.yaml name: guard-authn readOnly: true - hostPath: /etc/kubernetes/guard-authz-webhook.yaml mountPath: /etc/guard/guard-authz-webhook.yaml name: guard-authz readOnly: true
altına
apiServer
>extraArgs
aşağıdaki kod parçacığını ekleyin:authentication-token-webhook-cache-ttl: 5m0s authentication-token-webhook-config-file: /etc/guard/guard-authn-webhook.yaml authentication-token-webhook-version: v1 authorization-mode: Node,RBAC,Webhook authorization-webhook-cache-authorized-ttl: 5m0s authorization-webhook-config-file: /etc/guard/guard-authz-webhook.yaml authorization-webhook-version: v1
Nesneyi güncelleştirmek
KubeadmControlPlane
için kaydedin ve kapatın. Bu değişikliklerin iş yükü kümesinde görünmesini bekleyin.
Kullanıcıların kümeye erişmesi için rol atamalarını oluşturma
Azure Arc özellikli Kubernetes kaynağının sahipleri, diğer kullanıcılara Kubernetes kümesine erişim vermek için yerleşik rolleri veya özel rolleri kullanabilir.
Yerleşik roller
Rol | Açıklama |
---|---|
Azure Arc Kubernetes Viewer | Ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Gizli diziler üzerindeki izin ad alanında kimlik bilgilerine erişimi etkinleştireceğinden bu read rol gizli dizileri görüntülemeye ServiceAccount izin vermez. Bu kimlik bilgileri de bu değer (ayrıcalık yükseltme biçimi) aracılığıyla ServiceAccount API erişimine izin verir. |
Azure Arc Kubernetes Yazıcı | Ad alanı içindeki çoğu nesneye okuma/yazma erişimine izin verir. Bu rol, rollerin veya rol bağlamalarının görüntülenmesine veya değiştirilmesine izin vermez. Ancak, bu rol gizli dizilere erişmeye ve podları ad alanında herhangi bir ServiceAccount değer olarak çalıştırmaya olanak tanır, bu nedenle ad alanında herhangi bir ServiceAccount değerin API erişim düzeylerini kazanmak için kullanılabilir. |
Azure Arc Kubernetes Yöneticisi | Yönetici erişimine izin verir. aracılığıyla RoleBinding bir ad alanı içinde verilmesi amaçlanmıştır. içinde RoleBinding kullanıyorsanız, ad alanında rol ve rol bağlamaları oluşturma özelliği de dahil olmak üzere ad alanı içindeki kaynakların çoğuna okuma/yazma erişimi sağlar. Bu rol, kaynak kotasına veya ad alanının kendisine yazma erişimine izin vermez. |
Azure Arc Kubernetes Küme Yöneticisi | Süper kullanıcı erişiminin herhangi bir kaynakta herhangi bir eylemi yürütmesine izin verir. içinde ClusterRoleBinding kullandığınızda, kümedeki ve tüm ad alanlarındaki her kaynak üzerinde tam denetim sağlar. içinde RoleBinding kullandığınızda, rol bağlamasının ad alanında ad alanı da dahil olmak üzere tüm kaynaklar üzerinde tam denetim sağlar. |
Azure portalda , küme kaynağının Erişim Denetimi (IAM) bölmesinde Azure Arc özellikli Kubernetes kümesi kapsamında rol atamaları oluşturabilirsiniz. Aşağıdaki Azure CLI komutlarını da kullanabilirsiniz:
az role assignment create --role "Azure Arc Kubernetes Cluster Admin" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID
Bu komutlarda, AZURE-AD-ENTITY-ID
bir kullanıcı adı (örneğin, testuser@mytenant.onmicrosoft.com
) ve hatta appId
hizmet sorumlusunun değeri olabilir.
Aşağıda, küme içindeki belirli bir ad alanı kapsamında bir rol ataması oluşturma örneği verilmişti:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Not
Azure portalını veya Azure CLI'yi kullanarak küme kapsamında rol atamaları oluşturabilirsiniz. Ancak, ad alanları kapsamında rol atamaları oluşturmak için yalnızca Azure CLI kullanılabilir.
Özel roller
Rol atamalarında kullanmak üzere kendi rol tanımınızı oluşturmayı seçebilirsiniz.
Kullanıcının yalnızca dağıtımları okumasına izin veren rol tanımının aşağıdaki örneğini inceleyin. Daha fazla bilgi için rol tanımı oluşturmak için kullanabileceğiniz veri eylemlerinin tam listesine bakın.
Aşağıdaki JSON nesnesini custom-role.json adlı bir dosyaya kopyalayın. Yer tutucuyu <subscription-id>
gerçek abonelik kimliğiyle değiştirin. Özel rol, veri eylemlerinden birini kullanır ve rol atamasının oluşturulduğu kapsamdaki (küme veya ad alanı) tüm dağıtımları görüntülemenizi sağlar.
{
"Name": "Arc Deployment Viewer",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<subscription-id>"
]
}
custom-role.json kaydettiğiniz klasörden aşağıdaki komutu çalıştırarak rol tanımını oluşturun:
az role definition create --role-definition @custom-role.json
Bu özel rol tanımını kullanarak rol ataması oluşturun:
az role assignment create --role "Arc Deployment Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Kubectl'i kullanıcı kimlik bilgileriyle yapılandırma
Kümeye erişmek için ihtiyacınız olan kubeconfig dosyasını almanın iki yolu vardır:
- Azure Arc özellikli Kubernetes kümesinin küme Bağlantısı özelliğini (
az connectedk8s proxy
) kullanırsınız. - Küme yöneticisi kubeconfig dosyasını diğer tüm kullanıcılarla paylaşır.
Küme bağlantısını kullanma
Ara sunucu işlemini başlatmak için aşağıdaki komutu çalıştırın:
az connectedk8s proxy -n <clusterName> -g <resourceGroupName>
Ara sunucu işlemi çalıştırıldıktan sonra, isteklerinizi kümeye göndermeye başlamak için konsolunuzda başka bir sekme açabilirsiniz.
Paylaşılan kubeconfig dosyası kullanma
Paylaşılan bir kubeconfig kullanmak için Kubernetes sürümünüze bağlı olarak biraz farklı adımlar gerekir.
Kullanıcının kimlik bilgilerini ayarlamak için aşağıdaki komutu çalıştırın. olarak ve
clientApplicationId
olarak6256c85f-0aad-4d50-b960-e6e9b21efe35
3f4439ff-e698-4d6d-84fe-09c9d574f06b
belirtinserverApplicationId
:kubectl config set-credentials <testuser>@<mytenant.onmicrosoft.com> \ --auth-provider=azure \ --auth-provider-arg=environment=AzurePublicCloud \ --auth-provider-arg=client-id=<clientApplicationId> \ --auth-provider-arg=tenant-id=<tenantId> \ --auth-provider-arg=apiserver-id=<serverApplicationId>
Daha önce oluşturduğunuz kubeconfig dosyasını açın. altında
contexts
, kümeyle ilişkili bağlamın önceki adımda oluşturduğunuz kullanıcı kimlik bilgilerini işaret ettiğini doğrulayın. Geçerli bağlamı bu kullanıcı kimlik bilgilerine ayarlamak için aşağıdaki komutu çalıştırın:kubectl config set-context --current=true --user=<testuser>@<mytenant.onmicrosoft.com>
altında yapılandırma modu ayarını
user
>config
ekleyin:name: testuser@mytenant.onmicrosoft.com user: auth-provider: config: apiserver-id: $SERVER_APP_ID client-id: $CLIENT_APP_ID environment: AzurePublicCloud tenant-id: $TENANT_ID config-mode: "1" name: azure
Not
Exec eklentisi , adresine gönderilecek kullanıcı kimlik bilgilerini almak için bir dış komut yürütmeye olanak tanıyan
kubectl
bir Kubernetes kimlik doğrulama stratejisidirapiserver
. Kubernetes sürüm 1.26'dan başlayarak, varsayılan Azure yetkilendirme eklentisi artık vekubectl
'yeclient-go
dahil değildir. Sonraki sürümlerde, kullanıcı kimlik bilgilerini almak için exec eklentisini kullanmak için Azure kimlik doğrulamasını uygulayan birclient-go
kimlik bilgisi (exec) eklentisi olan Azure Kubelogin'i kullanmanız gerekir.Azure Kubelogin'i yükleme:
Windows veya Mac için Azure Kubelogin yükleme yönergelerini izleyin.
Linux veya Ubuntu için kubelogin'in en son sürümünü indirin ve aşağıdaki komutları çalıştırın:
curl -LO https://github.com/Azure/kubelogin/releases/download/"$KUBELOGIN_VERSION"/kubelogin-linux-amd64.zip unzip kubelogin-linux-amd64.zip sudo mv bin/linux_amd64/kubelogin /usr/local/bin/ sudo chmod +x /usr/local/bin/kubelogin
Kubelogin, sahip olma kanıtı (PoP) belirteci isteyerek Azure Arc özellikli kümelerde kimlik doğrulaması yapmak için kullanılabilir. Uygun oturum açma modunu kullanmak için kubelogin kullanarak kubeconfig'i dönüştürün. Örneğin, bir Microsoft Entra kullanıcısı ile cihaz koduyla oturum açma için komutlar aşağıdaki gibi olacaktır:
export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig --pop-enabled --pop-claims 'u=<ARM ID of cluster>"
Kümeye istek gönderme
Herhangi bir
kubectl
komutu çalıştırın. Örneğin:kubectl get nodes
kubectl get pods
Tarayıcı tabanlı kimlik doğrulaması istendikten sonra cihaz oturum açma URL'sini (
https://microsoft.com/devicelogin
) kopyalayın ve web tarayıcınızda açın.Konsolunuza yazdırılan kodu girin. Kodu kopyalayıp terminalinizde cihaz kimlik doğrulaması girişi istemine yapıştırın.
Kullanıcı adını (
testuser@mytenant.onmicrosoft.com
) ve ilişkili parolayı girin.Bunun gibi bir hata iletisi görürseniz, istenen kaynağa erişme yetkiniz yok demektir:
Error from server (Forbidden): nodes is forbidden: User "testuser@mytenant.onmicrosoft.com" cannot list resource "nodes" in API group "" at the cluster scope: User doesn't have access to the resource in Azure. Update role assignment to allow access.
Bir yöneticinin, bu kullanıcıya kaynak üzerinde erişim izni veren yeni bir rol ataması oluşturması gerekir.
Koşullu Erişimi Microsoft Entra Id ile kullanma
Microsoft Entra ID'yi Azure Arc özellikli Kubernetes kümenizle tümleştirdiğinizde, kümenize erişimi denetlemek için Koşullu Erişim'i de kullanabilirsiniz.
Not
Microsoft Entra Koşullu Erişim bir Microsoft Entra ID P2 özelliğidir.
Kümeyle kullanılacak örnek bir Koşullu Erişim ilkesi oluşturmak için:
Azure portalının üst kısmında Microsoft Entra Id'yi arayın ve seçin.
Sol taraftaki Microsoft Entra Id menüsünde Kurumsal uygulamalar'ı seçin.
Sol taraftaki kurumsal uygulamalar menüsünde Koşullu Erişim'i seçin.
Sol taraftaki Koşullu Erişim menüsünde İlkeler>Yeni ilke'yi seçin.
İlke için arc-k8s-policy gibi bir ad girin.
Kullanıcı ve gruplar'ı seçin. Ekle'nin altında Kullanıcıları ve grupları seç'i seçin. Ardından ilkeyi uygulamak istediğiniz kullanıcıları ve grupları seçin. Bu örnek için kümenize yönetici erişimi olan Microsoft Entra grubunu seçin.
Bulut uygulamaları veya eylemleri’ni seçin. Ekle'nin altında Uygulama seç'i seçin. Ardından daha önce oluşturduğunuz sunucu uygulamasını arayın ve seçin.
Erişim denetimleri'nin altında Ver'i seçin. Erişim>ver Cihazın uyumlu olarak işaretlenmesini gerektir'i seçin.
İlkeyi etkinleştir'in altında OluşturmaDa'yı> seçin.
Kümeye yeniden erişin. Örneğin, kümedeki kubectl get nodes
düğümleri görüntülemek için komutunu çalıştırın:
kubectl get nodes
Yeniden oturum açmak için yönergeleri izleyin. Hata iletisinde başarıyla oturum açtığınız ancak yöneticinizin kaynağa erişmek için erişim isteyen cihazın Microsoft Entra Id tarafından yönetilmesini gerektirdiğini belirtir. Şu adımları izleyin:
Azure portalında Microsoft Entra Id'ye gidin.
Kurumsal uygulamalar'ı seçin. Ardından Etkinlik'in altında Oturum açmalar'ı seçin.
En üstteki girdide Durum başarısız oldu ve Koşullu Erişim için Başarı gösterildi. Girdiyi seçin ve ardından Ayrıntılar'da Koşullu Erişim'i seçin. Koşullu Erişim ilkenizin listelendiğine dikkat edin.
Microsoft Entra Id ile tam zamanında küme erişimini yapılandırma
Küme erişim denetimi için bir diğer seçenek de tam zamanında istekler için Privileged Identity Management (PIM) kullanmaktır.
Not
Microsoft Entra PIM , bir Microsoft Entra ID P2 özelliğidir. Microsoft Entra ID SKU'ları hakkında daha fazla bilgi için fiyatlandırma kılavuzuna bakın.
Kümeniz için tam zamanında erişim isteklerini yapılandırmak için aşağıdaki adımları tamamlayın:
Azure portalının üst kısmında Microsoft Entra Id'yi arayın ve seçin.
Kiracı kimliğini not alın. Bu yönergelerin geri kalanı için bu kimliği olarak
<tenant-id>
adlandıracağız.Sol taraftaki Microsoft Entra Id menüsünde, Yönet'in altında Gruplar>Yeni grup'u seçin.
Grup türü için Güvenlik'in seçili olduğundan emin olun. myJITGroup gibi bir grup adı girin. Microsoft Entra rolleri bu gruba atanabilir (Önizleme) altında Evet'i seçin. Son olarak Oluştur'u seçin.
Gruplar sayfasına geri dönersiniz. Yeni oluşturduğunuz grubu seçin ve nesne kimliğini not alın. Bu yönergelerin geri kalanı için bu kimliği olarak
<object-id>
adlandıracağız.Azure portalında sol taraftaki Etkinlik menüsünde Ayrıcalıklı Erişim (Önizleme) seçeneğini belirleyin. Ardından Ayrıcalıklı Erişimi Etkinleştir'i seçin.
Erişim verme işlemine başlamak için Atama ekle'yi seçin.
Üye rolünü seçin ve küme erişimi vermek istediğiniz kullanıcıları ve grupları seçin. Bir grup yöneticisi bu atamaları istediği zaman değiştirebilir. Devam etmeye hazır olduğunuzda İleri'yi seçin.
Etkin atama türünü seçin, istenen süreyi seçin ve bir gerekçe belirtin. Devam etmeye hazır olduğunuzda Ata'yı seçin. Atama türleri hakkında daha fazla bilgi için bkz . Privileged Identity Management'ta ayrıcalıklı erişim grubu (önizleme) için uygunluk atama.
Atamaları yaptıktan sonra kümeye erişerek tam zamanında erişimin çalıştığını doğrulayın. Örneğin, komutunu kullanarak kubectl get nodes
kümedeki düğümleri görüntüleyin:
kubectl get nodes
Kimlik doğrulama gereksinimini not edin ve kimlik doğrulaması için adımları izleyin. Kimlik doğrulaması başarılı olursa şuna benzer bir çıktı görmeniz gerekir:
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
node-1 Ready agent 6m36s v1.18.14
node-2 Ready agent 6m42s v1.18.14
node-3 Ready agent 6m33s v1.18.14
Sonraki adımlar
- Küme Bağlantısı'nı kullanarak kümeye güvenli bir şekilde bağlanın.
- Arc özellikli Kubernetes'te Azure RBAC mimarisi hakkında bilgi edinin.