Uso del control de acceso basados en rol de Azure para definir el acceso al archivo de configuración de Kubernetes en Azure Kubernetes Service (AKS)

Puede interactuar con los clústeres de Kubernetes mediante la herramienta kubectl. La CLI de Azure proporciona una manera fácil de obtener las credenciales de acceso y el archivo de configuración kubeconfig para conectarse a los clústeres de AKS mediante kubectl. Puede usar el control de acceso basado en rol de Azure (Azure RBAC) para limitar quién puede obtener acceso al archivo kubeconfig y los permisos que tienen.

En este artículo se muestra cómo asignar roles de Azure que limiten quién puede obtener la información de configuración para un clúster de AKS.

Antes de empezar

  • En este artículo se supone que ya tiene un clúster de AKS. Si necesita un clúster de AKS, cree uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
  • En este artículo, también se requiere que ejecute la versión 2.0.65 de la CLI de Azure o una versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Permisos disponibles para roles de clúster

Al interactuar con un clúster de AKS mediante la herramienta kubectl, un archivo de configuración, denominado kubeconfig, define la información de conexión del clúster. Este archivo de configuración se almacena normalmente en ~/.kube/config. En este archivo kubeconfig se pueden definir varios clústeres. Puede cambiar entre clústeres mediante el comando kubectl config use-context.

El comando az aks get-credentials permite obtener las credenciales de acceso para un clúster de AKS y las combina en el archivo kubeconfig. Puede usar RBAC de Azure para controlar el acceso a estas credenciales. Estos roles de Azure permiten definir quién puede recuperar el archivo kubeconfig y los permisos correspondientes en el clúster.

Hay dos roles de Azure que se pueden aplicar a un usuario o grupo de Microsoft Entra:

  • Rol de administrador de clúster de Azure Kubernetes Service

  • Rol de usuario de clúster de Azure Kubernetes Service

Nota:

En los clústeres que usan Microsoft Entra ID, los usuarios con el rol clusterUser tienen un archivo kubeconfig vacío que solicita un inicio de sesión. Una vez que haya iniciado sesión, los usuarios tienen acceso en función de su configuración de grupo o usuario de Microsoft Entra. Los usuarios con el rol clusterAdmin tienen acceso de administrador.

En los clústeres que no usan Microsoft Entra ID, el rol clusterUser tiene el mismo efecto de rol clusterAdmin.

Asignación de permisos de rol a un usuario o un grupo

Para asignar uno de los roles disponibles, debe obtener el identificador de recurso del clúster de AKS y el identificador de la cuenta de usuario o grupo de Microsoft Entra mediante los pasos siguientes:

  1. Obtienen el identificador de recurso del clúster mediante el comando az aks show para el clúster denominado myAKSCluster del grupo de recursos myResourceGroup. Proporcione los nombres de su propio clúster y grupo de recursos según proceda.
  2. Use los comandos az account show y az ad user show para obtener el id. de usuario.
  3. Asignación de un rol mediante el comando az role assignment create.

En el ejemplo siguiente se asigna el rol de administrador de clústeres de Azure Kubernetes Service a una cuenta de usuario individual:

# 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"

Si desea asignar permisos a un grupo de Microsoft Entra, actualice el parámetro --assignee que se muestra en el ejemplo anterior con el id. de objeto del grupo en lugar del usuario.

Para obtener el id. de objeto de un grupo, use el comando az ad group show. El comando siguiente obtiene el identificador de objeto del grupo de Microsoft Entra denominado appdev:

az ad group show --group appdev --query objectId -o tsv

Importante

En algunos casos, como los usuarios invitados de Microsoft Entra, el user.name de la cuenta es diferente del userPrincipalName.

$ 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

En este caso, establezca el valor de ACCOUNT_UPN en el userPrincipalName del usuario de Microsoft Entra. Por ejemplo, si la cuenta user.name es user@contoso.com, esta acción sería parecida al ejemplo siguiente:

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

Obtención y verificación de la información de configuración

Una vez asignados los roles, use el comando az aks get-credentials para obtener la definición de kubeconfig para el clúster de AKS. En el ejemplo siguiente se obtienen las credenciales --admin, que funcionan correctamente si se ha concedido al usuario el rol Cluster Admin:

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

A continuación, puede usar el comando kubectl config view para comprobar que el contexto del clúster muestra que se ha aplicado la información de configuración del administrador.

$ kubectl config view

El resultado debería ser similar al ejemplo siguiente:

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

Eliminación de permisos de rol

Para quitar asignaciones de roles, use el comando az role assignment delete. Especifique el id. de la cuenta y del recurso de clúster que obtuvo con los pasos anteriores. Si ha asignado el rol a un grupo en lugar de a un usuario, especifique el identificador del objeto de grupo adecuado en lugar del objeto de cuenta para el parámetro --assignee.

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

Pasos siguientes

Para mejorar la seguridad sobre el acceso a los clústeres de AKS, integre la autenticación de Microsoft Entra.