Azure RBAC gebruiken voor Kubernetes-autorisatie

Vandaag de dag kunt u al gebruikmaken van geïntegreerde verificatie tussen Azure Active Directory (Azure AD) en AKS. Wanneer deze integratie is ingeschakeld, kunnen klanten Azure AD-gebruikers, -groepen of -service-principals gebruiken als onderwerpen in Kubernetes RBAC. Kijk hier voor meer informatie. Met deze functie kunt u gebruikersidentiteiten en -referenties voor Kubernetes niet afzonderlijk beheren. U moet Azure RBAC en Kubernetes RBAC echter nog steeds afzonderlijk instellen en beheren. Zie hier voor meer informatie over verificatie en autorisatie met RBAC inAKS.

Dit document bevat een nieuwe benadering waarmee geïntegreerd beheer en toegangsbeheer voor Azure-resources, AKS en Kubernetes-resources mogelijk is.

Voordat u begint

De mogelijkheid om RBAC voor Kubernetes-resources vanuit Azure te beheren, biedt u de keuze om RBAC te beheren voor de clusterbronnen met behulp van Azure- of systeemeigen Kubernetes-mechanismen. Wanneer deze functie is ingeschakeld, worden Azure AD-principals uitsluitend gevalideerd door Azure RBAC, terwijl gewone Kubernetes-gebruikers en serviceaccounts uitsluitend worden gevalideerd door Kubernetes RBAC. Zie hier voor meer informatie over verificatie en autorisatie met RBAC inAKS.

Vereisten

Beperkingen

  • Vereist beheerde Azure AD-integratie.
  • Gebruik kubectl v1.18.3+.
  • Als u CRD's hebt en aangepaste roldefinities maakt, is de enige manier om crd's op dit moment te behandelen. Microsoft.ContainerService/managedClusters/*/read AKS werkt aan meer gedetailleerde machtigingen voor CRD's. Voor de resterende objecten kunt u de specifieke API-groepen gebruiken, bijvoorbeeld: Microsoft.ContainerService/apps/deployments/read .
  • Het kan 5 minuten duren voor nieuwe roltoewijzingen zijn doorgegeven en bijgewerkt door de autorisatieserver.
  • Vereist dat de Azure AD-tenant die is geconfigureerd voor verificatie hetzelfde is als de tenant voor het abonnement dat het AKS-cluster bevat.

Een nieuw cluster maken met behulp van Azure RBAC en beheerde Azure AD-integratie

Maak een AKS-cluster met behulp van de volgende CLI-opdrachten.

Een Azure-resourcegroep maken:

# Create an Azure resource group
az group create --name myResourceGroup --location westus2

Maak het AKS-cluster met beheerde Azure AD-integratie en Azure RBAC voor Kubernetes-autorisatie.

# Create an AKS-managed Azure AD cluster
az aks create -g MyResourceGroup -n MyManagedCluster --enable-aad --enable-azure-rbac

Een cluster met Azure AD-integratie en Azure RBAC voor Kubernetes-autorisatie is gemaakt met de volgende sectie in de antwoordtekst:

"AADProfile": {
    "adminGroupObjectIds": null,
    "clientAppId": null,
    "enableAzureRbac": true,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "****-****-****-****-****"
  }

Azure RBAC integreren in een bestaand cluster

Notitie

Als u Azure RBAC voor Kubernetes-autorisatie wilt gebruiken, moet Azure Active Directory integratie in uw cluster zijn ingeschakeld. Zie integratie Azure Active Directory voor meer informatie.

Als u Azure RBAC voor Kubernetes-autorisatie wilt toevoegen aan een bestaand AKS-cluster, gebruikt u de opdracht az aks update met de vlag enable-azure-rbac .

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

Als u Azure RBAC voor Kubernetes-autorisatie wilt verwijderen uit een bestaand AKS-cluster, gebruikt u de opdracht az aks update met de vlag disable-azure-rbac .

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Roltoewijzingen maken voor gebruikers voor toegang tot het cluster

AKS biedt de volgende vier ingebouwde rollen:

Rol Beschrijving
Azure Kubernetes Service RBAC-lezer Hiermee staat u alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Het weergeven van rollen of rolbindingen is niet toegestaan. Deze rol staat het weergeven van niet toe, omdat het lezen van de inhoud van Geheimen toegang biedt tot ServiceAccount-referenties in de naamruimte, waardoor API-toegang mogelijk is als elk ServiceAccount in de naamruimte (een vorm van escalatie van Secrets bevoegdheden)
Azure Kubernetes Service RBAC Writer Hiermee staat u lees-/schrijftoegang toe tot de meeste objecten in een naamruimte. Deze rol staat het weergeven of wijzigen van rollen of rolbindingen niet toe. Met deze rol kunt u echter pods openen en uitvoeren als elk serviceaccount in de naamruimte, zodat deze kan worden gebruikt om de API-toegangsniveaus van elk ServiceAccount in de naamruimte Secrets te verkrijgen.
Azure Kubernetes Service RBAC-beheerder Hiermee staat u beheerderstoegang toe, bedoeld om te worden verleend binnen een naamruimte. Hiermee staat u lees-/schrijftoegang toe tot de meeste resources in een naamruimte (of clusterbereik), met inbegrip van de mogelijkheid om rollen en rolbindingen binnen de naamruimte te maken. Deze rol staat geen schrijftoegang toe tot resourcequota of tot de naamruimte zelf.
Azure Kubernetes Service RBAC-clusterbeheerder Hiermee staat u supergebruikerstoegang toe om acties uit te voeren op elke resource. Het biedt volledige controle over elke resource in het cluster en in alle naamruimten.

Roltoewijzingen die zijn beperkt tot het hele AKS-cluster, kunnen worden uitgevoerd op de blade Access Control (IAM) van de clusterresource op Azure Portal of met behulp van Azure CLI-opdrachten zoals hieronder wordt weergegeven:

# 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

waarbij <AAD-ENTITY-ID> een gebruikersnaam kan zijn (bijvoorbeeld ) of zelfs de user@contoso.com ClientID van een service-principal.

U kunt ook roltoewijzingen maken die zijn gericht op een specifieke naamruimte in het cluster:

az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>

Op dit moment moeten roltoewijzingen die zijn beperkt tot naamruimten, worden geconfigureerd via Azure CLI.

Aangepaste roldefinities maken

Desgewenst kunt u ervoor kiezen om uw eigen roldefinitie te maken en vervolgens toe te wijzen zoals hierboven.

Hieronder vindt u een voorbeeld van een roldefinitie waarmee een gebruiker alleen implementaties en niets anders kan lezen. U kunt hier de volledige lijst met mogelijke acties controleren.

Kopieer de onderstaande json naar een bestand met de naam 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>"
    ]
}

Vervang <YOUR SUBSCRIPTION ID> door de id van uw abonnement, die u kunt krijgen door het volgende uit te laten:

az account show --query id -o tsv

Nu kunnen we de roldefinitie maken door de onderstaande opdracht uit te voeren vanuit de map waarin u hebt deploy-view.json opgeslagen:

az role definition create --role-definition @deploy-view.json 

Nu u de roldefinitie hebt, kunt u deze toewijzen aan een gebruiker of een andere identiteit door het volgende uit te doen:

az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Azure RBAC gebruiken voor Kubernetes-autorisatie met kubectl

Notitie

Zorg ervoor dat u de meest recente kubectl hebt door de onderstaande opdracht uit te voeren:

az aks install-cli

Mogelijk moet u deze uitvoeren met sudo bevoegdheden.

Nu u de gewenste rol en machtigingen hebt toegewezen. U kunt beginnen met het aanroepen van de Kubernetes-API, bijvoorbeeld vanuit kubectl .

Hiervoor halen we eerst de kubeconfig van het cluster op met behulp van de onderstaande opdracht:

az aks get-credentials -g MyResourceGroup -n MyManagedCluster

Belangrijk

U hebt de ingebouwde Azure Kubernetes Service clustergebruiker nodig om de bovenstaande stap uit te voeren.

U kunt nu kubectl gebruiken om bijvoorbeeld de knooppunten in het cluster weer te geven. De eerste keer dat u de opdracht hebt uitgevoerd, moet u zich aanmelden en voor volgende opdrachten wordt het betreffende toegangs token gebruikt.

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

Azure RBAC gebruiken voor Kubernetes-autorisatie met kubelogin

Als u aanvullende scenario's wilt deblokkeren, zoals niet-interactieve aanmeldingen, oudere versies of het gebruik van eenmalige aanmelding voor meerdere clusters zonder dat u zich hoeft aan te melden bij een nieuw cluster. Als u weet dat uw token nog geldig is, heeft AKS een exec-invoegcode gemaakt met de naam kubectl kubelogin .

U kunt deze gebruiken door het volgende uit te laten:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

De eerste keer moet u zich interactief aanmelden, zoals bij normale kubectl, maar daarna hoeft u zich niet meer aan te melden, zelfs niet voor nieuwe Azure AD-clusters (zolang uw token nog geldig is).

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

Opschonen

Roltoewijzing ops schonen

az role assignment list --scope $AKS_ID --query [].id -o tsv

Kopieer de id of id's van alle toewijzingen die u hebt gedaan en vervolgens.

az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Roldefinitie ops schonen

az role definition delete -n "AKS Deployment Reader"

Cluster en resourcegroep verwijderen

az group delete -n MyResourceGroup

Volgende stappen

  • Meer informatie over AKS-verificatie, autorisatie, Kubernetes RBAC en Azure RBAC vindt u hier.
  • Lees hier meer over Azure RBAC.
  • Lees hier meer over alle acties die u kunt gebruiken om aangepaste Azure-rollen voor Kubernetes-autorisatie te definiëren.