Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment configurer GitHub et les fournisseurs d’identité externes Google Identity pour l’authentification de plan de contrôle Azure Kubernetes Service (AKS) à l’aide de l’authentification structurée. Vous découvrez comment créer des authentificateurs JSON Web Token (JWT), configurer la validation et le mappage des revendications et tester le flux d’authentification.
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les versions d'essai sont fournies « en l’état » et « selon disponibilité », et elles sont exclues des contrats de niveau de service et de la garantie limitée. Les versions préliminaires AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Par conséquent, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Prerequisites
- Lisez la vue d’ensemble conceptuelle de l’authentification auprès d’AKS à l’aide du fournisseur d’identité externe.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Commencer avec Azure Cloud Shell.
Si vous préférez exécuter des commandes de référence CLI localement, installation la Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d'exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez How to run the Azure CLI in a Docker container.
Si vous utilisez une installation locale, connectez-vous au Azure CLI à l'aide de la commande az login. Pour terminer le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour obtenir d’autres options de connexion, consultez Authenticate pour Azure à l’aide de Azure CLI.
Lorsque vous y êtes invité, installez l'extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utilisez et gérez les extensions avec le Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Cet article nécessite la version 2.77.0 ou ultérieure du Azure CLI. Si vous utilisez Azure Cloud Shell, la dernière version est déjà installée. Pour installer ou mettre à jour le Azure CLI sur votre ordinateur local, consultez Installer le Azure CLI.
Vous devez installer l’extension
aks-previewAzure CLI version 18.0.0b41 ou ultérieure pour utiliser des fonctionnalités d’authentification structurée.Si vous n’avez pas encore l’extension
aks-preview, installez-la en utilisant la commandeaz extension add.az extension add --name aks-previewSi vous disposez déjà de l’extension
aks-preview, mettez-la à jour pour vous assurer que vous disposez de la dernière version en utilisant la commandeaz extension update.az extension update --name aks-previewVérifiez que vous disposez de la version requise de l’extension
aks-previewà l’aide de la commandeaz extension show.az extension show --name aks-preview --query version
Un cluster AKS exécutant Kubernetes version 1.30 ou ultérieure. Pour créer un cluster AKS, consultez Deploy an Azure Kubernetes Service (AKS) cluster using Azure CLI.
kubectloutil en ligne de commande pour interagir avec votre cluster Kubernetes.kubectlest déjà installé si vous utilisez Azure Cloud Shell. Vous pouvez installerkubectllocalement à l’aide de laaz aks install-clicommande.az aks install-cliFournisseur d’identité externe qui prend en charge OpenID Connect (OIDC).
Connectivité réseau entre les nœuds de cluster et votre fournisseur d’identité.
Si vous envisagez d’utiliser le
kubeloginplug-in, installez-le en suivant les instructions du guide de configuration kubelogin.
Définir des variables d’environnement
Définissez les variables d’environnement suivantes pour votre groupe de ressources et le nom du cluster :
export RESOURCE_GROUP="<your-resource-group-name>" export CLUSTER_NAME="<your-cluster-name>"
Inscrire la JWTAuthenticatorPreview fonctionnalité
Enregistrez la
JWTAuthenticatorPreviewfonctionnalité à l'aide de laaz feature registercommande.az feature register --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceVérifiez l’état d’inscription de la fonctionnalité à l’aide de la
az feature showcommande.az feature show --name JWTAuthenticatorPreview --namespace Microsoft.ContainerServiceLorsque l'état s'affiche
Registered, mettez à jour l'inscription du fournisseur de ressources pourMicrosoft.ContainerServiceà l'aide de la commandeaz provider register.az provider register --namespace Microsoft.ContainerService
Configurer l’authentification OIDC pour GitHub Actions
Vérifiez que vos flux de travail GitHub Actions disposent des autorisations nécessaires.
Configurez l’autorisation
id-token: writedans vos fichiers de flux de travail. Par exemple:permissions: id-token: write contents: readConfigurez les paramètres de référentiel et d’organisation appropriés pour l’accès aux jetons OIDC. Configurez les paramètres OIDC du référentiel et les stratégies de sécurité de l’organisation pour l’utilisation des jetons.
Configurer l’authentification OAuth 2.0 d’identité Google
- Accédez à la console Google Cloud.
- Créez ou sélectionnez un projet.
- Créez des informations d’identification OAuth 2.0.
- Notez votre ID client et votre clé secrète client pour une utilisation ultérieure.
Créer une configuration d’authentificateur JWT pour GitHub Actions OIDC
Créez un fichier nommé
jwt-config.jsonavec la configuration suivante :{ "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'" } ] }
Créer une configuration d’authentificateur JWT pour Google Identity
Créez un fichier nommé
jwt-config.jsonavec la configuration suivante :{ "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'" } ] }
Éléments de configuration d’authentificateur JWT
La configuration de l’authentificateur JWT inclut les éléments clés suivants : issuer, , claimValidationRules, claimMappingset userValidationRules. Chaque élément sert à définir la façon dont AKS valide et traite les jetons JWT du fournisseur d’identité externe.
Configuration de l’émetteur
Le tableau suivant décrit les éléments clés de la issuer configuration :
| Élément de configuration de l’émetteur | Description |
|---|---|
url |
L’URL de l’émetteur OIDC qui doit correspondre à la réclamation issdans les JWT. |
audiences |
Liste des audiences auxquelles les JWT doivent être émis (vérifiés par rapport à la revendication aud). |
Configuration des règles de validation de revendication
Le tableau suivant décrit les éléments clés de la claimValidationRules configuration :
| Élément de règle de validation de revendication | Description |
|---|---|
expression |
Expression CEL qui définit la logique de validation à appliquer aux revendications JWT. L'expression doit être évaluée comme vraie pour que le jeton soit accepté. |
message |
Message d’erreur retourné lorsque la règle de validation échoue. |
Configuration des mappages de réclamations
Le tableau suivant décrit les éléments clés de la claimMappings configuration :
| Élément de mappages de revendications | Description |
|---|---|
username |
Expression CEL qui définit comment construire le nom d’utilisateur Kubernetes à partir de revendications JWT.
Doit inclure le aks:jwt: préfixe pour éviter les conflits avec d’autres méthodes d’authentification. |
groups |
Expression CEL qui définit comment construire les adhésions de groupe Kubernetes à partir des revendications JWT.
Doit inclure le aks:jwt: préfixe pour éviter les conflits avec d’autres méthodes d’authentification. |
uid |
Expression CEL facultative qui définit un identificateur unique pour l’utilisateur. |
extra |
Mappage facultatif d’attributs utilisateur supplémentaires définis par les expressions CEL. |
Configuration des règles de validation des utilisateurs
Le tableau suivant décrit les éléments clés de la userValidationRules configuration :
| Élément de règle de validation utilisateur | Description |
|---|---|
expression |
Expression CEL qui définit une logique de validation supplémentaire à appliquer aux informations utilisateur mappées finales. L’expression doit s’évaluer à vrai pour que l’utilisateur soit accepté. |
message |
Message d’erreur retourné lorsque la règle de validation de l’utilisateur échoue. |
Créer l’authentificateur JWT
Ajoutez l’authentificateur JWT à votre cluster AKS à l’aide de la
az aks jwtauthenticator addcommande.az aks jwtauthenticator add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth \ --config-file jwt-config.json
Gérer les authentificateurs JWT
Répertorier tous les authentificateurs JWT
Répertoriez tous les authentificateurs JWT sur votre cluster à l’aide de la
az aks jwtauthenticator listcommande.az aks jwtauthenticator list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME
Obtenir des détails pour un authentificateur JWT spécifique
Obtenez des détails pour un authentificateur JWT spécifique à l’aide de la
az aks jwtauthenticator showcommande.az aks jwtauthenticator show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth
Configurer GitHub Actions OIDC pour l’authentification
Créez des variables d’environnement pour et définissez les secrets de référentiel requis suivants dans votre dépôt GitHub :
-
AKS_SERVER_URL: URL du serveur d’API de votre cluster AKS. -
AKS_CA_DATA: Données d’autorité de certification codées en base64 pour votre cluster AKS.
-
Créez un flux de travail qui obtient un jeton OIDC et l’utilise pour s’authentifier auprès de votre cluster AKS. L’exemple de workflow suivant récupère tous les pods en cours d’exécution sur le cluster :
Note
La valeur
my-apide l’audience doit correspondre à l’audience configurée dans votre configuration d’authentificateur 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
Obtenir des informations sur le cluster pour la configuration de l’authentificateur JWT
Obtenez l’URL du serveur d’API pour votre cluster à l’aide de la
az aks showcommande.az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "fqdn" -o tsv | \ awk '{print "https://" $0 ":443"}'Obtenez les données d’autorité de certification encodées en base64 pour votre cluster à l’aide de la
az aks get-credentialscommande.# 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}'
Configurer Google Identity OAuth 2.0 pour l’authentification
Vous pouvez configurer l’authentification Google Identity à l’aide du kubelogin plug-in ou directement à l’aide d’un jeton statique.
Ajoutez un nouveau contexte utilisateur à votre fichier kubeconfig. Par exemple:
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
Tester l’authentification
Déclenchez le flux de travail en envoyant (push) vers la branche principale ou en le déclenchant manuellement à partir de l’onglet Actions de votre référentiel.
Surveillez l’exécution du flux de travail sous l’onglet Actions pour vérifier que l’authentification fonctionne.
Sortie attendue pour la première installation avant la configuration Role-Based Access Control (RBAC) :
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:github:your-sub" cannot list resource "nodes" in API group "" at the cluster scopeCette erreur indique la réussite de l’authentification, mais le manque d’autorisation.
Testez l’authentification à l’aide de la
kubectl get nodescommande avec l’indicateur--userpour spécifier le contexte utilisateur que vous avez créé pour l’authentification Google Identity. Par exemple:kubectl get nodes --user external-userSortie attendue pour la première installation avant la configuration Role-Based Access Control (RBAC) :
Error from server (Forbidden): nodes is forbidden: User "aks:jwt:google:your-subject" cannot list resource "nodes" in API group "" at the cluster scopeCette erreur indique la réussite de l’authentification, mais le manque d’autorisation.
Configurer Kubernetes Role-Based Access Control (RBAC)
Créez des liaisons RBAC appropriées pour vos utilisateurs externes et utilisez les informations d’identification de l’administrateur de cluster pour appliquer ces configurations.
Créez un fichier nommé
rbac-config.yamlpour configurer des liaisons RBAC pour les utilisateurs externes. Par exemple: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.ioAppliquez la configuration RBAC à l’aide de la
kubectl applycommande :kubectl apply -f rbac-config.yaml
Créez un fichier nommé
rbac-config.yamlpour configurer des liaisons RBAC pour les utilisateurs externes. Par exemple: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.ioAppliquez la configuration RBAC à l’aide de la
kubectl applycommande :kubectl apply -f rbac-config.yaml
Vérifier l’accès avec RBAC
Vérifiez que l’utilisateur externe peut désormais accéder aux ressources en fonction des autorisations RBAC que vous avez configurées à l’aide des commandes
kubectl get nodesetkubectl get pods, ainsi que du paramètre--user. Par exemple:kubectl get nodes --user external-user kubectl get pods --user external-user
Supprimer l’authentificateur JWT
Lorsque vous n’avez plus besoin de l’authentificateur JWT, supprimez-le de votre cluster AKS à l’aide de la
az aks jwtauthenticator deletecommande.az aks jwtauthenticator delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name external-auth