Windows Server için Microsoft Entra Id ve Kubernetes RBAC kullanarak erişimi denetleme
Şunlar için geçerlidir: Azure Yerel 22H2'de AKS, Windows Server'da AKS
Azure Kubernetes Service (AKS), kullanıcı kimlik doğrulaması için Microsoft Entra Id kullanacak şekilde yapılandırılabilir. Bu yapılandırmada, Microsoft Entra kimlik doğrulama belirtecini kullanarak kubernetes kümesinde oturum açarsınız. Kimlik doğrulamasından sonra, kullanıcının kimliğine veya grup üyeliğine göre ad alanlarına ve küme kaynaklarına erişimi yönetmek için yerleşik Kubernetes rol tabanlı erişim denetimini (Kubernetes RBAC) kullanabilirsiniz.
Bu makalede, AKS Arc'ta Microsoft Entra grup üyeliğini temel alan bir Kubernetes kümesinde Kubernetes RBAC kullanarak erişimin nasıl denetlendiği açıklanır. Microsoft Entra Id'de bir tanıtım grubu ve kullanıcılar oluşturursunuz. Ardından, kaynakları oluşturmak ve görüntülemek için uygun izinleri vermek için kümede roller ve rol bağlamaları oluşturursunuz.
Önkoşullar
Microsoft Entra Id kullanarak Kubernetes RBAC'yi ayarlamadan önce aşağıdaki önkoşullara ihtiyacınız vardır:
- AKS Arc'ta oluşturulan bir Kubernetes kümesi. Kümenizi ayarlamanız gerekiyorsa AKS dağıtmak için Windows Admin Center veya PowerShell kullanma yönergelerine bakın.
- Azure Arc bağlantısı. Kubernetes kümenize bir Azure Arc bağlantınız olmalıdır. Azure Arc'ı etkinleştirme hakkında bilgi için bkz . Azure Yerel kümesinde Azure Kubernetes Hizmetini Azure Arc özellikli Kubernetes'e bağlama.
- Aşağıdaki komut satırı araçlarına erişmeniz gerekir:
-
Azure CLI ve connectedk8s uzantısı. Azure CLI, Azure kaynaklarını oluşturmak ve yönetmek için kullanılan bir komut kümesidir. Azure CLI'nız olup olmadığını denetlemek için bir komut satırı aracı açın ve şunu yazın:
az -v
. Ayrıca, Kubernetes kümenize bir kanal açmak için connectedk8s uzantısını yükleyin. Yükleme yönergeleri için bkz . Azure CLI'yı yükleme. -
Kubectl. Bu Kubernetes komut satırı aracı, Kubernetes kümelerinizi hedefleyen komutları çalıştırmanıza olanak tanır. kubectl yükleyip yüklemediğinizden denetlemek için bir komut istemi açın ve şunu yazın:
kubectl version --client
. Kubectl istemci sürümünüzün en az v1.24.0 sürümü olduğundan emin olun. Yükleme yönergeleri için bkz . kubectl. - PowerShell ve AksHci PowerShell modülü. PowerShell, komut satırı kabuğu, betik dili ve yapılandırma yönetimi çerçevesinden oluşan platformlar arası bir görev otomasyonu çözümüdür. AKS Arc'ı yüklediyseniz AksHci PowerShell modülüne erişebilirsiniz.
- Komutunu kullanarak
az connectedk8s proxy
ara sunucu moduyla Kubernetes kümesine her yerden erişmek için Azure Arc özellikli Kubernetes Kümesi Kullanıcı rolü iznine dahil edilen Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action gereklidir. Bu arada, aracıların ve ekleme işlemini gerçekleştiren makinenin Azure Arc özellikli Kubernetes ağ gereksinimlerindeki ağ gereksinimlerini karşılayıp karşılamadığını doğrulamanız gerekir.
-
Azure CLI ve connectedk8s uzantısı. Azure CLI, Azure kaynaklarını oluşturmak ve yönetmek için kullanılan bir komut kümesidir. Azure CLI'nız olup olmadığını denetlemek için bir komut satırı aracı açın ve şunu yazın:
İsteğe bağlı ilk adımlar
Üye içeren bir Microsoft Entra grubunuz yoksa, bu makaledeki yönergeleri izleyebilmek için bir grup oluşturup bazı üyeler eklemek isteyebilirsiniz.
Microsoft Entra ID ve Kubernetes RBAC ile çalışmayı göstermek için, Kubernetes RBAC ve Microsoft Entra ID'nin küme kaynaklarına erişimi nasıl denetlediğini göstermek için kullanılabilecek uygulama geliştiricileri için bir Microsoft Entra grubu oluşturabilirsiniz. Üretim ortamlarında, bir Microsoft Entra kiracısı içindeki mevcut kullanıcıları ve grupları kullanabilirsiniz.
Microsoft Entra Id'de tanıtım grubu oluşturma
İlk olarak, komutunu kullanarak az ad group create
uygulama geliştiricileri için kiracınızda Microsoft Entra Id'de grubu oluşturun. Aşağıdaki örnek, Azure kiracınızda oturum açmanızı ister ve ardından appdev adlı bir grup oluşturur:
az login
az ad group create --display-name appdev --mail-nickname appdev
Grubunuza kullanıcı ekleme
Uygulama geliştiricileri için Microsoft Entra Id'de oluşturulan örnek grupla, gruba bir kullanıcı appdev
ekleyin. AKS kümesinde oturum açmak ve Kubernetes RBAC tümleştirmesini test etmek için bu kullanıcı hesabını kullanırsınız.
komutunu kullanarak önceki bölümde oluşturulan appdevaz ad group member add
ekleyin. Oturumunuzdan çıkarsanız kullanarak az login
Azure'a yeniden bağlanabilirsiniz.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Microsoft Entra grubu için AKS kümesi kaynağında özel bir Kubernetes RBAC rol bağlaması oluşturma
AKS kümesini, Microsoft Entra grubunuzun kümeye erişmesine izin verecek şekilde yapılandırın. Grup ve kullanıcı eklemek istiyorsanız bkz . Microsoft Entra Id'de tanıtım grupları oluşturma.
komutunu kullanarak
Get-AksHciCredential
küme yöneticisi kimlik bilgilerini alın:Get-AksHciCredential -name <name-of-your-cluster>
komutunu kullanarak Kubernetes kümesinde bir ad alanı
kubectl create namespace
oluşturun. Aşağıdaki örnek adlıdev
bir ad alanı oluşturur:kubectl create namespace dev
Kubernetes'te Roller, verilmesi gereken izinleri tanımlar ve RoleBindings izinleri istenen kullanıcılara veya gruplara uygular. Bu atamalar belirli bir ad alanına veya kümenin tamamına uygulanabilir. Daha fazla bilgi için bkz . Kubernetes RBAC yetkilendirmesini kullanma.
Geliştirme ad alanı için bir rol oluşturun. Bu rol ad alanı için tam izinler verir. Üretim ortamlarında, farklı kullanıcılar veya gruplar için daha ayrıntılı izinler belirtmek isteyebilirsiniz.
role-dev-namespace.yaml adlı bir dosya oluşturun ve aşağıdaki YAML bildirimini kopyalayıp yapıştırın:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
komutunu kullanarak
kubectl apply
rolü oluşturun ve YAML bildiriminizin dosya adını belirtin:kubectl apply -f role-dev-namespace.yaml
komutunu kullanarak appdev
az ad group show
alın. Bu grup, bir sonraki adımda RoleBinding'in konusu olarak ayarlanır:az ad group show --group appdev --query objectId -o tsv
komutu
az ad group show
, olarakgroupObjectId
kullandığınız değeri döndürür:38E5FA30-XXXX-4895-9A00-050712E3673A
rolebinding-dev-namespace.yaml adlı bir dosya oluşturun ve aşağıdaki YAML bildirimini kopyalayın/yapıştırın. Appdev grubunun ad alanı erişimi için rolü kullanmasını sağlayan rol bağlamasını
role-dev-namespace
oluşturursunuz. Son satırda öğesini komutu tarafındangroupObjectId
oluşturulan grup nesnesi kimliğiyle değiştirinaz ad group show
:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
İpucu
Tek bir kullanıcı için RoleBinding oluşturmak
groupObjectId
kubectl apply
oluşturun ve YAML bildiriminizin dosya adını belirtin:kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
AKS küme kaynağınız için yerleşik Kubernetes RBAC rollerini kullanma
Kubernetes ayrıca kullanıcıya yönelik yerleşik roller de sağlar. Bu yerleşik roller şunlardır:
- Süper kullanıcı rolleri (küme yöneticisi)
- ClusterRoleBindings kullanılarak küme genelinde verilmesi amaçlanan roller
- RoleBindings kullanılarak belirli ad alanları içinde verilmesi amaçlanan roller (yönetici, düzenleme, görüntüleme)
Yerleşik Kubernetes RBAC rolleri hakkında daha fazla bilgi için bkz . Kubernetes RBAC kullanıcıya yönelik roller.
Kullanıcıya yönelik roller
Varsayılan ClusterRole | Varsayılan ClusterRoleBinding | Açıklama |
---|---|---|
küme yöneticisi | system:masters grubu | Herhangi bir kaynak üzerinde herhangi bir eylem gerçekleştirmek için süper kullanıcı erişimine izin verir. Bir ClusterRoleBinding içinde kullanıldığında, bu rol kümedeki ve tüm ad alanları içindeki her kaynak üzerinde tam denetim sağlar. RoleBinding içinde kullanıldığında, rol bağlamasının ad alanında ad alanının kendisi de dahil olmak üzere tüm kaynaklar üzerinde tam denetim sağlar. |
yönetici | Hiçbiri | Rol bağlaması kullanılarak ad alanı içinde verilmesi amaçlanan yönetici erişimine izin verir. Rol bağlamasında kullanılırsa, 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şimine izin verir. Bu rol, kaynak kotasına veya ad alanının kendisine yazma erişimine izin vermez. Bu rol, Kubernetes v1.22+ kullanılarak oluşturulan kümelerdeki uç noktalara yazma erişimine de izin vermez. Daha fazla bilgi için bkz . Uç Noktalar için Yazma Erişimi. |
Düzenle… | Hiçbiri | 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 olarak çalıştırmaya olanak tanır, bu nedenle ad alanında herhangi bir ServiceAccount'ın API erişim düzeylerini kazanmak için kullanılabilir. Bu rol, Kubernetes v1.22+ kullanılarak oluşturulan kümelerdeki uç noktalara yazma erişimine de izin vermez. Daha fazla bilgi için bkz . Uç Noktalar için Yazma Erişimi. |
görünüm | Hiçbiri | Ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Rolleri veya rol bağlamalarını görüntülemeye izin vermez. Gizli dizilerin içeriğinin okunması ad alanında ServiceAccount kimlik bilgilerine erişim sağladığından, bu rol gizli dizileri görüntülemeye izin vermez ve bu da ad alanında herhangi bir ServiceAccount olarak API erişimine izin verir (ayrıcalık yükseltme biçimi). |
Microsoft Entra Id ile yerleşik kubernetes RBAC rolü kullanma
Microsoft Entra Id ile yerleşik bir Kubernetes RBAC rolü kullanmak için şu adımları izleyin:
Yerleşik
view
Kubernetes RBAC rolünü Microsoft Entra grubunuz için uygulayın:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Microsoft Entra kullanıcılarınızın her birine yerleşik
view
Kubernetes RBAC rolünü uygulayın:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Microsoft Entra Kimliklerini kullanarak küme kaynaklarıyla çalışma
Şimdi bir Kubernetes kümesinde kaynak oluşturup yönetirken beklenen izinleri test edin. Bu örneklerde, kullanıcının atanan ad alanında podları zamanlar ve görüntülersiniz. Ardından, atanan ad alanının dışındaki podları zamanlamayı ve görüntülemeyi denersiniz.
Komutuna
$AKSDEV_ID
giriş olarak belirttiğiniz kullanıcı hesabını kullanarak Azure'daaz ad group member add
oturum açın. Kümeyeaz connectedk8s proxy
bir kanal açmak için komutunu çalıştırın:az connectedk8s proxy -n <cluster-name> -g <resource-group>
Ara sunucu kanalı oluşturulduktan sonra başka bir oturum açın ve geliştirme ad alanındaki komutunu kullanarak bir NGINX pod'unu
kubectl run
zamanlayın:kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
NGINX başarıyla zamanlandığında aşağıdaki çıkışı görmeniz gerekir:
pod/nginx-dev created
Şimdi komutunu kullanarak
kubectl get pods
ad alanındadev
podları görüntüleyin:kubectl get pods --namespace dev
NGINX başarıyla çalıştırıldığında aşağıdaki çıkışı görmeniz gerekir:
NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Atanan ad alanının dışında küme kaynakları oluşturma ve görüntüleme
Geliştirme ad alanının dışındaki podları görüntülemeye çalışmak için komutunu bayrağıyla kubectl get pods
birlikte kullanın--all-namespaces
:
kubectl get pods --all-namespaces
Kullanıcının grup üyeliği, bu eyleme izin veren bir Kubernetes rolüne sahip değildir. İzin olmadan komut bir hata oluşturur:
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope