Använda Azure RBAC för Kubernetes-auktorisering
I dag kan du redan använda integrerad autentisering mellan Azure Active Directory (Azure AD) och AKS. När den här integreringen är aktiverad kan kunder använda Azure AD-användare, grupper eller tjänsthuvudnamn som ämnen i Kubernetes RBAC. Mer information finns här. Den här funktionen gör att du inte behöver hantera användaridentiteter och autentiseringsuppgifter för Kubernetes separat. Du måste dock fortfarande konfigurera och hantera Azure RBAC och Kubernetes RBAC separat. Mer information om autentisering och auktorisering med RBAC på AKS finns här.
Det här dokumentet beskriver en ny metod som möjliggör enhetlig hantering och åtkomstkontroll för Azure-resurser, AKS och Kubernetes-resurser.
Innan du börjar
Möjligheten att hantera RBAC för Kubernetes-resurser från Azure ger dig möjlighet att hantera RBAC för klusterresurserna antingen med hjälp av Azure eller interna Kubernetes-mekanismer. När azure AD-huvudkonton är aktiverade verifieras de exklusivt av Azure RBAC medan vanliga Kubernetes-användare och tjänstkonton verifieras exklusivt av Kubernetes RBAC. Mer information om autentisering och auktorisering med RBAC på AKS finns här.
Förutsättningar
- Kontrollera att du har Azure CLI version 2.24.0 eller senare
- Kontrollera att du har installerat kubectl v1.18.3+.
Begränsningar
- Kräver hanterad Azure AD-integrering.
- Använd kubectl v1.18.3+.
- Om du har CRD:er och skapar anpassade rolldefinitioner är det enda sättet att täcka CRD:er i dag att tillhandahålla
Microsoft.ContainerService/managedClusters/*/read. AKS arbetar med att tillhandahålla mer detaljerade behörigheter för CRD:er. För återstående objekt kan du använda de specifika API-grupperna, till exempel:Microsoft.ContainerService/apps/deployments/read. - Det kan ta upp till 5 minuter innan nya rolltilldelningar sprids och uppdateras av auktoriseringsservern.
- Kräver att Azure AD-klientorganisationen som har konfigurerats för autentisering är samma som klientorganisationen för prenumerationen som innehåller AKS-klustret.
Skapa ett nytt kluster med Azure RBAC och hanterad Azure AD-integrering
Skapa ett AKS-kluster med hjälp av följande CLI-kommandon.
Skapa en Azure-resursgrupp:
# Create an Azure resource group
az group create --name myResourceGroup --location westus2
Skapa AKS-klustret med hanterad Azure AD-integrering och Azure RBAC för Kubernetes-auktorisering.
# Create an AKS-managed Azure AD cluster
az aks create -g MyResourceGroup -n MyManagedCluster --enable-aad --enable-azure-rbac
Ett lyckat skapande av ett kluster med Azure AD-integrering och Azure RBAC för Kubernetes-auktorisering innehåller följande avsnitt i svarstexten:
"AADProfile": {
"adminGroupObjectIds": null,
"clientAppId": null,
"enableAzureRbac": true,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "****-****-****-****-****"
}
Integrera Azure RBAC i ett befintligt kluster
Anteckning
Om du vill använda Azure RBAC för Kubernetes-auktorisering Azure Active Directory integreringen vara aktiverad i klustret. Mer information finns i Azure Active Directory integration.
Om du vill lägga till Azure RBAC för Kubernetes-auktorisering i ett befintligt AKS-kluster använder du kommandot az aks update med flaggan enable-azure-rbac .
az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac
Om du vill ta bort Azure RBAC för Kubernetes-auktorisering från ett befintligt AKS-kluster använder du kommandot az aks update med flaggan disable-azure-rbac .
az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac
Skapa rolltilldelningar för användare att komma åt kluster
AKS har följande fyra inbyggda roller:
| Roll | Beskrivning |
|---|---|
| Azure Kubernetes Service RBAC-läsare | Tillåter skrivskyddade åtkomst för att se de flesta objekt i ett namnområde. Det tillåter inte visning av roller eller rollbindningar. Den här rollen tillåter inte visning, eftersom läsning av innehållet i hemligheter ger åtkomst till ServiceAccount-autentiseringsuppgifter i namnområdet, vilket skulle tillåta API-åtkomst som alla ServiceAccount i namnområdet (en form av Secrets behörighetseskalering) |
| Azure Kubernetes Service RBAC Writer | Tillåter läs-/skrivåtkomst till de flesta objekt i ett namnområde. Den här rollen tillåter inte visning eller ändring av roller eller rollbindningar. Den här rollen tillåter dock åtkomst till och körning av poddar som alla ServiceAccount i namnområdet, så den kan användas för att få API-åtkomstnivåer för alla Secrets ServiceAccount i namnområdet. |
| Azure Kubernetes Service RBAC-administratör | Tillåter administratörsåtkomst som är avsedd att beviljas inom ett namnområde. Tillåter läs-/skrivåtkomst till de flesta resurser i ett namnområde (eller klusteromfång), inklusive möjligheten att skapa roller och rollbindningar inom namnområdet. Den här rollen tillåter inte skrivåtkomst till resurskvoten eller till själva namnområdet. |
| Azure Kubernetes Service RBAC-klusteradministratör | Tillåter superanvändaråtkomst att utföra alla åtgärder på alla resurser. Den ger fullständig kontroll över alla resurser i klustret och i alla namnområden. |
Rolltilldelningar som är begränsade till hela AKS-klustret kan göras antingen på bladet Access Control (IAM) i klusterresursen på Azure Portal eller med hjälp av Azure CLI-kommandon enligt nedan:
# Get your AKS Resource ID
AKS_ID=$(az aks show -g MyResourceGroup -n MyManagedCluster --query id -o tsv)
az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
där <AAD-ENTITY-ID> kan vara ett användarnamn (till exempel ) eller till och med user@contoso.com ClientID för tjänstens huvudnamn.
Du kan också skapa rolltilldelningar som är begränsade till ett specifikt namnområde i klustret:
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
I dag måste rolltilldelningar som är begränsade till namnrymder konfigureras via Azure CLI.
Skapa anpassade rolldefinitioner
Du kan också välja att skapa en egen rolldefinition och sedan tilldela enligt ovan.
Nedan visas ett exempel på en rolldefinition som gör att en användare endast kan läsa distributioner och inget annat. Du kan kontrollera den fullständiga listan över möjliga åtgärder här.
Kopiera nedanstående json till en fil med namnet deploy-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>"
]
}
Ersätt <YOUR SUBSCRIPTION ID> med ID:t från din prenumeration, som du kan få genom att köra:
az account show --query id -o tsv
Nu kan vi skapa rolldefinitionen genom att köra kommandot nedan från mappen där du sparade deploy-view.json :
az role definition create --role-definition @deploy-view.json
Nu när du har din rolldefinition kan du tilldela den till en användare eller annan identitet genom att köra:
az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Använda Azure RBAC för Kubernetes-auktorisering med kubectl
Anteckning
Kontrollera att du har den senaste kubectl-versionen genom att köra kommandot nedan:
az aks install-cli
Du kan behöva köra den sudo med behörighet.
Nu när du har tilldelat önskad roll och behörighet. Du kan börja anropa Kubernetes-API:et, till exempel från kubectl .
För det här ändamålet hämtar vi först klustrets kubeconfig med hjälp av kommandot nedan:
az aks get-credentials -g MyResourceGroup -n MyManagedCluster
Viktigt
Du behöver den inbyggda Azure Kubernetes Service för klusteranvändaren för att utföra steget ovan.
Nu kan du använda kubectl för att till exempel visa en lista över noderna i klustret. Första gången du kör den måste du logga in, och efterföljande kommandon använder respektive åtkomsttoken.
kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11
aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11
aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Använda Azure RBAC för Kubernetes-auktorisering med kubelogin
För att avblockera ytterligare scenarier som icke-interaktiva inloggningar, äldre versioner eller användning av enkel inloggning över flera kluster utan att behöva logga in på ett nytt kluster, och beviljat att din token fortfarande är giltig, skapade AKS ett kubectl exec-plugin-program med namnet kubelogin .
Du kan använda den genom att köra:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig
Första gången måste du logga in interaktivt som med vanlig kubectl, men efteråt behöver du inte längre göra det, inte ens för nya Azure AD-kluster (så länge din token fortfarande är giltig).
kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11
aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11
aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Rensa
Tilldelning av ren roll
az role assignment list --scope $AKS_ID --query [].id -o tsv
Kopiera ID:t eller ID:t från alla tilldelningar som du har gjort och sedan.
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Rensa rolldefinition
az role definition delete -n "AKS Deployment Reader"
Ta bort kluster och resursgrupp
az group delete -n MyResourceGroup