Compartir a través de


Uso del control de acceso basado en rol (RBAC) de Azure para la autorización de Kubernetes

Se aplica a: AKS en Azure Stack HCI 23H2

Los administradores de infraestructura pueden usar el control de acceso basado en rol de Azure (RBAC de Azure) para controlar quién puede acceder al archivo kubeconfig y los permisos que tienen. Los operadores de Kubernetes pueden interactuar con clústeres de Kubernetes mediante la herramienta kubectl en función de los permisos especificados. La CLI de Azure proporciona una manera sencilla de obtener las credenciales de acceso y el archivo de configuración kubeconfig para conectarse a los clústeres de AKS mediante kubectl.

Al usar 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 rol de Kubernetes (RBAC de Kubernetes). Esta característica evita tener que administrar por separado las identidades de usuario y las credenciales de Kubernetes. Sin embargo, todavía debe configurar y administrar RBAC de Azure y RBAC de Kubernetes por separado.

En este artículo se describe cómo usar RBAC de Azure para la autorización del clúster de Kubernetes con el identificador de Entra de Microsoft y las asignaciones de roles de Azure.

Para obtener información general conceptual, consulte Azure RBAC para la autorización de Kubernetes para AKS habilitado por Azure Arc.

Antes de empezar

Asegúrese de que cumple los siguientes requisitos previos antes de empezar:

  • AKS en Azure Stack HCI 23H2 admite actualmente la habilitación de RBAC de Azure solo durante la creación del clúster de Kubernetes. No se puede habilitar RBAC de Azure después de crear el clúster de Kubernetes.

  • Instale la versión más reciente de las extensiones de la CLI de Azure aksarc y connectedk8s . Tenga en cuenta que debe ejecutar la versión 1.1.1.1 o posterior de la extensión aksarc para habilitar RBAC de Azure. Ejecute az --version para buscar la versión actual. Si necesita instalar o actualizar la CLI de Azure, consulte Instalación de la CLI de Azure.

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Si ya instaló la aksarc extensión, actualice la extensión a la versión más reciente:

    az extension update --name aksarc
    az extension update --name connectedk8s
    
  • Para interactuar con clústeres de Kubernetes, debe instalar kubectl y kubelogin.

  • Necesita los permisos siguientes para habilitar RBAC de Azure al crear un clúster de Kubernetes:

    • Para crear un clúster de Kubernetes, necesita el rol Colaborador de Azure Kubernetes Service Arc.
    • Para usar el --enable-azure-rbac parámetro , necesita el rol Administrador de control de acceso basado en roles para acceder al permiso Microsoft.Authorization/roleAssignments/write . Para más información, consulte Roles integrados en Azure.
    • Las nuevas asignaciones de roles pueden tardar hasta cinco minutos en propagarse y actualizarse mediante el servidor de autorización.
  • Una vez habilitado Azure RBAC, puede acceder al clúster de Kubernetes con los permisos especificados mediante el modo directo o el modo proxy.

    • Para acceder al clúster de Kubernetes directamente mediante el az aksarc get-credentials comando , necesita el permiso De usuario del rol de usuario de clúster de Azure Kubernetes Service Arc para acceder al clúster de Kubernetes/provisionedClusterInstances/listUserKubeconfig/action, que se incluye en el permiso de usuario de clúster de Azure Kubernetes Service Arc.
    • Para acceder al clúster de Kubernetes desde cualquier lugar con un modo de proxy mediante el az connectedk8s proxy comando o desde Azure Portal, necesita la acción Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action , que se incluye en el permiso de usuario de clúster de Kubernetes habilitado para Azure Arc. Mientras tanto, debe comprobar que los agentes y la máquina que realizan el proceso de incorporación cumplen los requisitos de red especificados en los requisitos de red habilitados para Azure Arc para Kubernetes.
  • Para usar kubectl, puede acceder a él mediante RBAC de Azure o el grupo de administración de AAD.

    • Para usar kubectl con Azure RBAC, necesita el rol Visor de Kubernetes de Azure Arc con ámbito del recurso de clúster conectado.
    • Para usar kubectl con el grupo de administración de AAD, no necesita ningún rol específico, pero debe asegurarse de que se encuentra en uno de los grupos de la lista de grupos de complementos del recurso de clúster conectado.

Paso 1: Creación de un clúster de Kubernetes habilitado para RBAC de Azure

Puede crear un clúster de Kubernetes habilitado para RBAC de Azure para la autorización y un identificador de Microsoft Entra para la autenticación.

az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --control-plane-ip $controlplaneIP --enable-azure-rbac

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster.

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

AKS habilitado por Arc proporciona los cinco roles integrados siguientes. Son similares a los roles integrados de Kubernetes con algunas diferencias, como admitir CRD. Consulte la lista completa de acciones permitidas por cada rol integrado de Azure.

Role Descripción
Usuario de clúster de Kubernetes habilitado para Azure Arc Permite recuperar el archivo kubeconfig basado en Cluster Connect para administrar clústeres desde cualquier lugar.
Visor de Azure Arc Kubernetes Permite el acceso de solo lectura para ver la mayoría de los objetos en un espacio de nombres.
No permite ver secretos, ya que el permiso de lectura en secretos permite el acceso a las credenciales de ServiceAccount en el espacio de nombres. Estas credenciales permiten a su vez el acceso a la API a través de ese valor serviceAccount (una forma de escalación de privilegios).
Escritor de Azure Arc Kubernetes Permite el acceso de lectura y escritura para ver la mayoría de los objetos en un espacio de nombres.
No permite ver ni modificar roles ni enlaces de roles. Sin embargo, este rol permite acceder a secretos y ejecutar pods como cualquier valor ServiceAccount en el espacio de nombres, por lo que se puede usar para obtener los niveles de acceso de API de cualquier valor serviceAccount en el espacio de nombres.
Administrador de Azure Arc Kubernetes Permite el acceso de administrador. Está pensado para concederse dentro de un espacio de nombres a través de RoleBinding. Si lo usa en RoleBinding, permite el acceso de lectura y escritura a la mayoría de los recursos de un espacio de nombres, 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ústeres de Azure Arc Kubernetes Permite el acceso de "superusuario" para ejecutar cualquier acción en cualquier recurso. Cuando se usa en ClusterRoleBinding, proporciona control total sobre todos los recursos del clúster y en todos los espacios de nombres. Cuando se usa en RoleBinding, proporciona control total sobre todos los recursos del espacio de nombres de enlace de roles, incluido el propio espacio de nombres.

Puede usar el az role assignment create comando para crear asignaciones de roles.

En primer lugar, obtenga para $ARM-ID el clúster de destino al que desea asignar un rol.

$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)

A continuación, use el az role assignment create comando para asignar roles al clúster de Kubernetes. Debe proporcionar desde $ARM_ID el primer paso y para assignee-object-id este paso. assignee-object-id puede ser un identificador de Microsoft Entra o un identificador de cliente de entidad de servicio.

En el ejemplo siguiente se asigna el rol Visor de Kubernetes de Azure Arc al clúster de Kubernetes:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID

En este ejemplo, el ámbito es el identificador de Azure Resource Manager del clúster. También puede ser el grupo de recursos que contiene el clúster de Kubernetes.

Configuración del control de acceso basado en roles con Azure Active Directory para la cuenta de Azure Cosmos DB

Puede elegir su propia definición de roles para usarla en las asignaciones de roles.

En el ejemplo siguiente se muestra una definición de roles que permite que un usuario solo lea las implementaciones. Para obtener más información, consulte la lista completa de acciones de datos que puede usar para crear una definición de roles. Para obtener más información sobre cómo crear un rol personalizado, consulte Pasos para crear un rol personalizado.

Para crear sus propias definiciones de roles personalizados, copie el siguiente objeto JSON en un archivo denominado custom-role.json. Reemplace el marcador de posición <subscription-id> por el identificador de la suscripción real. El rol personalizado usa una de las acciones de datos y le permite ver todas las implementaciones del ámbito (clúster o espacio de nombres) en el que se creó la asignación de roles.

{
    "Name": "AKS Arc Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Para obtener información sobre los roles personalizados y cómo crearlos, consulte Roles personalizados de Azure.

Cree la definición de roles mediante el az role definition create comando , estableciendo el --role-definition parámetro en el 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 az role assignment create comando :

az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID

Paso 3: Acceso al clúster de Kubernetes

Ahora puede acceder al clúster de Kubernetes con los permisos especificados mediante el modo directo o el modo proxy.

Acceso al clúster con kubectl (modo directo)

Para acceder al clúster de Kubernetes con los permisos especificados, el operador de Kubernetes necesita microsoft Entra kubeconfig, que puede obtener mediante el az aksarc get-credentials comando . Este comando proporciona acceso al kubeconfig basado en el administrador, así como a kubeconfig basado en el usuario. El archivo kubeconfig basado en el administrador contiene secretos y debe almacenarse y rotarse de forma segura periódicamente. Por otro lado, el identificador kubeconfig de Microsoft Entra basado en el usuario no contiene secretos y se puede distribuir a los usuarios que se conectan desde sus máquinas cliente.

Para ejecutar este comando de la CLI de Azure, necesita el permiso Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que se incluye en el permiso de usuario del clúster de Azure Kubernetes Service Arc:

az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>

Ahora 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, debe iniciar sesión, como se muestra en el ejemplo siguiente:

kubectl get nodes

Acceso al clúster desde un dispositivo cliente (modo proxy)

Para acceder al clúster de Kubernetes desde cualquier lugar con un modo de proxy mediante az connectedk8s proxy el comando , necesita el permiso de usuario de clúster de Kubernetes/connectedClusters/listClusterUserCredential/action, que se incluye en el permiso de usuario de clúster de Kubernetes habilitado para Azure Arc.

Ejecute los pasos siguientes en otro dispositivo cliente:

  1. Inicio de sesión con la autenticación de Microsoft Entra

  2. Obtenga el clúster connect kubeconfig necesario para comunicarse con el clúster desde cualquier lugar (incluso desde fuera del firewall que rodea al clúster):

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Nota:

    Este comando abre el proxy y bloquea el shell actual.

  3. En otra sesión de shell, use kubectl para enviar solicitudes al clúster:

    kubectl get pods -A
    

Ahora debería mostrarse una respuesta del clúster que contiene la lista de todos los pods en el espacio de nombres default.

Para más información, consulte Acceso al clúster desde un dispositivo cliente.

Limpieza de recursos

Eliminación de asignaciones de roles

# List role assignments
az role assignment list --scope $ARM_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 Arc Deployment Reader"

Pasos siguientes