Uso del control de acceso basado en roles de Azure para la autorización de Kubernetes

Al aprovechar la autenticación integrada entre Microsoft Entra ID y AKS, puede usar usuarios, grupos o entidades de servicio de Microsoft Entra como sujetos en el control de acceso basado en roles de Kubernetes (Kubernetes RBAC). Esta característica evita tener que administrar por separado las identidades de usuario y las credenciales de Kubernetes. Sin embargo, todavía tiene que configurar y administrar Azure RBAC y Kubernetes por separado.

En este artículo se explica cómo usar el Azure RBAC para la autorización de Kubernetes, lo que permite la administración unificada y el control de acceso entre recursos de Azure, AKS y recursos de Kubernetes. Para obtener más información, consulte Autorización de Azure RBAC para Kubernetes.

Antes de empezar

  • Es preciso que esté instalada y configurada la versión 2.24.0 de la CLI de Azure, o cualquier otra posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • Necesita kubectl, con la versión 1.18.3 como mínimo.
  • Debe habilitar la integración administrada de Microsoft Entra en el clúster para poder agregar el Azure RBAC para la autorización de Kubernetes. Si necesita habilitar la integración administrada de Microsoft Entra, consulte Usar Microsoft Entra ID en AKS.
  • Si tiene CRDs y está realizando definiciones de roles personalizadas, la única manera de abarcar CRDs hoy es usar Microsoft.ContainerService/managedClusters/*/read. Para el resto de objetos, puede usar los grupos de API específicos, como Microsoft.ContainerService/apps/deployments/read.
  • Las nuevas asignaciones de roles pueden tardar hasta cinco minutos en propagarse y actualizarse mediante el servidor de autorización.
  • La autorización de Azure RBAC para Kubernetes requiere que el inquilino de Microsoft Entra configurado para la autenticación sea el mismo que el inquilino de la suscripción que alberga su clúster AKS.

Creación de un nuevo clúster de AKS con la integración administrada de Microsoft Entra y Azure RBAC para la autorización de Kubernetes

Cree un grupo de recursos de Azure con el comando az group create.

az group create --name myResourceGroup --location westus2

Cree el clúster de AKS con la integración administrada de Microsoft Entra y Azure RBAC para la autorización de Kubernetes con el comando az aks create.

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

El resultado será similar al siguiente ejemplo:

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

Habilitación de Azure RBAC en un clúster de AKS existente

Para agregar la autorización de Azure RBAC para Kubernetes a un clúster de AKS existente, use el comando az aks update con la marca enable-azure-rbac.

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

Deshabilitación de Azure RBAC para la autorización de Kubernetes desde un clúster de AKS

Para quitar la autorización de Azure RBAC para Kubernetes desde un clúster de AKS existente, use el comando az aks update con la marca disable-azure-rbac.

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

Creación de asignaciones de roles para que los usuarios accedan al clúster

AKS proporciona los siguientes roles integrados:

Rol Descripción
Lector de Azure Kubernetes Service RBAC Permite el acceso de solo lectura para ver la mayoría de los objetos en un espacio de nombres. No permite la visualización de roles o enlaces de roles. Este rol no permite visualización de Secrets, ya que leer el contenido de Secretos permite el acceso a las credenciales de ServiceAccount en el espacio de nombres, lo que permitiría el acceso a la API como cualquier ServiceAccount en el espacio de nombres (una forma de elevación de privilegios).
Escritor de Azure Kubernetes Service RBAC Permite el acceso de lectura y escritura para ver la mayoría de los objetos en un espacio de nombres. Este rol no permite la visualización o modificación de roles o enlaces de roles. Sin embargo, este rol permite acceder a Secrets y ejecutar pods como cualquier ServiceAccount en el espacio de nombres, por lo que se puede usar para obtener los niveles de acceso de la API de cualquier ServiceAccount en el espacio de nombres.
Administrador de Azure Kubernetes Service RBAC Permite el acceso de administrador, diseñado para su concesión dentro de un espacio de nombres. Permite el acceso de lectura y escritura a la mayoría de los recursos de un espacio de nombres (o ámbito de clúster), incluida la capacidad de crear roles y enlaces de roles dentro del espacio de nombres. Este rol no permite el acceso de escritura a la cuota de recursos o al espacio de nombres en sí.
Administrador de clúster de Azure Kubernetes Service RBAC Permite el acceso de superusuario para realizar cualquier acción en cualquier recurso. Proporciona control total sobre todos los recursos del clúster y en todos los espacios de nombres.

Las asignaciones de roles que tienen como ámbito todo el clúster de AKS se pueden realizar en la hoja Access Control (IAM) del recurso de clúster en Azure Portal o mediante los siguientes comandos de la CLI de Azure:

Obtenga el id. de recurso de AKS mediante el comando az aks show.

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Cree una asignación de roles con el comando az role assignment create. <AAD-ENTITY-ID> puede ser un nombre de usuario o el id. de cliente de una entidad de servicio.

az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Nota

Puede crear las asignaciones de roles del lector de RBAC de Azure Kubernetes Service y del escritor de Azure Kubernetes Service cuyo ámbito sea un espacio de nombres específico dentro del clúster mediante el comando az role assignment create y establecer el ámbito en el espacio de nombres deseado.

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

Nota:

En Azure Portal, después de crear asignaciones de roles con ámbito en un espacio de nombres deseado, no podrá ver "asignaciones de roles" para el espacio de nombres en un ámbito. Puede encontrarlo mediante el az role assignment listcomando o asignaciones de roles de lista para un usuario o grupo, al que asignó el rol.

az role assignment list --scope $AKS_ID/namespaces/<namespace-name>

Creación de definición de roles personalizados

El siguiente ejemplo de una definición de roles personalizados permite a un usuario leer solo las implementaciones y nada más. Para obtener la lista completa de posibles acciones, consulte Operaciones de Microsoft.ContainerService.

Para crear sus propias definiciones de roles personalizados, copie el siguiente archivo, reemplace <YOUR SUBSCRIPTION ID> por su propio id. de suscripción y guárdelo como 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>"
    ]
}

Cree la definición de roles mediante el comando az role definition create y establezca el --role-definition al archivo deploy-view.json que creó en el paso anterior.

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

Asigne la definición de roles a un usuario u otra identidad mediante el comando az role assignment create.

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

Uso de Azure RBAC para la autorización de Kubernetes con kubectl.

Asegúrese de que tiene el rol integrado de usuario de clúster de Azure Kubernetes Service y, a continuación, obtenga la kubeconfig del clúster de AKS mediante el comando az aks get-credentials.

az aks get-credentials -g myResourceGroup -n myManagedCluster

Puede usar kubectl para administrar el clúster. Por ejemplo, puede hacer una lista de los nodos de su clúster con kubectl get nodes. La primera vez que lo ejecute, deberá iniciar sesión, como se muestra en el siguiente ejemplo:

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

Uso de Azure RBAC para la autorización de Kubernetes con kubelogin.

AKS creó el complemento kubelogin para ayudar a desbloquear escenarios adicionales, como inicios de sesión no interactivos, versiones kubectl anteriores o aprovechar el inicio de sesión único en varios clústeres sin necesidad de iniciar sesión en un nuevo clúster.

Para usar el complemento kubelogin ejecutando el siguiente comando:

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

De forma similar a kubectl, debe iniciar sesión la primera vez que la ejecute, como se muestra en el siguiente ejemplo:

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

Limpieza de recursos

Eliminación de asignaciones de roles

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

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

Eliminación de definiciones de roles

az role definition delete -n "AKS Deployment Reader"

Eliminación de un grupo de recursos y un clúster de AKS

az group delete -n myResourceGroup

Pasos siguientes

Para obtener más información sobre la autenticación de AKS, la autorización, Kubernetes RBAC y Azure RBAC, consulte: