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.
Ce guide fournit des options de configuration pour le sdk Microsoft Entra ID Auth (sidecar), un service d’authentification conteneurisé qui gère l’acquisition et la gestion des jetons pour les applications dans des environnements conteneurisés. Le SDK simplifie l’intégration des identités en gérant Microsoft Entra ID l’authentification, les flux de jetons au nom de (OBO) et les appels d’API en aval sans que les applications n’incorporent directement des bibliothèques d’authentification.
Bien que ce guide se concentre sur les modèles de déploiement Kubernetes, le SDK peut être déployé dans n’importe quel environnement conteneurisé, y compris Docker, Azure Container Instances et d’autres plateformes d’orchestration de conteneurs.
Si vous effectuez un déploiement sur Azure Kubernetes Service (AKS), la configuration d'environnements de développement ou la configuration des charges de travail de production, cette référence couvre les modèles de configuration, les types d'informations d'identification et les variables d'environnement nécessaires pour sécuriser vos applications avec Microsoft Entra ID.
Vue d’ensemble de la configuration
Le kit SDK d’Microsoft Entra ID Auth (sidecar) est configuré à l’aide de sources de configuration en suivant les conventions de ASP.NET Core. Les valeurs de configuration peuvent être fournies via plusieurs méthodes, notamment :
- Variables d’environnement (recommandées pour Kubernetes)
- configuration Entra ID - fichier
appsettings.jsonattaché au conteneur ou incorporé dans le fichier yaml. - Arguments de ligne de commande
- Azure App Configuration ou Key Vault (pour les scénarios avancés)
Paramètres de Entra ID de base
Microsoft Entra ID déploiements du SDK Auth (sidecar) nécessitent des paramètres de Entra ID principaux pour authentifier les jetons entrants et acquérir des jetons pour les API en aval. Utilisez les informations d’identification du client appropriées au format YAML suivant, généralement en tant que variables d’environnement, pour garantir l’authentification sécurisée.
Configuration requise
Tout d’abord, configurez les paramètres de Entra ID de base du KIT de développement logiciel (SDK) pour authentifier les jetons entrants et acquérir des jetons pour les API en aval.
env:
- name: AzureAd__Instance
value: "https://login.microsoftonline.com/"
- name: AzureAd__TenantId
value: "<your-tenant-id>"
- name: AzureAd__ClientId
value: "<your-client-id>"
| Key | Descriptif | Obligatoire | Par défaut |
|---|---|---|---|
AzureAd__Instance |
URL de l’autorité de Microsoft Entra | Non | https://login.microsoftonline.com/ |
AzureAd__TenantId |
VOTRE ID de locataire Microsoft Entra | Oui | - |
AzureAd__ClientId |
ID d’application (client) | Oui | - |
AzureAd__Audience |
Audience attendue dans les jetons entrants | Non | api://{ClientId} |
AzureAd__Scopes |
Étendues requises pour les jetons entrants (séparées par l’espace) | Non | - |
Note
La valeur d’audience attendue dépend de la demande d’inscription de votre applicationAccessTokenVersion :
-
Version 2 : Utiliser la
{ClientId}valeur directement -
Version 1 ou null : utilisez l’URI d’ID d’application (généralement
api://{ClientId}, sauf si vous l’avez personnalisé)
Configuration des informations d’identification du client
Le kit SDK Microsoft Entra ID Auth (sidecar) prend en charge plusieurs types d’informations d’identification client pour l’authentification avec Microsoft Entra ID lors de l’acquisition de jetons pour les API en aval. Choisissez le type d’informations d’identification qui convient le mieux à votre environnement de déploiement et aux exigences de sécurité, puis vérifiez que la configuration que vous choisissez convient à votre scénario.
Chaque type d’informations d’identification répond à différents scénarios :
- Clé secrète client : configuration simple pour le développement et le test (non recommandé pour la production)
- Key Vault Certificat : Environnements de production avec gestion centralisée des certificats
- Certificat de fichier : quand les certificats sont montés en tant que fichiers (par exemple, via des secrets Kubernetes)
- Certificate Store : environnements Windows avec des magasins de certificats
- Workload Identity for Containers : recommandé pour AKS, à l’aide de ID de charge de travail Microsoft Entra avec une projection de jetons basée sur des fichiers
- Identité managée pour les machines virtuelles/App Services : Machines virtuelles Azure et App Services avec des identités managées système ou affectées par l’utilisateur (et non pour les conteneurs)
Configurez une ou plusieurs sources d’informations d’identification au format YAML suivant :
Choisir des informations d’identification par environnement
Sélectionnez les informations d’identification en fonction de l’emplacement d’exécution du side-car. Les deux SignedAssertionFilePath et SignedAssertionFromManagedIdentity sont des informations d’identification d’identité fédérée (FIC). Ils diffèrent dans la façon dont le side-car obtient l’assertion signée.
| Environnement | SourceType |
Remarques |
|---|---|---|
| Azure Kubernetes Service (AKS) | SignedAssertionFilePath |
Les projets webhook d’identité de charge de travail Azure et pivotent le jeton. |
| Kubernetes non Azure ou local | SignedAssertionFilePath |
Vous définissez le chemin du jeton projeté. Cela est pris en charge par le biais de la fédération d’identité de charge de travail. |
| Azure machines virtuelles, App Service ou Container Apps avec une identité managée | SignedAssertionFromManagedIdentity |
Utilise Azure Identité managée via IMDS. Azure uniquement. |
| Docker ou tout hôte sans émetteur OIDC |
KeyVault, Path ou StoreWithThumbprint |
Utilisez un certificat lorsque la plateforme ne peut pas projeter un jeton OIDC. |
| Développement ou test | ClientSecret |
Non recommandé pour la production. |
Important : SignedAssertionFromManagedIdentity n’est pas des informations d’identification Kubernetes à usage général, et ce n’est pas un secours pour SignedAssertionFilePath. Il utilise Azure Identité managée et sondes Azure environnements d’hébergement tels que Service Fabric, App Service et IMDS. Sur un hôte non Azure, il ne trouve aucun de ces éléments, et la requête expire finalement sur IMDS. Si votre side-car atteint de façon inattendue IMDS, vous avez sélectionné ce type de source. Utilisez SignedAssertionFilePath à la place.
Secret de client
Cette configuration configure Entra ID l’authentification à l’aide d’une clé secrète client pour l’authentification de service à service.
- name: AzureAd__ClientCredentials__0__SourceType
value: "ClientSecret"
- name: AzureAd__ClientCredentials__0__ClientSecret
value: "<your-client-secret>"
Certificat de Key Vault
Cette configuration configure l’authentification Entra ID à l’aide d’un certificat stocké dans Azure Key Vault.
- name: AzureAd__ClientCredentials__0__SourceType
value: "KeyVault"
- name: AzureAd__ClientCredentials__0__KeyVaultUrl
value: "https://<your-keyvault>.vault.azure.net"
- name: AzureAd__ClientCredentials__0__KeyVaultCertificateName
value: "<certificate-name>"
Certificat à partir d’un fichier
Cette configuration configure Entra ID l’authentification à l’aide d’un certificat stocké en tant que fichier.
- name: AzureAd__ClientCredentials__0__SourceType
value: "Path"
- name: AzureAd__ClientCredentials__0__CertificateDiskPath
value: "/path/to/certificate.pfx"
- name: AzureAd__ClientCredentials__0__CertificatePassword
value: "<certificate-password>"
Certificat à partir du magasin
Cette configuration configure Entra ID l’authentification à l’aide d’un certificat à partir du magasin de certificats local.
- name: AzureAd__ClientCredentials__0__SourceType
value: "StoreWithThumbprint"
- name: AzureAd__ClientCredentials__0__CertificateStorePath
value: "CurrentUser/My"
- name: AzureAd__ClientCredentials__0__CertificateThumbprint
value: "<thumbprint>"
Identité de charge de travail sur AKS (recommandé pour AKS)
Cette configuration configure l’authentification Entra ID à l’aide de ID de charge de travail Microsoft Entra sur AKS. Il s’agit de l’approche recommandée sur AKS, car les projets webhook d’identité de charge de travail Azure et font pivoter le jeton pour vous.
- name: AzureAd__ClientCredentials__0__SourceType
value: "SignedAssertionFilePath"
Remarque : Sur AKS, le chemin /var/run/secrets/azure/tokens/azure-identity-token du fichier de jeton ou une variable d’environnement est automatiquement projeté par le webhook d’identité de charge de travail Azure lorsque votre pod est correctement configuré avec l’annotation de compte de service et l’étiquette de pod. Pour obtenir des instructions d’installation complètes, consultez Utilisation de l’identité managée .
Identité de charge de travail pour les Azure ou Kubernetes locaux
Le flux d’identité de l’agent n’est pas limité à AKS. Toute plateforme Kubernetes, y compris localement et d’autres clouds, peut être utilisée SignedAssertionFilePath avec la fédération des identités de charge de travail. Étant donné qu'il n'existe aucun Azure webhook d'identité de charge de travail en dehors d'AKS, vous pointez le side-car sur le jeton de compte de service projeté que votre plateforme monte.
- name: AzureAd__ClientCredentials__0__SourceType
value: "SignedAssertionFilePath"
- name: AzureAd__ClientCredentials__0__SignedAssertionFileDiskPath
value: "/var/run/secrets/tokens/sa-token"
Le sidecar réexécure le fichier sur chaque demande de jeton, de sorte que la rotation pilotée par la plateforme de l’assertion projetée est prise en charge automatiquement.
Pour utiliser ces informations d’identification sur kubernetes non Azure, votre environnement doit respecter les conditions préalables suivantes :
- Votre plateforme Kubernetes projette un jeton de compte de service dans le pod sidecar, par exemple via un volume projeté
serviceAccountToken. - Le cluster expose un émetteur OIDC accessible publiquement et un point de terminaison JWKS afin que Microsoft Entra puissent valider l’assertion.
- Les informations d’identification d’identité fédérée (FIC) sont configurées sur l’application Blueprint, avec l’émetteur et l’objet qui correspondent au jeton projeté.
Si votre plateforme ne peut pas fournir un jeton OIDC projeté ou un émetteur public, utilisez plutôt des informations d'identification de certificat telles que le certificat de Key Vault ou le certificat à partir d'un fichier.
Identité managée pour les machines virtuelles et App Services
Pour les scénarios d’identité managée Azure classiques sur Machines Virtuelles ou App Services (et non sur les conteneurs), utilisez SignedAssertionFromManagedIdentity :
- name: AzureAd__ClientCredentials__0__SourceType
value: "SignedAssertionFromManagedIdentity"
- name: AzureAd__ClientCredentials__0__ManagedIdentityClientId
value: "<managed-identity-client-id>"
Important : n’utilisez SignedAssertionFromManagedIdentity pas dans des environnements non Azure ou locaux. Il utilise Azure identité managée via IMDS et fonctionne uniquement sur Azure calcul qui fournit une identité managée. Sur un hôte non Azure, il sonde Azure points de terminaison d’hébergement, puis expire sur IMDS, ce qui peut ressembler au KIT de développement logiciel (SDK) encodé en dur vers IMDS. Pour Kubernetes n’importe où, y compris AKS, utilisez SignedAssertionFilePath. Pour en savoir plus, consultez https://aka.ms/idweb/client-credentials
Ressources additionnelles
Pour plus d’informations sur toutes les options de configuration des informations d’identification et leur utilisation, consultez la spécification CredentialDescription dans le référentiel microsoft-identity-abstractions-for-dotnet.
Priorité des informations d’identification
Configurez plusieurs informations d’identification avec une sélection basée sur la priorité :
# First priority - Key Vault certificate
- name: AzureAd__ClientCredentials__0__SourceType
value: "KeyVault"
- name: AzureAd__ClientCredentials__0__KeyVaultUrl
value: "https://prod-keyvault.vault.azure.net"
- name: AzureAd__ClientCredentials__0__KeyVaultCertificateName
value: "prod-cert"
# Second priority - Client secret (fallback)
- name: AzureAd__ClientCredentials__1__SourceType
value: "ClientSecret"
- name: AzureAd__ClientCredentials__1__ClientSecret
valueFrom:
secretKeyRef:
name: app-secrets
key: client-secret
Le kit SDK d’Microsoft Entra ID Auth (sidecar) évalue les informations d’identification dans l’ordre numérique (0, 1, 2, etc.) et utilise les premières informations d’identification qui s’authentifient correctement.
Configuration des API en aval
Configurez les API en aval que votre application doit appeler à l’aide de flux de jetons OBO (on-behalf-of). Le sdk d’Microsoft Entra ID Auth (sidecar) gère l’acquisition de jetons et fournit des en-têtes d’authentification pour ces appels d’API. Chaque API en aval nécessite un nom de configuration unique et des paramètres spécifiques pour l’acquisition de jetons et la gestion des requêtes HTTP.
Définissez chaque API en aval avec son URL de base, ses étendues requises et ses paramètres facultatifs. Le Kit de développement logiciel (SDK) gère automatiquement l’acquisition de jetons à l’aide du jeton utilisateur entrant et fournit les en-têtes d’autorisation appropriés pour les appels d’API de votre application.
- name: DownstreamApis__Graph__BaseUrl
value: "https://graph.microsoft.com/v1.0"
- name: DownstreamApis__Graph__Scopes
value: "User.Read Mail.Read"
- name: DownstreamApis__Graph__RelativePath
value: "/me"
- name: DownstreamApis__MyApi__BaseUrl
value: "https://api.contoso.com"
- name: DownstreamApis__MyApi__Scopes
value: "api://myapi/.default"
| Modèle clé | Descriptif | Obligatoire |
|---|---|---|
DownstreamApis__<Name>__BaseUrl |
URL de base de l’API | Oui |
DownstreamApis__<Name>__Scopes |
Étendues séparées par l’espace à demander | Oui |
DownstreamApis__<Name>__HttpMethod |
Méthode HTTP par défaut | Non (GET) |
DownstreamApis__<Name>__RelativePath |
Chemin relatif par défaut | Non |
DownstreamApis__<Name>__RequestAppToken |
Utiliser le jeton d’application au lieu d’OBO | Non (false) |
Options d’acquisition de jetons
Ajuster le comportement d’acquisition de jeton :
- name: DownstreamApis__Graph__AcquireTokenOptions__Tenant
value: "<specific-tenant-id>"
- name: DownstreamApis__Graph__AcquireTokenOptions__AuthenticationScheme
value: "Bearer"
- name: DownstreamApis__Graph__AcquireTokenOptions__CorrelationId
value: "<correlation-id>"
Configuration de la requête HTTP signée (SHR)
Activez les requêtes HTTP signées pour une sécurité renforcée :
- name: DownstreamApis__SecureApi__AcquireTokenOptions__PopPublicKey
value: "<base64-encoded-public-key>"
- name: DownstreamApis__SecureApi__AcquireTokenOptions__PopClaims
value: '{"custom_claim": "value"}'
Configuration de la journalisation
Configurer les niveaux de journalisation :
- name: Logging__LogLevel__Default
value: "Information"
- name: Logging__LogLevel__Microsoft.Identity.Web
value: "Debug"
- name: Logging__LogLevel__Microsoft.AspNetCore
value: "Warning"
paramètres de ASP.NET Core
- name: ASPNETCORE_ENVIRONMENT
value: "Production"
- name: ASPNETCORE_URLS
value: "http://+:5000"
remplacements de configuration Per-Request
Tous les points de terminaison d’acquisition de jeton acceptent les paramètres de requête pour remplacer la configuration :
# Override scopes
GET /AuthorizationHeader/Graph?optionsOverride.Scopes=User.Read&optionsOverride.Scopes=Mail.Read
# Request app token instead of OBO
GET /AuthorizationHeader/Graph?optionsOverride.RequestAppToken=true
GET /AuthorizationHeaderUnauthenticated/Graph?optionsOverride.RequestAppToken=true
# Override tenant
GET /AuthorizationHeader/Graph?optionsOverride.AcquireTokenOptions.Tenant=<tenant-id>
# Override relative path
GET /DownstreamApi/Graph?optionsOverride.RelativePath=me/messages
# Enable SHR for this request
GET /AuthorizationHeader/Graph?optionsOverride.AcquireTokenOptions.PopPublicKey=<base64-key>
Remplacements d’identité de l’agent
Spécifiez l’identité de l’agent au moment de la demande :
# Autonomous agent
GET /AuthorizationHeader/Graph?AgentIdentity=<agent-client-id>
# Autonomous agent with specific agent user identity (by username)
GET /AuthorizationHeader/Graph?AgentIdentity=<agent-client-id>&AgentUsername=user@contoso.com
# Autonomous agent with specific agent user identity (by object ID)
GET /AuthorizationHeader/Graph?AgentIdentity=<agent-client-id>&AgentUserId=<user-object-id>
Règles importantes :
-
AgentUsernameetAgentUserIdexigerAgentIdentity -
AgentUsernameetAgentUserIds’excluent mutuellement
Consultez Les identités de l’agent pour obtenir une sémantique détaillée.
Exemple de configuration complet
Voici un exemple prêt pour la production montrant comment déployer le Kit de développement logiciel (SDK) avec une séparation appropriée de la configuration et des secrets. Cet exemple illustre la configuration de plusieurs API en aval, à l’aide de Kubernetes ConfigMaps pour les paramètres non sensibles, le stockage sécurisé des informations d’identification dans les secrets et l’application de configurations spécifiques à l’environnement pour un déploiement sécurisé.
Ce modèle suit les bonnes pratiques Kubernetes en séparant les données de configuration des informations d’identification sensibles, ce qui permet une gestion efficace des différents environnements tout en conservant la sécurité.
Kubernetes ConfigMap
ConfigMap stocke les paramètres de configuration non sensibles pour le Kit de développement logiciel (SDK), notamment les paramètres de Entra ID, les API en aval et les niveaux de journalisation.
apiVersion: v1
kind: ConfigMap
metadata:
name: sidecar-config
data:
ASPNETCORE_ENVIRONMENT: "Production"
ASPNETCORE_URLS: "http://+:5000"
AzureAd__Instance: "https://login.microsoftonline.com/"
AzureAd__TenantId: "common"
AzureAd__ClientId: "your-app-client-id"
AzureAd__Scopes: "access_as_user"
DownstreamApis__Graph__BaseUrl: "https://graph.microsoft.com/v1.0"
DownstreamApis__Graph__Scopes: "User.Read Mail.Read"
DownstreamApis__MyApi__BaseUrl: "https://api.contoso.com"
DownstreamApis__MyApi__Scopes: "api://myapi/.default"
Logging__LogLevel__Default: "Information"
Logging__LogLevel__Microsoft.Identity.Web: "Debug"
Secret Kubernetes
Le secret stocke les informations d’identification sensibles, telles que les secrets client, séparément de ConfigMap.
apiVersion: v1
kind: Secret
metadata:
name: sidecar-secrets
type: Opaque
stringData:
AzureAd__ClientCredentials__0__ClientSecret: "your-client-secret"
Déploiement avec ConfigMap et secret
Le déploiement monte à la fois le ConfigMap et le secret dans le conteneur du Kit de développement logiciel (SDK), ce qui garantit que la configuration et les informations d’identification sont correctement séparées.
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
envFrom:
- configMapRef:
name: sidecar-config
- secretRef:
name: sidecar-secrets
Configuration spécifique à l’environnement
Configurez les paramètres spécifiques à l’environnement pour adapter la sécurité, la journalisation et l’isolation des locataires pour vos environnements de déploiement. Chaque environnement nécessite différentes approches de configuration pour équilibrer l’efficacité du développement, la validation intermédiaire et les exigences de sécurité de production.
Développement
- name: ASPNETCORE_ENVIRONMENT
value: "Development"
- name: Logging__LogLevel__Default
value: "Debug"
- name: AzureAd__TenantId
value: "<dev-tenant-id>"
Staging
- name: ASPNETCORE_ENVIRONMENT
value: "Staging"
- name: Logging__LogLevel__Default
value: "Information"
- name: AzureAd__TenantId
value: "<staging-tenant-id>"
Production
- name: ASPNETCORE_ENVIRONMENT
value: "Production"
- name: Logging__LogLevel__Default
value: "Warning"
- name: Logging__LogLevel__Microsoft.Identity.Web
value: "Information"
- name: AzureAd__TenantId
value: "<prod-tenant-id>"
- name: ApplicationInsights__ConnectionString
value: "<app-insights-connection>"
Validation
La Microsoft Entra ID SDK Auth (sidecar) valide la configuration au démarrage et journalise les erreurs pour :
- Paramètres requis manquants (
TenantId,ClientId) - Configurations d’informations d’identification non valides
- Définitions d’API en aval mal formées
- Formats d’URL ou d’étendue non valides
Vérifiez les journaux de conteneur pour les messages de validation :
kubectl logs <pod-name> -c sidecar
Résolution des problèmes d’informations d’identification
Les demandes atteignent de façon inattendue IMDS ou expirent
Symptôme : le side-car bloque ou expire l’acquisition d’un jeton en aval, et les journaux affichent les demandes au point de terminaison IMDS (169.254.169.254), même sur un hôte non Azure.
Cause : les informations d’identification sont configurées en tant que SignedAssertionFromManagedIdentity. Ce type de source sonde intentionnellement Azure environnements d'hébergement et IMDS, qui n'existent pas en dehors de Azure. Il s’agit d’un choix de configuration, pas d’un secours de SignedAssertionFilePath.
Résolution :
- Vérifiez que l’effet
SourceTypeestSignedAssertionFilePath, et nonSignedAssertionFromManagedIdentity. - Vérifiez qu’aucune variable d’environnement ou configMap ne remplace les réintroduces
SignedAssertionFromManagedIdentity. - Vérifiez que cela
SignedAssertionFileDiskPathpointe vers le jeton projeté monté dans le conteneur sidecar. - Sur kubernetes non Azure, vérifiez que l'émetteur OIDC et le JWKS du cluster sont accessibles publiquement et qu'un FIC correspondant existe sur l'application Blueprint.
Lorsque vous signalez un problème persistant, capturez la version side-car, la configuration d’exécution effective et les journaux de conteneur à partir d’une requête défaillante.
Meilleures pratiques
- Utilisez les secrets pour les informations d’identification : stockez les certificats et secrets client dans les secrets Kubernetes ou Azure Key Vault. Voir aussi https://aka.ms/msidweb/client-credentials
- Configuration distincte par environnement : utiliser ConfigMaps pour gérer les paramètres spécifiques à l’environnement
- Activer la journalisation appropriée : utiliser la journalisation de débogage dans le développement, informations/avertissements en production
- Configurer les contrôles d’intégrité : vérifier que les points de terminaison de contrôle d’intégrité sont correctement configurés
-
Utiliser l’identité de charge de travail pour les conteneurs : pour les déploiements en conteneur (AKS), préférez ID de charge de travail Microsoft Entra avec
SignedAssertionFilePathpar rapport aux secrets clients pour une sécurité renforcée - Utiliser l’identité managée pour les machines virtuelles/App Services : pour Azure machines virtuelles et App Services, utilisez des identités managées affectées par le système ou l’utilisateur
- Valider au moment du déploiement : tester la configuration en préproduction avant le déploiement de production