Windows Server için Microsoft Entra Id ve Kubernetes RBAC kullanarak erişimi denetleme
Şunlar için geçerlidir: Azure Stack HCI 22H2 üzerinde 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ı yaptıktan 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 Stack HCI kümesinde Azure Kubernetes Service'i 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ızı sağlar. 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ğundan, betik dilinden ve yapılandırma yönetim ç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.
- 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 amacıyla, Kubernetes RBAC ve Microsoft Entra ID'nin küme kaynaklarına erişimi nasıl denetlediğini göstermek için kullanılabilecek bir 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
uygulamayı geliştirenler için kiracınızdaki 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 appdev grubuna az ad group member add
bir kullanıcı 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
kubectl create namespace
Kubernetes kümesinde bir ad alanı 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 RoleBinding'ler 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ına 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
az ad group show
appdev grubunun kaynak kimliğini 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ıp 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ındanaz ad group show
oluşturulan grup nesnesi kimliğiyle değiştiringroupObjectId
: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 istiyorsanız, değerini örnekteki kullanıcı asıl adı (UPN) ile belirtin
kind: User
ve değiştiringroupObjectId
.komutunu kullanarak RoleBinding'i
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 | Description |
---|---|---|
cluster-admin | 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ındaki her kaynak üzerinde tam denetim sağlar. RoleBinding içinde kullanıldığında, rol bağlamasının ad alanı dahil olmak üzere ad alanı içindeki her kaynak ü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ıyorsa, 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ına 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, ad alanında herhangi bir ServiceAccount olarak gizli dizilere erişmeye ve pod çalıştırmaya izin verir, 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üntüle | Hiçbiri | Ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Rollerin veya rol bağlamalarının görüntülenmesine izin vermez. Bu rol gizli dizilerin görüntülenmesine izin vermez, çünkü gizli dizilerin içeriğini okumak ad alanında ServiceAccount kimlik bilgilerine erişim sağlar ve bu da ad alanında herhangi bir ServiceAccount (ayrıcalık yükseltme biçimi) olarak API erişimine izin verir. |
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>
Proxy kanalı oluşturulduktan sonra başka bir oturum açın ve geliştirme ad alanındaki komutunu kullanarak
kubectl run
bir NGINX pod 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 bayrağıyla kubectl get pods
komutunu --all-namespaces
kullanın:
kubectl get pods --all-namespaces
Kullanıcının grup üyeliğinde bu eyleme izin veren bir Kubernetes rolü yoktur. İ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
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin