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 Local

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 le libera de 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 Local 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.

  • Puede habilitar RBAC de Azure mediante la CLI de Azure o Azure Portal. Para usar la CLI de Azure, debe instalar las versiones más recientes de las extensiones de la CLI de Azure aksarc y connectedk8s . Tenga en cuenta que necesita la versión 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 tiene que instalar o actualizar la CLI de Azure, vea 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.

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

  • 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 comando az aksarc get-credentials, necesita el permiso Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, que se incluye en el rol de usuario de clúster de Azure Kubernetes Service Arc.
    • Para acceder al clúster de Kubernetes desde Azure Portal o desde cualquier lugar con un modo de proxy mediante el comando az connectedk8s proxy, necesita la acción Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que se incluye en el permiso de Usuario de clúster de Kubernetes habilitado en Azure Arc. Mientras tanto, debe comprobar que los agentes y la máquina que realizan el proceso de incorporación cumplen con los requisitos de red especificados en los requisitos de red de Kubernetes habilitados para Azure Arc.
  • 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 asignado al 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 add-admin-group 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 con soporte para RBAC de Azure para la autorización y una Microsoft Entra ID 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 --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.

Rol 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 asignaciones 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 la API de cualquier ServiceAccount en el espacio de nombres.
Administrador de Azure Arc Kubernetes Permite el acceso de administrador. Está diseñado para su concesión 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 vinculaciones de roles en el 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. Si se usa en RoleBinding, proporciona control total sobre todos los recursos del espacio de nombres del enlace de roles, incluido el propio espacio de nombres.

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

Primero, obtenga el $ARM-ID del 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 el $ARM_ID del primer paso y el assignee-object-id para este paso. assignee-object-id puede ser un identificador de Microsoft Entra o un identificador de cliente de un principal 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.

Creación de definiciones de roles personalizados

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 en modo de proxy con el comando az connectedk8s proxy, necesita el permiso Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, que está incluido en el permiso de la función 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 la configuración de conexión kubeconfig necesaria para comunicarse con el clúster desde cualquier lugar (incluso desde fuera del cortafuegos 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