Použití řízení přístupu na základě role v Azure k definování přístupu ke konfiguračnímu souboru Kubernetes ve službě Azure Kubernetes Service (AKS)

Pomocí nástroje můžete pracovat s clustery Kubernetes kubectl . Rozhraní příkazového řádku Azure nabízí snadný způsob, jak získat přihlašovací údaje pro přístup a informace o konfiguraci pro připojení k vašim clusterům AKS pomocí nástroje kubectl . Pokud chcete omezit, kdo může získat informace o konfiguraci Kubernetes (kubeconfig) a omezit oprávnění, která pak mají, můžete použít řízení přístupu na základě role Azure (Azure RBAC).

V tomto článku se dozvíte, jak přiřadit role Azure, které omezují, kdo může získat informace o konfiguraci pro cluster AKS.

Než začnete

V tomto článku se předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, přečtěte si rychlý Start AKS a použijte Azure CLI nebo Azure Portal.

Tento článek také vyžaduje, abyste spustili Azure CLI verze 2.0.65 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Oprávnění k dispozici pro role clusteru

Při interakci s clusterem AKS pomocí kubectl nástroje je použit konfigurační soubor, který definuje informace o připojení ke clusteru. Tento konfigurační soubor je obvykle uložený v souboru ~/.Kube/config. V tomto souboru kubeconfig lze definovat více clusterů. Mezi clustery přepínáte pomocí příkazu kubectl config use-Context .

Příkaz AZ AKS Get-Credentials vám umožní získat přihlašovací údaje pro cluster AKS a sloučí je do souboru kubeconfig . K řízení přístupu k těmto přihlašovacím údajům můžete použít řízení přístupu na základě role Azure (Azure RBAC). Tyto role Azure umožňují definovat, kdo může načíst soubor kubeconfig a jaká oprávnění mají v rámci clusteru.

Tyto dvě předdefinované role:

  • Role Správce clusteru služby Azure Kubernetes
  • Role uživatele clusteru služby Azure Kubernetes

Tyto role Azure je možné použít pro uživatele nebo skupinu Azure Active Directory (AD).

Poznámka

V clusterech používajících službu Azure AD mají uživatelé s rolí clusterUser prázdný soubor kubeconfig , který vyzývá přihlášení. Po přihlášení uživatelé mají přístup na základě nastavení uživatele nebo skupiny Azure AD. Uživatelé s rolí clusterAdmin mají přístup správce.

Clustery, které nepoužívají Azure AD, používají jenom roli clusterAdmin .

Přiřazení oprávnění role uživateli nebo skupině

Pokud chcete přiřadit jednu z dostupných rolí, potřebujete získat ID prostředku clusteru AKS a ID účtu uživatele nebo skupiny Azure AD. Následující příklady příkazů:

  • Pomocí příkazu AZ AKS show pro cluster s názvem myAKSCluster ve skupině prostředků myResourceGroup Získejte ID prostředku clusteru. Podle potřeby zadejte vlastní cluster a název skupiny prostředků.
  • K získání ID uživatele použijte příkaz AZ Account show a AZ AD User show .
  • Nakonec přiřaďte roli pomocí příkazu AZ role Assignment Create .

Následující příklad přiřadí roli Správce clusteru služby Azure Kubernetes k jednotlivému uživatelskému účtu:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Důležité

V některých případech se User.Name v účtu liší od třídy userPrincipalName, jako je například u uživatelů typu Host Azure AD:

$ az account show --query user.name -o tsv
user@contoso.com
$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

V takovém případě nastavte hodnotu ACCOUNT_UPN na userPrincipalName od uživatele Azure AD. Například pokud je váš účet User.Name uživatelským @ contoso.com:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Tip

Pokud chcete přiřadit oprávnění ke skupině Azure AD, aktualizujte --assignee parametr uvedený v předchozím příkladu s ID objektu pro skupinu místo na uživatele. Chcete-li získat ID objektu pro skupinu, použijte příkaz AZ AD Group show . Následující příklad získá ID objektu pro skupinu Azure AD s názvem appdev: az ad group show --group appdev --query objectId -o tsv

V případě potřeby můžete změnit předchozí přiřazení na roli uživatele clusteru .

Následující příklad výstupu ukazuje, že přiřazení role bylo úspěšně vytvořeno:

{
  "canDelegate": null,
  "id": "/subscriptions/<guid>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/providers/Microsoft.Authorization/roleAssignments/b2712174-5a41-4ecb-82c5-12b8ad43d4fb",
  "name": "b2712174-5a41-4ecb-82c5-12b8ad43d4fb",
  "principalId": "946016dd-9362-4183-b17d-4c416d1f8f61",
  "resourceGroup": "myResourceGroup",
  "roleDefinitionId": "/subscriptions/<guid>/providers/Microsoft.Authorization/roleDefinitions/0ab01a8-8aac-4efd-b8c2-3ee1fb270be8",
  "scope": "/subscriptions/<guid>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
  "type": "Microsoft.Authorization/roleAssignments"
}

Získat a ověřit informace o konfiguraci

S přiřazenými rolemi Azure pomocí příkazu AZ AKS Get-Credentials získáte definici kubeconfig pro váš cluster AKS. Následující příklad získá přihlašovací údaje správce , které fungují správně, pokud byl uživateli udělena role Správce clusteru:

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

Pak můžete použít příkaz zobrazení konfigurace kubectl a ověřit, zda kontext pro cluster ukazuje, že byly použity informace o konfiguraci správce:

$ kubectl config view

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Odebrat oprávnění role

Chcete-li odebrat přiřazení rolí, použijte příkaz AZ role Assignment Delete . Zadejte ID účtu a ID prostředku clusteru, jak Získá předchozí příkazy. Pokud jste roli přiřadili skupině místo uživatele, zadejte odpovídající ID objektu skupiny místo ID objektu účtu pro --assignee parametr:

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Další kroky

Pro zvýšení zabezpečení přístupu ke clusterům AKS Integrujte ověřování Azure Active Directory.