A Kubernetes szerepköralapú hozzáférés-vezérlésének használata a Microsoft Entra-azonosítóval az Azure Kubernetes Service-ben

Az Azure Kubernetes Service (AKS) konfigurálható úgy, hogy a Microsoft Entra ID-t használja a felhasználói hitelesítéshez. Ebben a konfigurációban egy Microsoft Entra hitelesítési jogkivonat használatával jelentkezik be egy AKS-fürtbe. A hitelesítés után a beépített Kubernetes szerepköralapú hozzáférés-vezérléssel (Kubernetes RBAC) kezelheti a névterekhez és fürterőforrásokhoz való hozzáférést a felhasználó identitása vagy csoporttagsága alapján.

Ez a cikk bemutatja, hogyan:

  • Hozzáférés vezérlése a Kubernetes RBAC használatával egy AKS-fürtön a Microsoft Entra-csoporttagság alapján.
  • Hozzon létre példacsoportokat és felhasználókat a Microsoft Entra-azonosítóban.
  • Szerepkörök és szerepkörbindingek létrehozása egy AKS-fürtben az erőforrások létrehozásához és megtekintéséhez szükséges engedélyek megadásához.

Előkészületek

  • Van egy meglévő AKS-fürtje, amelyen engedélyezve van a Microsoft Entra integrációja. Ha ezzel a konfigurációval rendelkező AKS-fürtre van szüksége, olvassa el a Microsoft Entra ID integrálása az AKS-sel című témakört.
  • A Kubernetes RBAC alapértelmezés szerint engedélyezve van az AKS-fürt létrehozása során. Ha frissíteni szeretné a fürtöt a Microsoft Entra-integrációval és a Kubernetes RBAC-vel, engedélyezze a Microsoft Entra integrációját a meglévő AKS-fürtön.
  • Győződjön meg arról, hogy az Azure CLI 2.0.61-es vagy újabb verziója telepítve van és konfigurálva van. A verzió azonosításához futtassa a következőt: az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
  • Ha a Terraformot használja, telepítse a Terraform 2.99.0-s vagy újabb verzióját.

Az Azure Portal vagy az Azure CLI használatával ellenőrizze, hogy a Microsoft Entra integrációja engedélyezve van-e a Kubernetes RBAC-vel.

Az Azure Portal használatának ellenőrzése:

  • A böngészőből jelentkezzen be az Azure Portalra.
  • Lépjen a Kubernetes-szolgáltatásokhoz, és a bal oldali panelen válassza a Fürtkonfiguráció lehetőséget.
  • A Hitelesítés és engedélyezés szakaszban ellenőrizze, hogy a Microsoft Entra-hitelesítés kubernetes RBAC-beállítással van-e kiválasztva.

Example of AKS Authentication and Authorization page in Azure portal.

Bemutatócsoportok létrehozása a Microsoft Entra-azonosítóban

Ebben a cikkben két felhasználói szerepkört hozunk létre, amelyek bemutatják, hogyan szabályozza a Kubernetes RBAC és a Microsoft Entra ID a fürterőforrásokhoz való hozzáférést. A rendszer a következő két példaszerepkört használja:

  • Alkalmazásfejlesztő
    • Egy aksdev nevű felhasználó, amely az appdev csoport része.
  • Webhely-megbízhatósági mérnök
    • Egy akssre nevű felhasználó, amely az opssre csoport része.

Éles környezetben meglévő felhasználókat és csoportokat használhat egy Microsoft Entra-bérlőn belül.

  1. Először kérje le az AKS-fürt erőforrás-azonosítóját a az aks show paranccsal. Ezután rendelje hozzá az erőforrás-azonosítót egy AKS_ID nevű változóhoz, hogy más parancsokban hivatkozni lehessen rá.

    AKS_ID=$(az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query id -o tsv)
    
  2. Hozza létre az első példacsoportot a Microsoft Entra-azonosítóban a parancsot használó az ad group create alkalmazásfejlesztők számára. Az alábbi példa egy appdev nevű csoportot hoz létre:

    APPDEV_ID=$(az ad group create --display-name appdev --mail-nickname appdev --query id -o tsv)
    
  3. Hozzon létre egy Azure-szerepkör-hozzárendelést az appdev-csoporthoz a az role assignment create paranccsal. Ezzel a hozzárendeléssel a csoport bármely tagja használhatja kubectl az AKS-fürttel való interakciót az Azure Kubernetes szolgáltatásfürt felhasználói szerepkörének biztosításával.

    az role assignment create \
      --assignee $APPDEV_ID \
      --role "Azure Kubernetes Service Cluster User Role" \
      --scope $AKS_ID
    

Tipp.

Ha például Principal 35bfec9328bd4d8d9b54dea6dac57b82 doesn't exist in the directory a5443dcd-cd0e-494d-a387-3039b419f0d5.hibaüzenetet kap, várjon néhány másodpercet, amíg a Microsoft Entra-csoport objektumazonosítója propagálja a könyvtárat, majd próbálkozzon újra a az role assignment create paranccsal.

  1. Hozzon létre egy második példacsoportot opssre nevű SREs-ekhez.

    OPSSRE_ID=$(az ad group create --display-name opssre --mail-nickname opssre --query id -o tsv)
    
  2. Azure-szerepkör-hozzárendelés létrehozása a csoport tagjainak az Azure Kubernetes szolgáltatásfürt felhasználói szerepkörének megadásához.

    az role assignment create \
      --assignee $OPSSRE_ID \
      --role "Azure Kubernetes Service Cluster User Role" \
      --scope $AKS_ID
    

Demófelhasználók létrehozása a Microsoft Entra-azonosítóban

Most, hogy két példacsoportot hoztunk létre a Microsoft Entra-azonosítóban az alkalmazásfejlesztők és az SRE-k számára, két példafelhasználót hozunk létre. A Cikk végén a Kubernetes RBAC-integráció teszteléséhez ezekkel a fiókokkal kell bejelentkeznie az AKS-fürtbe.

Az egyszerű felhasználónév és jelszó beállítása az alkalmazásfejlesztők számára

Adja meg az egyszerű felhasználónevet (UPN) és a jelszót az alkalmazásfejlesztők számára. Az UPN-nek tartalmaznia kell például aksdev@contoso.coma bérlő ellenőrzött tartománynevét.

A következő parancssor kéri az UPN-t, és beállítja AAD_DEV_UPN, hogy egy későbbi parancsban is használható legyen:

echo "Please enter the UPN for application developers: " && read AAD_DEV_UPN

A következő parancs kéri a jelszót, és beállítja, hogy AAD_DEV_PW egy későbbi parancsban való használatra:

echo "Please enter the secure password for application developers: " && read AAD_DEV_PW

A felhasználói fiókok létrehozása

  1. Hozza létre az első felhasználói fiókot a Microsoft Entra ID-ban a az ad user create paranccsal. Az alábbi példa létrehoz egy AKS Dev nevű felhasználót, valamint az UPN-t és biztonságos jelszót a AAD_DEV_UPN és AAD_DEV_PW értékeinek használatával:
AKSDEV_ID=$(az ad user create \
  --display-name "AKS Dev" \
  --user-principal-name $AAD_DEV_UPN \
  --password $AAD_DEV_PW \
  --query id -o tsv)
  1. Adja hozzá a felhasználót az előző szakaszban létrehozott appdev-csoporthoz a az ad group member add paranccsal.
az ad group member add --group appdev --member-id $AKSDEV_ID
  1. Állítsa be az UPN-t és a jelszót az SRE-khez. Az UPN-nek tartalmaznia kell például akssre@contoso.coma bérlő ellenőrzött tartománynevét. A következő parancssor kéri az UPN-t, és beállítja, hogy AAD_SRE_UPN egy későbbi parancsban való használatra:
echo "Please enter the UPN for SREs: " && read AAD_SRE_UPN
  1. A következő parancs kéri a jelszót, és beállítja, hogy AAD_SRE_PW egy későbbi parancsban való használatra:
echo "Please enter the secure password for SREs: " && read AAD_SRE_PW
  1. Hozzon létre egy második felhasználói fiókot. Az alábbi példa egy AKS SRE és upn nevű felhasználót hoz létre, és biztonságos jelszót hoz létre a AAD_SRE_UPN és AAD_SRE_PW értékeinek használatával:
# Create a user for the SRE role
AKSSRE_ID=$(az ad user create \
  --display-name "AKS SRE" \
  --user-principal-name $AAD_SRE_UPN \
  --password $AAD_SRE_PW \
  --query id -o tsv)

# Add the user to the opssre Azure AD group
az ad group member add --group opssre --member-id $AKSSRE_ID

AKS-fürterőforrások létrehozása alkalmazásfejlesztésekhez

Létrehoztuk a Microsoft Entra-csoportokat, a felhasználókat és az Azure-szerepkör-hozzárendeléseket. Most konfiguráljuk az AKS-fürtöt, hogy ezek a csoportok hozzáférjenek bizonyos erőforrásokhoz.

  1. Kérje le a fürt rendszergazdai hitelesítő adatait a az aks get-credentials paranccsal. Az alábbi szakaszok egyikében a szokásos felhasználói fürt hitelesítő adatait kapja meg a Microsoft Entra hitelesítési folyamat működés közbeni megtekintéséhez.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
  1. Hozzon létre egy névteret az AKS-fürtben a kubectl create namespace paranccsal. Az alábbi példa létrehoz egy névtérnév-fejlesztést:
kubectl create namespace dev

Megjegyzés:

A Kubernetesben a szerepkörök határozzák meg az engedélyeket, a RoleBindings pedig a kívánt felhasználókra vagy csoportokra alkalmazza őket. Ezek a hozzárendelések alkalmazhatók egy adott névtérre vagy a teljes fürtre. További információ: Kubernetes RBAC-hitelesítés használata.

Ha a Kubernetes RBAC-kötést megadó felhasználó ugyanabban a Microsoft Entra-bérlőben van, rendeljen hozzá engedélyeket a userPrincipalName (UPN) alapján. Ha a felhasználó egy másik Microsoft Entra-bérlőben van, inkább az objectId tulajdonságot kérdezi le és használja.

  1. Hozzon létre egy szerepkört a fejlesztői névtérhez, amely teljes körű engedélyeket biztosít a névtérhez. Éles környezetben részletesebb engedélyeket adhat meg a különböző felhasználókhoz vagy csoportokhoz. Hozzon létre egy elnevezett role-dev-namespace.yaml fájlt, és illessze be a következő YAML-jegyzékfájlt:
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: ["*"]
  1. Hozza létre a szerepkört a kubectl apply paranccsal, és adja meg a YAML-jegyzék fájlnevét.
kubectl apply -f role-dev-namespace.yaml
  1. Kérje le az appdev-csoport erőforrás-azonosítóját a az ad group show paranccsal. Ez a csoport a következő lépésben egy RoleBinding tárgyaként van beállítva.
az ad group show --group appdev --query id -o tsv
  1. Hozzon létre egy RoleBindinget az appdev-csoport számára a korábban létrehozott szerepkör névtér-hozzáféréshez való használatához. Hozzon létre egy elnevezett rolebinding-dev-namespace.yaml fájlt, és illessze be a következő YAML-jegyzékfájlt. Az utolsó sorban cserélje le a groupObjectId azonosítót az előző parancs csoportobjektum-azonosító kimenetére.
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

Tipp.

Ha egyetlen felhasználóhoz szeretné létrehozni a RoleBindinget, adja meg a következő típust: Felhasználó , és cserélje le a groupObjectId azonosítót a fenti mintában szereplő egyszerű felhasználónévre (UPN).

  1. Hozza létre a RoleBindinget a kubectl apply parancs használatával, és adja meg a YAML-jegyzékfájl fájlnevét:
kubectl apply -f rolebinding-dev-namespace.yaml

Az AKS-fürt erőforrásainak létrehozása az SRE-k számára

Most megismételjük az előző lépéseket, hogy létrehozzuk a névteret, a szerepkört és a RoleBindinget az SRE-k számára.

  1. Hozzon létre egy névteret a sre számára a kubectl create namespace parancs használatával.
kubectl create namespace sre
  1. Hozzon létre egy elnevezett role-sre-namespace.yaml fájlt, és illessze be a következő YAML-jegyzékfájlt:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sre-user-full-access
  namespace: sre
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["batch"]
  resources:
  - jobs
  - cronjobs
  verbs: ["*"]
  1. Hozza létre a szerepkört a kubectl apply paranccsal, és adja meg a YAML-jegyzék fájlnevét.
kubectl apply -f role-sre-namespace.yaml
  1. Kérje le az opssre-csoport erőforrás-azonosítóját az az ad group show paranccsal.
az ad group show --group opssre --query id -o tsv
  1. Hozzon létre egy RoleBindinget az opssre csoport számára a korábban létrehozott szerepkör névtér-hozzáféréshez való használatához. Hozzon létre egy elnevezett rolebinding-sre-namespace.yaml fájlt, és illessze be a következő YAML-jegyzékfájlt. Az utolsó sorban cserélje le a groupObjectId azonosítót az előző parancs csoportobjektum-azonosító kimenetére.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sre-user-access
  namespace: sre
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: sre-user-full-access
subjects:
- kind: Group
  namespace: sre
  name: groupObjectId
  1. Hozza létre a RoleBindinget a kubectl apply paranccsal, és adja meg a YAML-jegyzékfájl fájlnevét.
kubectl apply -f rolebinding-sre-namespace.yaml

Fürterőforrások használata Microsoft Entra-identitásokkal

Most teszteljük, hogy a várt engedélyek működnek-e, amikor erőforrásokat hoz létre és kezel egy AKS-fürtben. Ezekben a példákban ütemezzük és tekintjük meg a podokat a felhasználó hozzárendelt névterében, és megpróbáljuk ütemezni és megtekinteni a podokat a hozzárendelt névtéren kívül.

  1. Állítsa alaphelyzetbe a kubeconfig környezetet a az aks get-credentials paranccsal. Az előző szakaszban a környezet beállítása a fürt rendszergazdai hitelesítő adataival történik. A rendszergazda felhasználó átadja a Microsoft Entra bejelentkezési kéréseit. A --admin paraméter nélkül a felhasználói környezet lesz alkalmazva, amely megköveteli, hogy az összes kérést hitelesíteni kell a Microsoft Entra-azonosítóval.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existing
  1. Ütemezzen egy alapszintű NGINX-podot a kubectl rundev névtérben található paranccsal.
kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
  1. Adja meg a cikk elején létrehozott saját appdev@contoso.com fiókjához tartozó hitelesítő adatokat bejelentkezési kérésként. Miután sikeresen bejelentkezett, a fiók jogkivonata gyorsítótárazva lesz a jövőbeli kubectl parancsokhoz. Az NGINX sikeresen ütemezve van, ahogy az a következő példakimenetben is látható:
$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code B24ZD6FP8 to authenticate.

pod/nginx-dev created
  1. A parancs használatával megtekintheti a kubectl get pods podokat a fejlesztői névtérben.
kubectl get pods --namespace dev
  1. Győződjön meg arról, hogy az NGINX-pod állapota fut. A kimenet a következő kimenethez hasonlóan fog kinézni:
$ kubectl get pods --namespace dev

NAME        READY   STATUS    RESTARTS   AGE
nginx-dev   1/1     Running   0          4m

Fürterőforrások létrehozása és megtekintése a hozzárendelt névtéren kívül

Próbálja meg megtekinteni a fejlesztői névtéren kívüli podokat. Ezúttal ismét használja a kubectl get pods parancsot.--all-namespaces

kubectl get pods --all-namespaces

A felhasználó csoporttagságához nincs olyan Kubernetes-szerepkör, amely lehetővé teszi ezt a műveletet, ahogyan az alábbi példakimenetben látható:

Error from server (Forbidden): pods is forbidden: User "aksdev@contoso.com" cannot list resource "pods" in API group "" at the cluster scope

Ugyanígy próbáljon meg ütemezni egy podot egy másik névtérben, például a sre névtérben. A felhasználó csoporttagság nem egyezik a Kubernetes-szerepkörrel és a RoleBindinggel az engedélyek megadásához, ahogyan az alábbi példakimenetben látható:

$ kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre

Error from server (Forbidden): pods is forbidden: User "aksdev@contoso.com" cannot create resource "pods" in API group "" in the namespace "sre"

Az SRE hozzáférésének tesztelése az AKS-fürt erőforrásaihoz

Annak ellenőrzéséhez, hogy a Microsoft Entra-csoporttagság és a Kubernetes RBAC megfelelően működik-e a különböző felhasználók és csoportok között, próbálja ki az előző parancsokat, amikor opssre-felhasználóként jelentkezik be.

  1. Állítsa alaphelyzetbe a kubeconfig környezetet az aksdev-felhasználó az aks get-credentials korábban gyorsítótárazott hitelesítési jogkivonatának törlésére szolgáló paranccsal.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --overwrite-existing
  1. Próbálja meg ütemezni és megtekinteni a podokat a hozzárendelt sre névtérben. Amikor a rendszer kéri, jelentkezzen be a cikk elején létrehozott saját opssre@contoso.com hitelesítő adataival.
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre
kubectl get pods --namespace sre

A következő példakimenetben látható módon sikeresen létrehozhatja és megtekintheti a podokat:

$ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace sre

3. To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code BM4RHP3FD to authenticate.

pod/nginx-sre created

$ kubectl get pods --namespace sre

NAME        READY   STATUS    RESTARTS   AGE
nginx-sre   1/1     Running   0
  1. Próbálja meg megtekinteni vagy ütemezni a podokat a hozzárendelt SRE-névtéren kívül.
kubectl get pods --all-namespaces
kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev

Ezek a kubectl parancsok sikertelenek, ahogy az alábbi példakimenetben is látható. A felhasználó csoporttagság és a Kubernetes-szerepkör és a RoleBindings nem ad engedélyeket az erőforrások más névterekben való létrehozásához vagy felügyeletéhez.

$ kubectl get pods --all-namespaces
Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot list pods at the cluster scope

$ kubectl run nginx-sre --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Error from server (Forbidden): pods is forbidden: User "akssre@contoso.com" cannot create pods in the namespace "dev"

Clean up resources

Ebben a cikkben erőforrásokat hozott létre az AKS-fürtben, valamint a Microsoft Entra ID-ban lévő felhasználókat és csoportokat. Az összes erőforrás törléséhez futtassa a következő parancsokat:

# Get the admin kubeconfig context to delete the necessary cluster resources.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

# Delete the dev and sre namespaces. This also deletes the pods, Roles, and RoleBindings.

kubectl delete namespace dev
kubectl delete namespace sre

# Delete the Azure AD user accounts for aksdev and akssre.

az ad user delete --upn-or-object-id $AKSDEV_ID
az ad user delete --upn-or-object-id $AKSSRE_ID

# Delete the Azure AD groups for appdev and opssre. This also deletes the Azure role assignments.

az ad group delete --group appdev
az ad group delete --group opssre

Következő lépések