Azure OpenAI のマネージド ID を使用する利点

完了

マネージド ID を使用する場合は、JavaScript アプリケーションで DefaultAzureCredential または ManagedIdentityCredential クラスのインスタンスを作成するときに、ユーザーマネージド ID のクライアント ID を指定する必要があります。 クライアント ID 値は、マネージド ID の設定時に $AZURE_CLIENT_ID 環境変数として確立されます。

一見すると、エンドポイント URL を除いて、接続に必要な唯一の重要な情報であると思われる場合があります。

import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { AzureOpenAI } from "openai";

// set environment variable AZURE_CLIENT_ID
const credential = new DefaultAzureCredential();
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);

const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "<endpoint>";
const deployment = "<your Azure OpenAI deployment name>";
const apiVersion = "2024-05-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }

const client = new AzureOpenAI(options);

漏洩したクライアント ID と漏洩した API キーの影響を評価してみましょう。

API キーは、通常のパスワードと同様に機能します。 侵害された場合、キーを持つすべてのユーザーがリソースにアクセスできます。 Azure OpenAI の場合、これは GPT-4 のような AI モデルを無制限に使用することです。 ネットワークにパブリックにアクセスできる場合、セキュリティへの影響がさらに大きくなる可能性があります。

逆に、クライアント ID が漏洩した場合、リスクは最小限に抑えられます。 これは、クライアント ID だけでは Azure OpenAI への接続を確立できないためです。 マネージド ID を利用するには、サービスが Azure で動作している必要があります。また、Azure OpenAI がパブリックであっても、アプリケーションを使用してローカル環境またはネットワーク経由で接続することはできません。

さらに、マネージド ID に対して次のロールの割り当てが構成されます。

az role assignment create --assignee $USER_MANAGED_ID_PRINCIPAL_ID \
--scope $OPEN_AI_RESOURCE_ID \
--role "Cognitive Services OpenAI User"

これにより、このユーザー ID を使用してアクションを実行できるようになります (詳細については、モジュールの後半で説明します)。 ここでは、Cognitive Services OpenAI ユーザー ロールが Azure OpenAI サービスに割り当てられ、Azure OpenAI 内の操作に対するアクセス許可が制限されます。

要約すると、漏洩した API キーの影響と比較して、漏洩したクライアント ID を悪用するにはいくつかの手順が必要であり、悪意のあるアクターが悪用するのが困難になります。 このような理由から、マネージド ID は、API キーと比較して、操作を管理するためのより安全な方法を提供します。 Azure OpenAI またはマネージド ID をサポートする他の Azure サービスに対して認証を行うときは、API キーよりもマネージド ID を使用することをお勧めします。