エージェント ID ブループリントを作成した後、次の手順は、テスト テナント内の AI エージェントを表す 1 つ以上のエージェント ID を作成することです。 エージェント ID の作成は、通常、新しい AI エージェントをプロビジョニングするときに実行されます。
この記事では、Microsoft Graph API を使用してエージェント ID を作成する単純な Web サービスを構築するプロセスについて説明します。
テスト目的でエージェント ID をすばやく作成する場合 は、この PowerShell モジュールを使用してエージェント ID を作成および使用することを検討してください。
[前提条件]
エージェント ID を作成する前に、次のことを確認してください。
-
エージェント ID について
- 構成済みのエージェント ID ブループリント ( エージェント ブループリントの作成を参照)。 作成プロセスからエージェント ID ブループリント アプリ ID を記録する
- エージェント ID 作成ロジックをホストする Web サービスまたはアプリケーション (ローカルで実行されているか、Azure にデプロイされている)
エージェント ID ブループリントを使用してアクセス トークンを取得する
エージェント ID ブループリントを使用して、各エージェント ID を作成します。 エージェント ID ブループリントを使用して Microsoft Entra からアクセス トークンを要求します。
マネージド ID を資格情報として使用する場合は、まずマネージド ID を使用してアクセス トークンを取得する必要があります。 マネージド ID トークンは、コンピューティング環境でローカルに公開されている IP アドレスから要求できます。 詳細については、 マネージド ID のドキュメントを参照してください。
GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2019-08-01&resource=api://AzureADTokenExchange/.default
Metadata: True
マネージド ID のトークンを取得したら、エージェント ID ブループリントのトークンを要求します。
POST https://login.microsoftonline.com/<my-test-tenant>/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id=<agent-blueprint-id>
scope=https://graph.microsoft.com/.default
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion=<msi-token>
grant_type=client_credentials
client_secret パラメーターは、クライアント シークレットがローカル開発で使用されている場合に、client_assertionとclient_assertion_typeの代わりに使用することもできます。
Microsoft.Identity.Web をインストールするには:
dotnet add package Microsoft.Identity.Web
Microsoft.Identity.Web には、アクセス トークンを自動的に要求し、それを送信 HTTP 要求にアタッチするインターフェイスが含まれています。
Microsoft.Identity.Web を使用する場合は、次の手順に進むことができます。
エージェント ID を作成する
前の手順で取得したアクセス トークンを使用して、テスト テナントにエージェント ID を作成できるようになりました。 エージェント ID の作成は、ユーザーが新しいエージェントを作成するためのボタンを選択するなど、さまざまなイベントやトリガーに応答して発生する可能性があります。
エージェントごとに 1 つのエージェント ID を作成することをお勧めしますが、ニーズに応じて異なるアプローチを選択することもできます。
@odata.typeを使用するときは、常に OData-Version ヘッダーを含めます。
POST https://graph.microsoft.com/beta/serviceprincipals/Microsoft.Graph.AgentIdentity
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
{
"displayName": "My Agent Identity",
"agentIdentityBlueprintId": "<my-agent-blueprint-id>",
"sponsors@odata.bind": [
"https://graph.microsoft.com/v1.0/users/<id>",
"https://graph.microsoft.com/v1.0/groups/<id>"
],
}
Microsoft.Identity.Web を使用して Microsoft Graph API 要求を実行してエージェント ID を作成するには、次の MISE 構成ファイルを追加します。
Warnung
セキュリティ リスクのために、エージェント ID ブループリントの運用環境では、クライアント シークレットをクライアント資格情報として使用しないでください。 代わりに、マネージド ID またはクライアント証明書を使用 するフェデレーション ID 資格情報 (FIC) などのより安全な認証方法を使用してください。 これらの方法により、アプリケーション構成内に機密性の高いシークレットを直接格納する必要がなくなり、セキュリティが強化されます。
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "<my-test-tenant>",
"ClientId": "<my-agent-blueprint-id>",
"Scopes": "access_agent",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "your-client-secret"
}
]
},
"DownstreamApis": {
"agent-identity": {
"BaseUrl": "https://graph.microsoft.com",
"RelativePath": "/beta/serviceprincipals/Microsoft.Graph.AgentIdentity",
"Scopes": ["00000003-0000-0000-c000-000000000000/.default"],
"RequestAppToken": true
}
}
}
ASP.NET Core アプリ (Program.cs) のコードは次の例です。
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web.Resource;
using Microsoft.IdentityModel.S2S.Extensions.AspNetCore;
using MyAgent;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi();
builder.Services.AddInMemoryTokenCaches();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
public class AgentIdentity
{
[JsonPropertyName("@odata.type")]
public string @odata_type { get; set; } = "#Microsoft.Graph.AgentIdentity";
[JsonPropertyName("displayName")]
public string? displayName { get; set; }
[JsonPropertyName("agentIdentityBlueprintId")]
public string? agentIdentityBlueprintId { get; set; }
[JsonPropertyName("id")]
public string? id { get; set; }
[JsonPropertyName("sponsors@odata.bind")]
public string[]? sponsorsOdataBind { get; set; }
[JsonPropertyName("owners@odata.bind")]
public string[]? ownersOdataBind { get; set; }
}
// Create an Agent identity
app.MapGet("/create-agent-identity", async (HttpContext httpContext) =>
{
try
{
// Get the service to call the downstream API (preconfigured in the appsettings.json file)
IDownstreamApi downstreamApi = httpContext.RequestServices.GetRequiredService<IDownstreamApi>();
// Call the downstream API with a POST request to create an Agent Identity
var jsonResult = await downstreamApi.PostForAppAsync<AgentIdentity, AgentIdentity>(
"agent-identity",
new AgentIdentity {
displayName = "My agent identity",
agentIdentityBlueprintId = "<my-agent-blueprint-id>",
sponsorsOdataBind = new [] { "https://graph.microsoft.com/v1.0/users/<id>" }
}
);
return jsonResult?.id;
}
catch (Exception ex)
{
return ex.Message;
}
})
app.Run();
エージェント ID を削除する
エージェントの割り当てが解除または破棄されると、サービスは関連するエージェント ID も削除する必要があります。
DELETE https://graph.microsoft.com/beta/serviceprincipals/<agent-identity-id>
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
// Delete an Agent identity
app.MapGet("/delete-agent-identity", async (HttpContext httpContext, string id) =>
{
// Get the service to call the downstream API (preconfigured in the appsettings.json file)
IDownstreamApi downstreamApi = httpContext.RequestServices.GetRequiredService<IDownstreamApi>();
// Call the downstream API with a DELETE request to remove an Agent Identity
var jsonResult = await downstreamApi.DeleteForAppAsync<string, string>(
"agent-identity",
null!,
options =>
{
options.RelativePath += $"/{id}"; // Specify the ID of the agent identity to delete
});
return jsonResult;
})