Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak autorizovat volání rozhraní Kubernetes API ve službě Azure Kubernetes Service (AKS) pomocí identit ID Microsoft Entra. Autorizace Entra ID pro rozhraní API Kubernetes používá přiřazení rolí Azure RBAC k udělení přístupu k prostředkům Kubernetes. U integrovaných prostředků Kubernetes přiřaďte jednu z předdefinovaných rolí AKS (například Čtenář RBAC služby Azure Kubernetes Service) v oboru clusteru nebo oboru názvů. Pro vlastní prostředky (CRDs) přiřaďte vlastní roli s podmínkami Azure ABAC, které určují, ke kterým skupinám nebo druhům CRD má přiřazený přístup. Vytvoří se dvě přiřazení rolí: jedno uděluje přístup ke standardním prostředkům Kubernetes a druhé zajišťuje podmíněný přístup ke specifickým vlastním prostředkům.
Koncepční přehled dostupných možností autorizace rozhraní API Kubernetes v AKS najdete v tématu Koncepty autorizace clusteru.
Note
Pokud používáte integrované ověřování mezi ID Microsoft Entra a AKS, můžete použít uživatele, skupiny nebo služební identifikátory Microsoftu jako subjekty v řízení přístupu na základě role Kubernetes (Kubernetes RBAC). S autorizací Entra ID nemusíte samostatně spravovat identity uživatelů a přihlašovací údaje pro Kubernetes. Stále však potřebujete nastavit a spravovat přiřazení rolí Entra ID a všechny vazby RBAC Kubernetes samostatně.
Než začnete
- Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.24.0 nebo novější. Verzi zjistíte spuštěním příkazu
az --version. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install Azure CLI. - Potřebujete
kubectl, s minimální verzí 1.18.3. - Abyste mohli přidat autorizaci Id Entra pro rozhraní Kubernetes API, potřebujete spravovanou integraci Microsoft Entra ve vašem clusteru. Pokud potřebujete povolit spravovanou integraci Microsoft Entra, přečtěte si téma Použití ID Microsoft Entra v AKS.
- Nová přiřazení rolí mohou trvat až pět minut, než se aktualizují na autorizačním serveru.
- Autorizace Entra ID pro rozhraní API Kubernetes vyžaduje, aby tenant Microsoft Entra nakonfigurovaný pro ověřování byl stejný jako tenant pro předplatné, které obsahuje váš cluster AKS.
Vytvoření nového clusteru AKS se spravovanou integrací Microsoft Entra a autorizací ID Entra
Pomocí příkazu
az group createvytvořte skupinu prostředků Azure.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONVytvořte pomocí příkazu
az aks createcluster AKS se spravovanou integrací Microsoft Entra a autorizací Entra ID.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysVaše výstupy by měly vypadat podobně jako následující příklad:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Povolení autorizace Entra ID v existujícím clusteru AKS
Povolte autorizaci Entra ID pro rozhraní API Kubernetes v existujícím clusteru AKS pomocí
az aks updatepříkazu s příznakem--enable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Předdefinované role AKS
AKS poskytuje následující předdefinované role:
| Úloha | Description |
|---|---|
| Čtenář RBAC služby Azure Kubernetes Service | Umožňuje přístup jen pro čtení k většině objektů v jmenném prostoru. Nepovoluje zobrazení rolí nebo přidružení rolí. Tato role neumožňuje prohlížení Secrets, protože čtení obsahu Secrets umožňuje přístup k přihlašovacím údajům ServiceAccount v rámci názvoslovného prostoru, což by dovolilo přístup k API jako kterýkoli ServiceAccount v tomto prostoru (forma eskalace oprávnění). |
| Azure Kubernetes Service RBAC Autor | Umožňuje přístup pro čtení a zápis k většině objektů v jmenném prostoru. Tato role neumožňuje zobrazení nebo úpravy rolí nebo vazeb rolí. Tato role však umožňuje přístup k Secrets Podům jako kterýkoli ServiceAccount v oboru názvů, takže se dá použít k získání úrovní přístupu rozhraní API jakéhokoli ServiceAccount v oboru názvů. |
| Správce RBAC služby Azure Kubernetes Service | Umožňuje přístup správce, který má být přidělen v konkrétním oboru názvů. Umožňuje přístup pro čtení a zápis k většině prostředků v oboru názvů (nebo oboru clusteru), včetně možnosti vytvářet role a vazby rolí v rámci oboru názvů. Tato role neumožňuje zapisovat do kvóty zdrojů ani k samotnému prostoru názvů. |
| Správce clusteru RBAC služby Azure Kubernetes Service | Umožňuje superuživatelům přístup k provedení jakékoli akce u libovolného prostředku. Poskytuje úplnou kontrolu nad všemi prostředky v clusteru a ve všech jmenných prostorech. |
Vytvoření přiřazení rolí pro přístup ke clusteru
Získejte ID prostředku AKS pomocí příkazu
az aks show.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)Vytvořte přiřazení role pomocí příkazu
az role assignment create.<AAD-ENTITY-ID>může být uživatelské jméno nebo ID klienta hlavní služby. Následující příklad vytvoří přiřazení role pro roli správce RBAC služby Azure Kubernetes Service .az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_IDNote
Můžete vytvořit přiřazení rolí Azure Kubernetes Service RBAC Reader a Azure Kubernetes Service RBAC Writer, které jsou omezeny na konkrétní obor názvů v rámci clusteru, pomocí příkazu
az role assignment createa nastavením oboru na požadovaný obor názvů.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Vytváření definic vlastních rolí
U integrovaných prostředků Kubernetes odkazují definice vlastních rolí na odpovídající akci skupiny rozhraní API v části Microsoft.ContainerService/managedClusters/. Následující příklad umožňuje uživateli jen číst nasazení a nic jiného. Úplný seznam možných akcí najdete v tématu Operace Microsoft.ContainerService. Pokud chcete filtrovat přístup ke konkrétním skupinám nebo typům vlastních prostředků, přečtěte si část Omezení přístupu k vlastním prostředkům pomocí podmínek ABAC dále v tomto článku.
Pokud chcete vytvořit vlastní definice rolí, zkopírujte následující soubor, nahraďte
<YOUR SUBSCRIPTION ID>ho vlastním ID předplatného a uložte ho jakodeploy-view.json.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Vytvořte definici role pomocí příkazu
az role definition create, a nastavte--role-definitionna soubordeploy-view.json, který jste vytvořili v předchozím kroku.az role definition create --role-definition @deploy-view.jsonPomocí příkazu přiřaďte definici role uživateli nebo jiné identitě
az role assignment create.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Omezení vlastního přístupu k prostředkům pomocí podmínek ABAC (Preview)
Important
Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Verze Preview jsou poskytovány "tak, jak jsou" a "podle dostupnosti" a neplatí pro ně smlouvy o úrovni služeb ani omezená záruka. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Podmínky ABAC umožňují filtrovat přiřazení rolí Entra ID ke konkrétním skupinám a typům vlastních prostředků (CRD) – centrálně prostřednictvím Microsoft Entra ID bez potřeby psát RBAC Role a RoleBinding manifesty pro jednotlivé Kubernetes clustery. Základní informace o Azure ABAC najdete v tématu Co jsou podmínky přiřazení rolí Azure?
Kdy použít podmínky ABAC
Tuto funkci použijte, pokud chcete:
- Omezte, které skupiny CRD nebo druhy může určený uživatel vypsat nebo získat.
- Centrálně vynucujte přístupová omezení k vlastním prostředkům z Microsoft Entra ID bez správy Kubernetes RBAC
RoleaRoleBindingobjektů v každém clusteru. - Rozlišovat mezi CRD publikovanými různými operátory (například povolit
secrets-store.csi.x-k8s.iopři blokovánísecurity.istio.io).
Dostupné atributy stavu
Při vytváření podmínek pro rozhraní API Kubernetes v clusteru AKS jsou k dispozici následující atributy požadavku:
| Vlastnost | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
Skupina API vlastního prostředku, ke které se přistupuje (například secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
Typ vlastního prostředku, ke který se přistupuje (například secretproviderclasses). |
Přidejte podmínku ABAC k přiřazení role
Následující příklad vytvoří vlastní roli čtenáře AKS CRD, která uděluje přístup pro čtení k vlastním prostředkům, a pak ji přiřadí s podmínkou, která povoluje přístup pouze do konkrétní skupiny secretproviderclassessecrets-store.csi.x-k8s.io (CRD používaný Azure Key Vault providerem pro Secrets Store CSI Driver).
Uložte následující definici role do souboru s názvem
crd-reader.jsona nahraďte<YOUR SUBSCRIPTION ID>ho vlastním ID předplatného.{ "Name": "AKS CRD Reader", "Description": "Lets you read custom resources in the cluster.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/customresources/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }Pomocí příkazu vytvořte definici
az role definition createrole.az role definition create --role-definition @crd-reader.jsonUložte následující podmínku do souboru s názvem
abac-condition.txt. Podmínka umožňuje, aby čtení neuživatelských prostředků prošlo beze změny, a omezuje čtení uživatelsky definovaných prostředků na konkrétní skupinu a druh.( ( !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'}) ) OR ( @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io' AND @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses' ) )Pomocí příkazu vytvořte přiřazení role s podmínkou
az role assignment create.az role assignment create \ --role "AKS CRD Reader" \ --assignee <AAD-ENTITY-ID> \ --scope $AKS_ID \ --condition "$(cat abac-condition.txt)" \ --condition-version "2.0" \ --description "Allow reads on SecretProviderClass resources only"
Podmínku můžete přidat také prostřednictvím webu Azure Portal. Na stránce Přidat přiřazení role vyberte kartu Podmínky , pak vyberte Přidat podmínku a pomocí editoru vizuálů sestavte výraz.
Ověřte podmínku
Po rozšíření přiřazení role (až pět minut) se přihlaste jako přiřazený a ověřte, že může číst povolené CRD, ale ne jiné CRD.
Pomocí příkazu získejte přihlašovací údaje clusteru
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMESeznam
secretproviderclasseszesecrets-store.csi.x-k8s.ioskupiny, kterou podmínka umožňuje. Příkaz by měl proběhnout úspěšně a vrátit existující prostředky nebo prázdný seznam (nebo chybu, která nebyla nalezena, pokud v clusteru není nainstalovaný CRD).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesSeznam
authorizationpoliciesze skupiny Istiosecurity.istio.io, kterou blokuje podmínka. Příkaz by měl selhat s chybouForbiddenz webhooku autorizace Entra ID (za předpokladu, že istio CRD je nainstalovaný v clusteru; jinakkubectlvrátí chybu nenalezena dříve, než server rozhraní API dosáhne autorizačního webhooku).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Vyčistěte zdroje
Zakázání autorizace Entra ID
Odeberte autorizaci Entra ID pomocí příkazu
az aks updates příznakem--disable-azure-rbac.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Odstranit přiřazení role
Zobrazení seznamu přiřazení rolí pomocí
az role assignment listpříkazuaz role assignment list --scope $AKS_ID --query [].id --output tsvPomocí příkazu odstraňte přiřazení
az role assignment deleterolí.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Odstranění definice role
Pomocí příkazu odstraňte vlastní definici
az role definition deleterole.az role definition delete --name "AKS Deployment Reader"
Odstranění skupiny prostředků a clusteru AKS
Pomocí příkazu
az group deleteodstraňte skupinu prostředků (a cluster AKS, který obsahuje).az group delete --name $RESOURCE_GROUP --yes --no-wait
Další kroky
Další informace o ověřování, autorizaci AKS, RBAC Kubernetes a Azure RBAC najdete tady:
- Koncepty autorizace clusteru pro AKS
- Možnosti přístupu a identity pro AKS
- Co je Azure RBAC?
- Co jsou podmínky Azure ABAC?
- Operace služby Microsoft Container Service