Microsoft Entra Agent ID
Créez et gérez des identités compatibles OAuth2 pour les agents IA en utilisant l'API Microsoft Graph beta.
API en préversion — Tous les endpoints Agent Identity se trouvent uniquement sous
/beta. Non disponible dans/v1.0.
Avant de commencer
Recherchez microsoft-docs MCP pour la dernière documentation Agent ID :
- Requête : « Microsoft Entra agent identity setup »
- Vérification : Les paramètres API correspondent au comportement de préversion actuel
Modèle conceptuel
Agent Identity Blueprint (application) ← un par type/projet d'agent
└── BlueprintPrincipal (service principal) ← DOIT être créé explicitement
├── Agent Identity (SP): agent-1 ← un par instance d'agent
├── Agent Identity (SP): agent-2
└── Agent Identity (SP): agent-3
Prérequis
PowerShell (recommandé pour la configuration interactive)
# Requires PowerShell 7+
Install-Module Microsoft.Graph.Beta.Applications -Scope CurrentUser -Force
Python (pour le provisionnement programmatique)
pip install azure-identity requests
Rôles Entra requis
L'un des rôles suivants : Agent Identity Developer, Agent Identity Administrator, ou Application Administrator.
Variables d'environnement
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<app-registration-client-id>
AZURE_CLIENT_SECRET=<app-registration-secret>
Authentification
⚠️
DefaultAzureCredentialn'est PAS supporté. Les tokens Azure CLI contiennentDirectory.AccessAsUser.All, que les API Agent Identity rejettent explicitement (403). Vous DEVEZ utiliser une app registration dédiée avec le fluxclient_credentialsou vous connecter viaConnect-MgGraphavec des scopes délégués explicites.
PowerShell (permissions délégués)
Connect-MgGraph -Scopes @(
"AgentIdentityBlueprint.Create",
"AgentIdentityBlueprint.ReadWrite.All",
"AgentIdentityBlueprintPrincipal.Create",
"User.Read"
)
Set-MgRequestContext -ApiVersion beta
$currentUser = (Get-MgContext).Account
$userId = (Get-MgUser -UserId $currentUser).Id
Python (permissions application)
import os
import requests
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(
tenant_id=os.environ["AZURE_TENANT_ID"],
client_id=os.environ["AZURE_CLIENT_ID"],
client_secret=os.environ["AZURE_CLIENT_SECRET"],
)
token = credential.get_token("https://graph.microsoft.com/.default")
GRAPH = "https://graph.microsoft.com/beta"
headers = {
"Authorization": f"Bearer {token.token}",
"Content-Type": "application/json",
"OData-Version": "4.0", # Required for all Agent Identity API calls
}
Flux de travail principal
Étape 1 : Créer un Agent Identity Blueprint
Les sponsors sont obligatoires et doivent être des objets User — les ServicePrincipals et Groups sont rejetés.
import subprocess
# Get sponsor user ID (client_credentials has no user context, so use az CLI)
result = subprocess.run(
["az", "ad", "signed-in-user", "show", "--query", "id", "-o", "tsv"],
capture_output=True, text=True, check=True,
)
user_id = result.stdout.strip()
blueprint_body = {
"@odata.type": "Microsoft.Graph.AgentIdentityBlueprint",
"displayName": "My Agent Blueprint",
"sponsors@odata.bind": [
f"https://graph.microsoft.com/beta/users/{user_id}"
],
}
resp = requests.post(f"{GRAPH}/applications", headers=headers, json=blueprint_body)
resp.raise_for_status()
blueprint = resp.json()
app_id = blueprint["appId"]
blueprint_obj_id = blueprint["id"]
Étape 2 : Créer un BlueprintPrincipal
Cette étape est obligatoire. Créer un Blueprint ne crée PAS automatiquement son service principal. Sans cela, la création d'Agent Identity échoue avec :
400: The Agent Blueprint Principal for the Agent Blueprint does not exist.
sp_body = {
"@odata.type": "Microsoft.Graph.AgentIdentityBlueprintPrincipal",
"appId": app_id,
}
resp = requests.post(f"{GRAPH}/servicePrincipals", headers=headers, json=sp_body)
resp.raise_for_status()
Si vous implémentez des scripts idempotents, vérifiez et créez le BlueprintPrincipal même si le Blueprint existe déjà (une exécution précédente peut avoir créé le Blueprint mais échoué avant la création du SP).
Étape 3 : Créer des Agent Identities
agent_body = {
"@odata.type": "Microsoft.Graph.AgentIdentity",
"displayName": "my-agent-instance-1",
"agentIdentityBlueprintId": app_id,
"sponsors@odata.bind": [
f"https://graph.microsoft.com/beta/users/{user_id}"
],
}
resp = requests.post(f"{GRAPH}/servicePrincipals", headers=headers, json=agent_body)
resp.raise_for_status()
agent = resp.json()
Référence API
| Opération | Méthode | Endpoint | Type OData |
|---|---|---|---|
| Create Blueprint | POST |
/applications |
Microsoft.Graph.AgentIdentityBlueprint |
| Create BlueprintPrincipal | POST |
/servicePrincipals |
Microsoft.Graph.AgentIdentityBlueprintPrincipal |
| Create Agent Identity | POST |
/servicePrincipals |
Microsoft.Graph.AgentIdentity |
| List Agent Identities | GET |
/servicePrincipals?$filter=... |
— |
| Delete Agent Identity | DELETE |
/servicePrincipals/{id} |
— |
| Delete Blueprint | DELETE |
/applications/{id} |
— |
Tous les endpoints utilisent l'URL de base : https://graph.microsoft.com/beta
Permissions requises
| Permission | Objectif |
|---|---|
Application.ReadWrite.All |
CRUD Blueprint (objets application) |
AgentIdentityBlueprint.Create |
Créer de nouveaux Blueprints |
AgentIdentityBlueprint.ReadWrite.All |
Lire/mettre à jour les Blueprints |
AgentIdentityBlueprintPrincipal.Create |
Créer les BlueprintPrincipals |
AgentIdentity.Create.All |
Créer les Agent Identities |
AgentIdentity.ReadWrite.All |
Lire/mettre à jour les Agent Identities |
Il y a 18 permissions application spécifiques à Agent Identity. Découvrez toutes :
az ad sp show --id 00000003-0000-0000-c000-000000000000 \
--query "appRoles[?contains(value, 'AgentIdentity')].{id:id, value:value}" -o json
Accorder le consentement administrateur (requis pour les permissions application) :
az ad app permission admin-consent --id <client-id>
Le consentement administrateur peut échouer avec 404 si le service principal n'a pas été répliqué. Réessayez avec un backoff de 10–40s.
Nettoyage
# Delete Agent Identity
requests.delete(f"{GRAPH}/servicePrincipals/{agent['id']}", headers=headers)
# Delete BlueprintPrincipal (get SP ID first)
sps = requests.get(
f"{GRAPH}/servicePrincipals?$filter=appId eq '{app_id}'",
headers=headers,
).json()
for sp in sps.get("value", []):
requests.delete(f"{GRAPH}/servicePrincipals/{sp['id']}", headers=headers)
# Delete Blueprint
requests.delete(f"{GRAPH}/applications/{blueprint_obj_id}", headers=headers)
Bonnes pratiques
- Toujours créer BlueprintPrincipal après Blueprint — pas de création automatique ; implémentez des vérifications idempotents sur les deux
- Utiliser des objets User comme sponsors — les ServicePrincipals et Groups sont rejetés
- Gérer les délais de propagation des permissions — après le consentement administrateur, attendre 30–120s ; réessayer avec backoff sur 403
- Inclure l'en-tête
OData-Version: 4.0sur chaque requête Graph - Utiliser Workload Identity Federation pour l'authentification en production — pour le développement local, utiliser un client secret sur le Blueprint (voir references/oauth2-token-flow.md)
- Définir
identifierUrissur Blueprint avant d'utiliser la portée OAuth2 (api://{app-id}) - Ne jamais utiliser les tokens Azure CLI pour les appels API — ils contiennent
Directory.AccessAsUser.Allqui est rejeté catégoriquement - Vérifier les ressources existantes avant de créer — implémentez un provisionnement idempotent
Références
| Fichier | Contenu |
|---|---|
| references/oauth2-token-flow.md | Flux de tokens en production (Managed Identity + WIF) et développement local (client secret) |
| references/known-limitations.md | 29 problèmes connus organisés par catégorie (à partir de la page officielle known-issues en préversion) |
| references/sdk-sidecar.md | Microsoft Entra SDK for AgentID — endpoints, modèles d'agents 3P, déploiement Docker/K8s, sécurité |
Liens externes
| Ressource | URL |
|---|---|
| Guide de configuration officiel | https://learn.microsoft.com/en-us/entra/agent-id/identity-platform/agent-id-setup-instructions |
| Configuration assistée par IA | https://learn.microsoft.com/en-us/entra/agent-id/identity-platform/agent-id-ai-guided-setup |
| Microsoft Entra SDK for AgentID — Vue d'ensemble | https://learn.microsoft.com/en-us/entra/msidweb/agent-id-sdk/overview |
| Microsoft Entra SDK for AgentID — Endpoints | https://learn.microsoft.com/en-us/entra/msidweb/agent-id-sdk/endpoints |