Integración de Azure Active Directory administrado por AKS

La integración de Azure AD administrado por AKS simplifica el proceso de integración de Azure AD. Anteriormente, los usuarios debían crear una aplicación cliente y otra de servidor, y el inquilino de Azure AD debía conceder permisos de lectura de directorio. En la nueva versión, el proveedor de recursos de AKS administra las aplicaciones de cliente y servidor.

Introducción a la autenticación de Azure AD

Los administradores de clústeres pueden configurar el control de acceso basado en rol de Kubernetes (RBAC de Kubernetes) en función de la identidad de un usuario o la pertenencia a grupos de directorios. La autenticación de Azure AD se proporciona a los clústeres de AKS con OpenID Connect. OpenID Connect es una capa de identidad creada basándose en el protocolo OAuth 2.0. Puede encontrar más información sobre OpenID Connect en la documentación de OpenID Connect.

Obtenga más información sobre el flujo de integración de Azure AD en la documentación de los conceptos de la integración de Azure Active Directory.

Limitaciones

  • No se puede deshabilitar la integración de Azure AD administrados por AKS.
  • No se admite cambiar un clúster integrado de Azure AD administrado por AKS por AAD heredado
  • Los clústeres sin RBAC de Kubernetes habilitado no se admiten para la integración de Azure AD administrado por AKS.

Prerrequisitos

  • La versión 2.29.0 de la CLI de Azure, o cualquier versión posterior.
  • Kubectl con la versión 1.18.1, como mínimo, o kubelogin
  • Si usa helm, versión mínima de helm 3.3.

Importante

Debe usar Kubectl con la versión 1.18.1, como mínimo, o kubelogin. La diferencia entre las versiones secundarias de Kubernetes y kubectl no debe ser superior a una versión. Si no usa la versión correcta, observará problemas de autenticación.

Para instalar kubectl y kubelogin, use los siguientes comandos:

sudo az aks install-cli
kubectl version --client
kubelogin --version

Siga estas instrucciones para otros sistemas operativos.

Antes de empezar

Para el clúster, necesita un grupo de Azure AD. Este grupo se registrará como grupo de administración en el clúster para conceder permisos de administrador de clúster. Puede usar un grupo de Azure AD existente o crear uno nuevo. Anote el identificador de objeto del grupo de Azure AD.

# List existing groups in the directory
az ad group list --filter "displayname eq '<group-name>'" -o table

Para crear un grupo de Azure AD para los administradores de clúster, use el comando siguiente:

# Create an Azure AD group
az ad group create --display-name myAKSAdminGroup --mail-nickname myAKSAdminGroup

Creación de un clúster de AKS con Azure AD habilitado

Cree un clúster de AKS con los comandos de la CLI siguientes.

Crear un grupo de recursos de Azure:

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

Cree un clúster de AKS y habilite el acceso de administración para el grupo de Azure AD

# Create an AKS-managed Azure AD cluster
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]

Un clúster de Azure AD administrado por AKS creado correctamente contiene la sección siguiente en el cuerpo de la respuesta

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Una vez creado el clúster, puede empezar a acceder a él.

Acceso a un clúster habilitado para Azure AD

Antes de acceder al clúster mediante un grupo definido de Azure AD, necesitará el rol integrado de usuario de clúster de Azure Kubernetes Service.

Obtenga las credenciales de usuario para acceder al clúster:

 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster

Siga las instrucciones para iniciar sesión.

Use el comando "kubectl get nodes" para ver los nodos del clúster:

kubectl get nodes

NAME                       STATUS   ROLES   AGE    VERSION
aks-nodepool1-15306047-0   Ready    agent   102m   v1.15.10
aks-nodepool1-15306047-1   Ready    agent   102m   v1.15.10
aks-nodepool1-15306047-2   Ready    agent   102m   v1.15.10

Configure el control de acceso basado en rol de Azure (RBAC) para configurar grupos de seguridad adicionales para los clústeres.

Solución de problemas de acceso con Azure AD

Importante

En los pasos que se describen a continuación se omite la autenticación de grupo de Azure AD normal. Úselos únicamente en caso de emergencia.

Si está bloqueado permanentemente al no tener acceso a un grupo de Azure AD válido con acceso al clúster, de todos modos puede obtener las credenciales de administrador para acceder directamente al clúster.

Para llevar a cabo estos pasos, necesitará tener acceso al rol integrado Administrador de clúster de Azure Kubernetes Service.

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

Habilitación de la integración de Azure AD administrados por AKS en el clúster existente

Puede habilitar la integración de Azure AD administrado por AKS en el clúster habilitado para RBAC de Kubernetes existente. Asegúrese de establecer el grupo de administradores para mantener el acceso al clúster.

az aks update -g MyResourceGroup -n MyManagedCluster --enable-aad --aad-admin-group-object-ids <id-1> [--aad-tenant-id <id>]

Una activación correcta de un clúster de Azure AD administrado por AKS contiene la sección siguiente en el cuerpo de la respuesta:

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Vuelva a descargar las credenciales de usuario para acceder al clúster; para ello, siga los pasos que se indican aquí.

Actualización a la integración de Azure AD administrado por AKS

Si el clúster usa la integración de Azure AD heredada, puede actualizar a la integración de Azure AD administrado por AKS.

az aks update -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]

Una migración correcta de un clúster de Azure AD administrado por AKS contiene la sección siguiente en el cuerpo de la respuesta:

"AADProfile": {
    "adminGroupObjectIds": [
      "5d24****-****-****-****-****afa27aed"
    ],
    "clientAppId": null,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "72f9****-****-****-****-****d011db47"
  }

Actualice kubeconfig para acceder al clúster; para ello, siga los pasos que se indican aquí.

Inicio de sesión no interactivo con kubelogin

Hay algunos escenarios no interactivos, como las canalizaciones de integración continua, que no están disponibles actualmente con kubectl. Puede usar kubelogin para acceder al clúster con el inicio de sesión no interactivo de la entidad de servicio.

Deshabilitación de cuentas locales

Al implementar un clúster de AKS, las cuentas locales se habilitan de forma predeterminada. Incluso al habilitar la integración de RBAC o de Azure Active Directory, el acceso a --admin sigue existiendo, básicamente como una opción de puerta trasera no auditable. Teniendo esto en cuenta, AKS ofrece a los usuarios la capacidad de deshabilitar las cuentas locales a través de una marca, disable-local-accounts. También se ha agregado un campo, properties.disableLocalAccounts, a la API de clúster administrado para indicar si la característica se ha habilitado en el clúster.

Nota

En los clústeres en los que está habilitada la integración con Azure AD, los usuarios que pertenezcan a un grupo especificado por aad-admin-group-object-ids podrán acceder a través de credenciales que no sean de administrador. En clústeres sin la integración con Azure AD habilitada y properties.disableLocalAccounts establecido en true, se producirá un error al obtener las credenciales de usuario y administrador.

Nota

Después de deshabilitar los usuarios de cuentas locales en un clúster de AKS ya existente en el que los usuarios podrían haber usado cuentas locales, el administrador debe rotar los certificados de clúster para revocar los certificados a los que esos usuarios podrían tener acceso. Si se trata de un nuevo clúster, no se requiere ninguna acción.

Creación de un clúster sin cuentas locales

Para crear un clúster de AKS sin ninguna cuenta local, use el comando az aks create con la marca disable-local-accounts:

az aks create -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts

En la salida, confirme que se han deshabilitado las cuentas locales; para ello, compruebe que el campo properties.disableLocalAccounts está establecido en true:

"properties": {
    ...
    "disableLocalAccounts": true,
    ...
}

Al intentar obtener las credenciales de administrador, aparecerá un mensaje de error que indica que la característica impide el acceso:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Operation failed with status: 'Bad Request'. Details: Getting static credential is not allowed because this cluster is set to disable local accounts.

Deshabilitación de cuentas locales en un clúster existente

Para deshabilitar las cuentas locales en un clúster de AKS existente, use el comando az aks update con la marca disable-local-accounts:

az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts

En la salida, confirme que se han deshabilitado las cuentas locales; para ello, compruebe que el campo properties.disableLocalAccounts está establecido en true:

"properties": {
    ...
    "disableLocalAccounts": true,
    ...
}

Al intentar obtener las credenciales de administrador, aparecerá un mensaje de error que indica que la característica impide el acceso:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Operation failed with status: 'Bad Request'. Details: Getting static credential is not allowed because this cluster is set to disable local accounts.

Rehabilitación de cuentas locales en un clúster existente

AKS también ofrece la posibilidad de volver a habilitar las cuentas locales en un clúster existente con la marca enable-local:

az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --enable-local

En la salida, confirme que las cuentas locales se han vuelto a habilitar; para ello, compruebe que el campo properties.disableLocalAccounts está establecido en false:

"properties": {
    ...
    "disableLocalAccounts": false,
    ...
}

El resultado del intento de obtener las credenciales de administrador será satisfactorio:

az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin

Merged "<cluster-name>-admin" as current context in C:\Users\<username>\.kube\config

Uso de acceso condicional con Azure AD y AKS

Al integrar Azure AD con el clúster de AKS, también puede usar el acceso condicional para controlar el acceso al clúster.

Nota

El acceso condicional de Azure AD es una capacidad de Azure AD Premium.

Para crear una directiva de acceso condicional de ejemplo para usarla con AKS, complete los siguientes pasos:

  1. En la parte superior de Azure Portal, busque y seleccione Azure Active Directory.
  2. En el menú de Azure Active Directory del lado izquierdo, seleccione Aplicaciones empresariales.
  3. En el menú de aplicaciones empresariales del lado izquierdo, seleccione Acceso condicional.
  4. En el menú de acceso condicional del lado izquierdo, seleccione Directivas y después Nueva directiva. Incorporación de una directiva de acceso condicional
  5. Escriba un nombre para la directiva, como aks-policy.
  6. Haga clic en Usuarios y grupos y, luego, debajo de Incluir seleccione Seleccionar usuarios y grupos. Elija los usuarios y grupos en los que quiere aplicar la directiva. En este ejemplo, elija el mismo grupo de Azure AD que tiene acceso de administración al clúster. Selección de usuarios o grupos para aplicar la directiva de acceso condicional
  7. Seleccione Aplicaciones en la nube o acciones y, después, debajo de Incluir, escoja Seleccionar aplicaciones. Busque Azure Kubernetes Service y seleccione Azure Kubernetes Service AAD Server. Selección de Azure Kubernetes Service AD Server para aplicar la directiva de acceso condicional
  8. En Controles de acceso, seleccione Conceder. Seleccione Conceder acceso y después Requerir que el dispositivo esté marcado como compatible. Selección para permitir solo los dispositivos compatibles con la directiva de acceso condicional
  9. En Habilitar directiva, seleccione Activar y, después, Crear. Habilitación de la directiva de acceso condicional

Obtenga las credenciales de usuario para acceder al clúster, por ejemplo:

 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster

Siga las instrucciones para iniciar sesión.

Use el comando kubectl get nodes para ver los nodos del clúster:

kubectl get nodes

Siga las instrucciones para iniciar sesión de nuevo. Observe que hay un mensaje de error que indica que inició sesión correctamente, pero el administrador requiere que el dispositivo que solicita acceso esté administrado por su instancia de Azure AD para acceder al recurso.

En Azure Portal, vaya a Azure Active Directory, seleccione Aplicaciones empresariales y, después, en Actividad seleccione Inicios de sesión. Observe que hay una entrada en la parte superior con un valor de Estado de Error y un Acceso condicionalCorrecto. Seleccione la entrada y, a continuación, seleccione Acceso condicional en Detalles. Observe que se muestra su directiva de acceso condicional.

Error en la entrada de inicio de sesión debido a la directiva de acceso condicional

Configuración del acceso Just-In-Time al clúster con Azure AD y AKS

Otra opción para el control de acceso al clúster es usar Privileged Identity Management (PIM) con las solicitudes Just-in-Time.

Nota

PIM es una funcionalidad de Azure AD Premium que requiere una SKU P2 prémium. Para más información sobre las SKU de Azure AD, consulte la guía de precios.

Para integrar las solicitudes de acceso Just-in-Time con un clúster de AKS mediante la integración de Azure AD administrado por AKS, complete los pasos siguientes:

  1. En la parte superior de Azure Portal, busque y seleccione Azure Active Directory.
  2. Tome nota del identificador de inquilino, al que se hace referencia en el resto de estas instrucciones como <tenant-id>En un explorador web, se muestra la pantalla de Azure Portal para Azure Active Directory con el identificador del inquilino resaltado.
  3. En Administrar, en el menú de Azure Active Directory de la parte izquierda, seleccione Grupos y haga clic en Nuevo grupo. Muestra la pantalla de grupos de Active Directory en Azure Portal con la opción
  4. Asegúrese de que está seleccionado un tipo de grupo de Seguridad y especifique un nombre de grupo, como myJITGroup. En Azure AD Roles can be assigned to this group (Preview) (Se pueden asignar roles de Azure AD a este grupo [versión preliminar]), seleccione . Por último, seleccione Crear. Muestra la pantalla de creación de nuevo grupo de Azure Portal.
  5. Se le redirigirá a la página Grupos. Seleccione el grupo recién creado y tome nota del identificador de objeto, al que se hace referencia en el resto de estas instrucciones como <object-id>. Muestra la pantalla de Azure Portal con el grupo recién creado, donde se resalta el identificador de objeto.
  6. Implemente un clúster de AKS con la integración de Azure AD administrado por AKS mediante los valores <tenant-id> y <object-id> de antes:
    az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <object-id> --aad-tenant-id <tenant-id>
    
  7. De nuevo en Azure Portal, en el menú de Actividad situado a la izquierda seleccione Privileged Access (Preview) (Acceso con privilegios [versión preliminar]) y elija Enable Privileged Access (Habilitar acceso con privilegios). Se muestra la página Privileged Access (Preview) (Acceso con privilegios [versión preliminar]) de Azure Portal, con
  8. Seleccione Agregar asignaciones para empezar a conceder acceso. Se muestra la pantalla Privileged access (Preview) (Acceso con privilegios [versión preliminar]) de Azure Portal una vez habilitada la opción. Se resalta la opción
  9. Seleccione un rol de miembro y elija los usuarios y grupos a los que desea conceder el acceso al clúster. Los administradores de grupos pueden modificar estas asignaciones en cualquier momento. Elija Siguiente cuando esté listo para continuar. Se muestra la pantalla Pertenencia de Agregar asignaciones de Azure Portal, con un usuario de ejemplo seleccionado para agregarse como miembro. Se resalta la opción
  10. Elija un tipo de asignación Activa, la duración deseada y especifique una justificación. Cuando esté listo para continuar, seleccione Asignar. Para más información sobre los tipos de asignación, consulte Asignación de la elegibilidad para un grupo de acceso con privilegios (versión preliminar) en Privileged Identity Management. Se muestra la pantalla Configuración de Agregar asignaciones de Azure Portal. Se ha seleccionado un tipo de asignación

Una vez que se han realizado las asignaciones, compruebe que el acceso Just-in-Time funciona mediante el acceso al clúster. Por ejemplo:

 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster

Siga los pasos para iniciar sesión.

Use el comando kubectl get nodes para ver los nodos del clúster:

kubectl get nodes

Tenga en cuenta el requisito de autenticación y siga los pasos para autenticarse. Si todo se ha hecho correctamente, debería ver un resultado similar al siguiente:

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-61156405-vmss000000   Ready    agent   6m36s   v1.18.14
aks-nodepool1-61156405-vmss000001   Ready    agent   6m42s   v1.18.14
aks-nodepool1-61156405-vmss000002   Ready    agent   6m33s   v1.18.14

Aplicación del acceso Just-In-Time en el nivel de espacio de nombres

  1. Integre el clúster de AKS con el control de acceso basado en roles de Azure.
  2. Asocie el grupo que quiere integrar con el acceso Just-In-Time a un espacio de nombres del clúster mediante la asignación de roles.
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
  1. Asocie el grupo que acaba de configurar en el nivel de espacio de nombres con PIM para completar la configuración.

Solución de problemas

Si kubectl get nodes devuelve un error parecido al siguiente:

Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope

Asegúrese de que el administrador del grupo de seguridad haya dado a su cuenta una asignación Activa.

Pasos siguientes