次の方法で共有


.NET を使用した Azure AI サービスの認証と認可

Azure AI サービスへのアプリケーション要求は認証する必要があります。 この記事では、.NET を使用して Azure OpenAI やその他の AI サービスに対して認証するために利用できるオプションについて確認します。 これらの概念は、Semantic Kernel SDK だけでなく、Azure OpenAI などの特定のサービスの SDK にも適用できます。 ほとんどの AI サービスは、アプリとユーザーを認証するための以下の 2 つの主な方法を提供しています。

  • キーベース認証は、シークレット キー値を使用して Azure サービスへのアクセスを提供します。 これらのシークレット値は、サービスによっては API キーまたはアクセス キーと呼ばれることもあります。
  • Microsoft Entra ID は、適切な ID がさまざまな Azure リソースへの適切なレベルのアクセス権を持つことを保証するための包括的な ID およびアクセス管理ソリューションを提供します。

これ以降のセクションでは、これら 2 つのアプローチの詳細な実装手順ではなく概念を説明します。 Azure サービスへの接続に関する詳細については、以下のリソースを参照してください。

Note

この記事の例では、主に Azure OpenAI への接続に焦点を当てますが、同じ概念と実装手順が他の多くの Azure AI サービスに対しても同様に直接適用できます。

キーを使用する認証

アクセス キーによって、アプリとツールはサービスによって提供されるシークレット キーを使用して、Azure OpenAI などの Azure AI サービスに対して認証することができます。 Azure portal や Azure CLI などのツールを使用してシークレット キーを取得し、以下のように、それを使用して AI サービスに接続するようにアプリ コードを構成します。

builder.Services.AddAzureOpenAIChatCompletion(
    "deployment-model",
    "service-endpoint",
    "service-key"); // Secret key
var kernel = builder.Build();

キーの使用は簡単な選択肢ですが、このアプローチは慎重に使用する必要があります。 キーは、以下の理由から推奨される認証オプションではありません。

  • 最小限の特権の原則に従っていません。これらは誰が使用するのかやどのようなタスクに対してなのかに関係なく、高度なアクセス許可を提供します。
  • 誤ってソース管理へとチェックインされたり、安全ではない場所に保存される可能性があります。
  • アクセス権を持つべきではないパーティとの共有やそのようなパーティへの送信が容易です。
  • 多くの場合、手動管理とローテーションが必要です。

代わりに、認証には大部分のシナリオでの推奨ソリューションである Microsoft Entra ID を使用することを検討してください。

Microsoft Entra ID を使用する認証

Microsoft Entra ID は、さまざまなビジネス シナリオやアプリ シナリオに対応する膨大な機能セットを提供するクラウドベースの ID およびアクセス管理サービスです。 Microsoft Entra ID は、Azure OpenAI やその他の AI サービスに接続するための推奨ソリューションであり、以下の利点を備えています。

  • ID を使用するキーレス認証。
  • ID に必要最低限のアクセス許可を割り当てるためのロールベースのアクセス制御 (RBAC)。
  • コード変更の必要なしで複数の環境にまたがるさまざまな資格情報を検出するための Azure.Identity クライアント ライブラリを使用できます。
  • 根底にあるキーのローテーションなどの管理上のメンテナンス タスクを自動的に処理します。

アプリ内に Microsoft Entra 認証を実装するワークフローには通常、以下が含まれます。

  • ローカル開発:

    1. Azure CLI や Visual Studio などのローカル開発ツールを使用して Azure にサインインします。
    2. Azure.Identity クライアント ライブラリと DefaultAzureCredential クラスを使用するようにコードを構成します。
    3. サインインしたアカウントに Azure ロールを割り当てて、AI サービスへのアクセスを有効にします。
  • Azure でホストされるアプリ:

    1. Azure.Identity クライアント ライブラリを使用して認証するようにアプリを構成した後、それを Azure にデプロイします。
    2. Azure でホストされるアプリにマネージド ID を割り当てます。
    3. マネージド ID に Azure ロールを割り当てることで、AI サービスへのアクセスを有効にします。

このワークフローの主な概念については、以降のセクションで確認します。

Azure に対してローカルで認証する

Azure AI サービスに接続するアプリをローカルで開発する場合は、Visual Studio や Azure CLI などのツールを使用して Azure に対して認証します。 「アプリ コードを構成する」セクションで説明されているように、ローカル資格情報は、Azure.Identity クライアント ライブラリによって検出され、Azure サービスに対してアプリを認証するために使用されます。

たとえば、Azure CLI を使用して Azure に対してローカルで認証するには、次のコマンドを実行します。

az login

アプリ コードを構成する

Azure SDK の Azure.Identity クライアント ライブラリを使用して、コード内に Microsoft Entra 認証を実装します。 Azure.Identity ライブラリには DefaultAzureCredential クラスが含まれており、これは現在の環境と利用可能なツールに基づいて利用可能な Azure 資格情報を自動的に検出します。 サポートされている環境の資格情報の完全なセットと、それらが検索される順序については、Azure SDK for .NET のドキュメントを参照してください。

たとえば、次のコードを使用して、DefaultAzureCredential を使用して認証するように Semantic Kernel を構成します。

Kernel kernel = Kernel
    .CreateBuilder()
    .AddAzureOpenAITextGeneration(
        "your-model",
        "your-endpoint",
        new DefaultAzureCredential())
    .Build();

DefaultAzureCredential を使用すると、コードを変更することなくアプリをローカル開発から運用環境に昇格できます。 たとえば、DefaultAzureCredential は開発中は Visual Studio または Azure CLI のローカル ユーザー資格情報を使用して AI サービスに対して認証します。 アプリが Azure にデプロイされると、DefaultAzureCredential はアプリに割り当てられているマネージド ID を使用します。

ID にロールを割り当てる

Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure リソースのきめ細かいアクセス管理を提供するシステムです。 DefaultAzureCredential が Azure AI サービスに接続するために使用するセキュリティ プリンシパルにロールを割り当てます。これは個々のユーザー、グループ、サービス プリンシパル、マネージド ID のいずれであっても構いません。 Azure ロールは、ID が補完の生成やリソースの作成と削除などのさまざまなタスクを実行できるようにするアクセス許可のコレクションです。

Azure CLI、Bicep、Azure portal などのツールを使用して、Cognitive Services OpenAI ユーザー (ロール ID: 5e0bd9bd-7b93-4f28-af87-19fc36ad61bd) などのロールを関連 ID に割り当てます。 たとえば、以下のように az role assignment create コマンドを使用して、Azure CLI を使用してロールを割り当てます。

az role assignment create \
        --role "5e0bd9bd-7b93-4f28-af87-19fc36ad61bd" \
        --assignee-object-id "$PRINCIPAL_ID" \
        --scope /subscriptions/"$SUBSCRIPTION_ID"/resourceGroups/"$RESOURCE_GROUP" \
        --assignee-principal-type User

以下のリソースを使用して Azure RBAC の詳細について確認してください。

マネージド ID をアプリに割り当てる

ほとんどのシナリオでは、Azure でホストされるアプリは、マネージド ID を使用して Azure OpenAI などの他のサービスに接続するべきです。 マネージド ID は、アプリが Microsoft Entra 認証をサポートするリソースに接続する際に使用できる Microsoft Entra ID 内のフル マネージド ID を提供します。 DefaultAzureCredential は、アプリに関連付けられている ID を検出し、それを使用して他の Azure サービスに対して認証します。

アプリに割り当てることができるマネージド ID には、以下の 2 種類があります。

  • システム割り当て ID はアプリケーションに関連付けられているため、アプリが削除されると削除されます。 アプリは 1 つのシステム割り当て ID しか持つことはできません。
  • ユーザー割り当て ID は、アプリに割り当てることができるスタンドアロン Azure リソースです。 アプリは複数のユーザー割り当て ID を持つことができます。

個々のユーザー アカウントと同様に、Cognitive Services OpenAI ユーザー ロールなどのロールをマネージド ID に割り当てます。 以下のリソースを使用してマネージド ID の操作の詳細について確認してください。