Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se explica cómo configurar los proveedores de identidades externos de GitHub y Google Identity para la autenticación del plano de control de Azure Kubernetes Service (AKS) mediante la autenticación estructurada. Aprenderá a crear autenticadores JSON Web Token (JWT), configurar la validación y asignación de reclamaciones, y probar el flujo de autenticación.
Importante
Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
- Directivas de soporte técnico de AKS
- preguntas más frecuentes sobre Azure support
Prerrequisitos
- Lea la introducción conceptual para la autenticación en AKS mediante el proveedor de identidades externo.
Use el entorno de Bash en Azure Cloud Shell. Para obtener más información, consulte Get started with Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si se ejecuta en Windows o macOS, considere la posibilidad de ejecutar Azure CLI en un contenedor de Docker. Para obtener más información, consulte Cómo ejecutar el Azure CLI en un contenedor de Docker.
Si usa una instalación local, inicie sesión en el Azure CLI mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Authenticate para Azure con Azure CLI.
Cuando se le solicite, instale la extensión Azure CLI en el primer uso. Para obtener más información sobre las extensiones, consulte Use y administre extensiones con el Azure CLI.
Ejecute az version para ver la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecute az upgrade.
En este artículo se requiere la versión 2.77.0 o posterior del Azure CLI. Si usa Azure Cloud Shell, la versión más reciente ya está instalada allí. Para instalar o actualizar el Azure CLI en el equipo local, consulte Install the Azure CLI.
Debe instalar la extensión
aks-previewAzure CLI versión 18.0.0b41 o posterior para usar características de autenticación estructuradas.Si aún no tienes la extensión
aks-preview, instálala usando el comandoaz extension add.az extension add --name aks-previewSi ya tienes la extensión
aks-preview, actualízala para asegurarte de tener la última versión usando el comandoaz extension update.az extension update --name aks-previewCompruebe que tiene la versión necesaria de la
aks-previewextensión mediante elaz extension showcomando .az extension show --name aks-preview --query version
Un clúster de AKS que ejecuta kubernetes versión 1.30 o posterior. Para crear un clúster de AKS, consulte Deploy an Azure Kubernetes Service (AKS) cluster using Azure CLI.
kubectlherramienta de línea de comandos para interactuar con el clúster de Kubernetes.kubectlya está instalado si usa Azure Cloud Shell. Puede instalarkubectllocalmente mediante elaz aks install-clicomando .az aks install-cliProveedor de identidades externo que admite OpenID Connect (OIDC).
Conectividad de red desde nodos de clúster a su proveedor de identidad.
Si planea usar el
kubelogincomplemento, instálelo siguiendo las instrucciones de la guía de configuración de kubelogin.
Establecimiento de variables de entorno
Establezca las siguientes variables de entorno para el grupo de recursos y el nombre del clúster:
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Registro de la JWTAuthenticatorPreview característica
Registre la
JWTAuthenticatorPreviewcaracterística mediante elaz feature registercomando .az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceCompruebe el estado de registro de la característica mediante el
az feature showcomando .az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceCuando el estado muestre
Registered, actualice el registro del proveedor de recursos paraMicrosoft.ContainerServiceutilizando el comandoaz provider register.az provider register --namespace Microsoft.ContainerService
Configuración de autenticación OIDC en GitHub Actions
Asegúrese de que los flujos de trabajo de GitHub Actions tienen los permisos necesarios.
Configura el
id-token: writepermiso en tus archivos de flujo de trabajo. Por ejemplo:permissions: id-token: write contents: readConfigure la configuración adecuada del repositorio y la organización para el acceso a tokens de OIDC. Configure la configuración de OIDC del repositorio y las directivas de seguridad de la organización para el uso de tokens.
Configuración de la autenticación de OAuth 2.0 de Google Identity
- Vaya a google Cloud Console.
- Cree o seleccione un proyecto.
- Cree credenciales de OAuth 2.0.
- Anote el identificador de cliente y el secreto de cliente para su uso posterior.
Creación de la configuración del autenticador JWT para GitHub Actions OIDC
Cree un archivo denominado
jwt-config.jsoncon la siguiente configuración:{ "issuer": { "url": "https://token.actions.githubusercontent.com", "audiences": [ "my-api" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:github:' + claims.sub" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:github:system')", "message": "username must not start with 'aks:jwt:github:system'" } ] }
Creación de la configuración del autenticador JWT para Google Identity
Cree un archivo denominado
jwt-config.jsoncon la siguiente configuración:{ "issuer": { "url": "https://accounts.google.com", "audiences": [ "your-client-id.apps.googleusercontent.com" ] }, "claimValidationRules": [ { "expression": "has(claims.sub)", "message": "must have sub claim" } ], "claimMappings": { "username": { "expression": "'aks:jwt:google:' + claims.sub" }, "groups": { "expression": "has(claims.groups) ? claims.groups.split(',').map(g, 'aks:jwt:' + g) : []" } }, "userValidationRules": [ { "expression": "has(user.username)", "message": "must have username" }, { "expression": "!user.username.startsWith('aks:jwt:google:system')", "message": "username must not start with 'aks:jwt:google:system'" } ] }
Elementos de configuración del autenticador JWT
La configuración del autenticador JWT incluye los siguientes elementos clave: issuer, claimValidationRules, claimMappingsy userValidationRules. Cada elemento sirve para un propósito específico para definir cómo AKS valida y procesa tokens JWT desde el proveedor de identidades externo.
Configuración del emisor
En la tabla siguiente se describen los elementos clave de la issuer configuración:
| Elemento de configuración del emisor | Descripción |
|---|---|
url |
Dirección URL del emisor de OIDC que debe coincidir con la reclamación iss en JWT. |
audiences |
Lista de audiencias para las que se deben emitir JWT (comprobados con la reclamación aud). |
Configuración de reglas de validación de reclamaciones
En la tabla siguiente se describen los elementos clave de la claimValidationRules configuración:
| Elemento de regla de validación de reclamaciones | Descripción |
|---|---|
expression |
Expresión CEL que define la lógica de validación que se va a aplicar a las notificaciones JWT. La expresión debe evaluarse como true para que se acepte el token. |
message |
Mensaje de error devuelto cuando se produce un error en la regla de validación. |
Configuración de asignaciones de reclamaciones
En la tabla siguiente se describen los elementos clave de la claimMappings configuración:
| Elemento de mapeos de reclamaciones | Descripción |
|---|---|
username |
Expresión CEL que define cómo construir el nombre de usuario de Kubernetes a partir de notificaciones JWT.
Debe incluir el aks:jwt: prefijo para evitar conflictos con otros métodos de autenticación. |
groups |
Expresión CEL que define cómo construir membresías de grupos de Kubernetes a partir de declaraciones JWT.
Debe incluir el aks:jwt: prefijo para evitar conflictos con otros métodos de autenticación. |
uid |
Expresión CEL opcional que define un identificador único para el usuario. |
extra |
Mapa opcional de atributos de usuario adicionales definidos por expresiones CEL. |
Configuración de reglas de validación de usuario
En la tabla siguiente se describen los elementos clave de la userValidationRules configuración:
| Elemento de regla de validación de usuario | Descripción |
|---|---|
expression |
Expresión CEL que define la lógica de validación adicional que se aplicará a la información de usuario final mapeada. La expresión debe evaluarse como verdadera para que el usuario sea aceptado. |
message |
Mensaje de error devuelto cuando se produce un error en la regla de validación del usuario. |
Creación del autenticador JWT
Agregue el autenticador JWT al clúster de AKS mediante el
az aks jwtauthenticator addcomando .az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Administración de autenticadores JWT
Enumerar todos los autenticadores JWT
Enumere todos los autenticadores JWT del clúster mediante el
az aks jwtauthenticator listcomando .az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Obtener detalles de un autenticador JWT específico
Obtenga detalles de un autenticador JWT específico mediante el
az aks jwtauthenticator showcomando .az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Configuración de GitHub Actions OIDC para la autenticación
Cree variables de entorno para y establezca los siguientes secretos de repositorio necesarios en el repositorio de GitHub:
-
AKS_SERVER_URL: dirección URL del servidor de API del clúster de AKS. -
AKS_CA_DATA: datos de entidad de certificación codificados en Base64 para el clúster de AKS.
-
Cree un flujo de trabajo que obtenga un token de OIDC y lo use para autenticarse con el clúster de AKS. El siguiente flujo de trabajo de ejemplo obtiene todos los pods que se ejecutan en el clúster:
Nota:
El valor
my-apide audiencia debe coincidir con la audiencia configurada en la configuración del autenticador JWT.name: AKS Access with GitHub OIDC on: workflow_dispatch: push: branches: [main] permissions: id-token: write contents: read jobs: aks-access: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install kubectl uses: azure/setup-kubectl@v3 with: version: 'latest' - name: Get GitHub OIDC token id: get_token run: | TOKEN=$(curl -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \ "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=my-api" | \ jq -r '.value') echo "::add-mask::$TOKEN" echo "oidc_token=$TOKEN" >> $GITHUB_OUTPUT - name: Create kubeconfig with OIDC token run: | cat <<EOF > kubeconfig apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${{ secrets.AKS_CA_DATA }} server: ${{ secrets.AKS_SERVER_URL }} name: aks-cluster contexts: - context: cluster: aks-cluster user: github-oidc-user name: aks-context current-context: aks-context users: - name: github-oidc-user user: token: ${{ steps.get_token.outputs.oidc_token }} EOF - name: List all pods in the cluster run: | export KUBECONFIG=./kubeconfig kubectl get pods --all-namespaces
Obtención de información del clúster para la configuración del autenticador JWT
Obtenga la dirección URL del servidor de API para el clúster mediante el
az aks showcomando .az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Obtenga los datos de la entidad de certificación codificada en base64 para el clúster mediante el
az aks get-credentialscomando .# Get CA data (base64 encoded) az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --file - --format exec | \ grep certificate-authority-data | awk '{print $2}'
Configuración de Google Identity OAuth 2.0 para la autenticación
Puede configurar la autenticación de Google Identity mediante el kubelogin complemento o directamente mediante un token estático.
Agregue un nuevo contexto de usuario al archivo kubeconfig. Por ejemplo:
users: - name: external-user user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: kubectl args: - oidc-login - get-token - --oidc-issuer-url=https://accounts.google.com - --oidc-client-id=your-client-id.apps.googleusercontent.com - --oidc-client-secret=your-client-secret
Prueba de la autenticación
Desencadene el flujo de trabajo mediante la inserción en la rama principal o desencadénelo manualmente desde la pestaña Acciones del repositorio.
Supervise la ejecución del flujo de trabajo en la pestaña Acciones para comprobar que la autenticación funciona.
Salida esperada para la configuración inicial antes de la configuración del Control de Acceso Basado en Rol (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeEste error indica la autenticación correcta pero la falta de autorización.
Pruebe la autenticación utilizando el comando
kubectl get nodescon la bandera--userpara especificar el contexto de usuario que creó para la autenticación de Google Identity. Por ejemplo:kubectl get nodes --user external-userSalida esperada para la configuración inicial antes de la configuración del Control de Acceso Basado en Rol (RBAC):
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeEste error indica la autenticación correcta pero la falta de autorización.
Configuración del Role-Based Access Control de Kubernetes (RBAC)
Cree enlaces RBAC adecuados para los usuarios externos y use las credenciales de administrador del clúster para aplicar estas configuraciones.
Cree un archivo denominado
rbac-config.yamlpara configurar enlaces RBAC para usuarios externos. Por ejemplo:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for GitHub; example of GitHub subject is "repo:<organization-name>/<repository-name>:ref:refs/heads/main" name: aks:jwt:github:your-github-sub apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioAplique la configuración de RBAC mediante el
kubectl applycomando :kubectl apply -f rbac-config.yaml
Cree un archivo denominado
rbac-config.yamlpara configurar enlaces RBAC para usuarios externos. Por ejemplo:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-user-role rules: - apiGroups: [""] resources: ["pods", "services", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-user-binding subjects: - kind: User # This matches the username expression in claim mappings for Google name: aks:jwt:google:your-subject-claim apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: external-user-role apiGroup: rbac.authorization.k8s.ioAplique la configuración de RBAC mediante el
kubectl applycomando :kubectl apply -f rbac-config.yaml
Comprobación del acceso con RBAC
Compruebe que el usuario externo ahora puede acceder a los recursos según los permisos de RBAC que configuró utilizando los comandos
kubectl get nodesykubectl get podscon la bandera--user. Por ejemplo:kubectl get nodes --user external-user kubectl get pods --user external-user
Eliminación del autenticador JWT
Cuando ya no necesite el autenticador JWT, quítelo del clúster de AKS mediante el
az aks jwtauthenticator deletecomando .az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth