次の方法で共有


Microsoft Entra ID を使用して Azure でホストされているアプリから Azure OpenAI に対して認証する

この記事では、Microsoft Entra ID マネージド IDMicrosoft.Extensions.AI ライブラリ を使用して、Azure OpenAI リソースに対して Azure でホストされているアプリを認証する方法について説明します。

Microsoft Entra ID のマネージド ID を使用すると、アプリは Azure OpenAI などの他の Microsoft Entra で保護されたリソースに簡単にアクセスできます。 ID は Azure プラットフォームによって管理されるため、シークレットをプロビジョニング、管理、ローテーションする必要はありません。

前提 条件

App Service にマネージド ID を追加する

マネージド ID は、Microsoft Entra 認証をサポートするリソースに接続するときにアプリケーションが使用するために、Microsoft Entra ID で自動的にマネージド ID を提供します。 アプリケーションでは、マネージド ID を使用して、資格情報を管理することなく Microsoft Entra トークンを取得できます。 アプリケーションには、次の 2 種類の ID を割り当てることができます。

  • システム割り当て ID はアプリケーションに関連付けられ、アプリが削除されると削除されます。 1 つのアプリに割り当てることができるシステム割り当て ID は 1 つだけです。
  • ユーザー割り当て ID は、アプリに割り当てることができるスタンドアロンの Azure リソースです。 アプリは、複数のユーザー割り当て ID を持つことができます。
  1. Azure portalでアプリのページに移動し、[設定] グループまで下にスクロールします。

  2. [ID] を選択します。

  3. [システム割り当て済み] タブで、[状態] を[オン] に切り替え、[保存] を選択します。

    システム割り当てマネージド ID をアプリに追加する方法を示すスクリーンショット。

    手記

    上のスクリーンショットは、Azure App Service でのこのプロセスを示していますが、手順は Azure Container Apps などの他のホストでも似ています。

az webapp identity assign コマンドを実行して、システム割り当て ID を作成します。

az webapp identity assign --name <appName> --resource-group <groupName>

AZURE OpenAI ユーザー ロールを ID に追加する

  1. Azure Portalで、 Azure OpenAI にアクセス許可を与えるスコープに移動します。 スコープには、管理グループサブスクリプションリソース グループ、または Azure OpenAI リソース 指定できます。

  2. 左側のナビゲーション ウィンドウで、アクセス制御 (IAM)を選択します。

  3. [追加] を選択し、 [ロールの割り当ての追加] を選択します。

    RBAC ロールを追加する方法を示すスクリーンショット。

  4. [ロール] タブで、Cognitive Services OpenAI ユーザー ロールを選択します。

  5. [メンバー] タブで、マネージド ID を選択します。

  6. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

Azure CLI を使用して、さまざまなスコープで Cognitive Services OpenAI ユーザー ロールをマネージド ID に割り当てることができます。

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"

アプリ コードに ID 認証を実装する

  1. 次の NuGet パッケージをアプリに追加します。

    dotnet add package Azure.Identity
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    

    上記のパッケージはそれぞれ、このシナリオに関する次の懸念事項を処理します。

    • Azure.Identity: Microsoft Entra ID を操作するためのコア機能を提供します
    • Azure.AI.OpenAI: アプリが Azure OpenAI サービスとインターフェイスできるようにします
    • Microsoft.Extensions.Azure: 依存関係の挿入用にサービスを登録するためのヘルパー拡張機能を提供します
    • Microsoft.Extensions.AI: 一般的な AI タスクの AI 抽象化を提供します
    • Microsoft.Extensions.AI.OpenAI: Microsoft.Extensions.AI によって提供される AI 抽象化として OpenAI サービスの種類を使用できます
  2. アプリの Program.cs ファイルで、使用可能な資格情報を検出して構成する DefaultAzureCredential オブジェクトを作成します。

    // For example, will discover Visual Studio or Azure CLI credentials
    // in local environments and managed identity credentials in production deployments
    var credential = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            // If necessary, specify the tenant ID,
            // user-assigned identity client or resource ID, or other options
        }
    );
    
  3. AI サービスを作成し、サービス コレクションに登録します。

    string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"];
    string deployment = builder.Configuration["AZURE_OPENAI_GPT_NAME"];
    
    builder.Services.AddChatClient(
        new AzureOpenAIClient(new Uri(endpoint), credential)
        .AsChatClient(deployment));
    
  4. エンドポイントで使用するために登録済みサービスを挿入します。

    app.MapGet("/test-prompt", async (IChatClient chatClient) =>
    {
        return await chatClient.CompleteAsync("Test prompt", new ChatOptions());
    })
    .WithName("Test prompt");
    

    ヒント

    ASP.NET Core 依存関係の挿入の詳細と、Azure SDK for .NET 依存関係の挿入 ドキュメントで他の AI サービスの種類を登録する方法について説明します。