Azure API Management を使用して Azure OpenAI API に対するアクセスの認証と認可を行う
適用対象: すべての API Management レベル
この記事では、Azure API Management を使用して管理されている Azure OpenAI API エンドポイントに対する認証と認可を行う方法について学習します。 この記事では、次の一般的な方法を示します。
認証 - API キーまたは Microsoft Entra ID マネージド ID を使用して認証するポリシーを使用して Azure OpenAI API に対して認証を行います。
認可 - アクセスの制御をより細かく行うために、Microsoft Entra ID などの ID プロバイダーによって生成された OAuth 2.0 トークンを渡す要求を事前認可します。
背景については、以下を参照してください。
前提条件
この記事のステップを実行するには、以下が必要です。
- API Management インスタンス。 例のステップについては、Azure API Management インスタンスの作成に関する記事を参照してください。
- API Management インスタンスに追加された Azure OpenAI リソースとモデル。 例のステップについては、「REST API として Azure OpenAI API をインポートする」を参照してください。
- Azure サブスクリプションに (OAuth 2.0 認可のために) 関連付けられている Microsoft Entra テナントなどの ID プロバイダーでアプリ登録を作成するためのアクセス許可。
API キー で認証する
Azure OpenAI API に対する既定の認証方法は、API キーを使用することです。 この種類の認証の場合、すべての API 要求で、api-key
HTTP ヘッダーに有効な API キーを含める必要があります。
- API Management では、名前付きの値を使用して、安全な方法で API キーを管理できます。
- その後、名前付きの値を API ポリシーで参照して、Azure OpenAI API への要求の
api-key
ヘッダーを設定できます。 この方法の 2 つの例を示します。1 つはset-backend-service
ポリシーを使用し、もう 1 つはset-header
ポリシーを使用します。
名前付きの値に API キーを格納する
- Azure OpenAI リソースから API キーを取得します。 Azure portal で、Azure OpenAI リソースの [キーとエンドポイント] ページでキーを見つけます。
- Azure API Management インスタンスに移動し、左側のメニューから [名前付きの値] を選択します。
- [+ 追加] を選択し、値をシークレットとして追加するか、必要に応じてキー コンテナー参照を使用してセキュリティを高めます。
API 要求で API キーを渡す - set-backend-service ポリシー
Azure OpenAI API を指すバックエンドを作成します。
- API Management インスタンスの左側のメニューで [バックエンド] を選択します。
- [+ 追加] を選択し、バックエンドにわかりやすい名前を入力します。 例: openai-backend。
- [種類] で [カスタム] を選択し、Azure OpenAI エンドポイントの URL を入力します。 例:
https://contoso.openai.azure.com/openai
。 - [認可資格情報] で、[ヘッダー] を選択し、ヘッダー名として「api-key」と入力し、値として名前付きの値を入力します。
- [作成] を選択します
inbound
ポリシー セクションに次のset-backend-service
ポリシー スニペットを追加して、要求の API キーを Azure OpenAI API に渡します。この例では、バックエンド リソースは openai-backend です。
<set-backend-service backend-id="openai-backend" />
API 要求で API キーを渡す - set-header ポリシー
または、inbound
ポリシー セクションに次の set-header
ポリシー スニペットを追加して、要求の API キーを Azure OpenAI API に渡します。 このポリシー スニペットは、設定した名前付きの値を api-key
ヘッダーに設定します。
この例では、API Management の名前付きの値は openai-api-key です。
<set-header name="api-key" exists-action="override">
<value>{{openai-api-key}}</value>
</set-header>
マネージド ID による認証
Microsoft Entra ID のマネージド ID を使用して Azure OpenAI API に対して認証する別の方法です。 背景については、「マネージド ID を使用して Azure OpenAI Service を構成する方法」を参照してください。
マネージド ID を使用して Azure OpenAI API への要求を認証するように API Management インスタンスを構成するステップを次に示します。
API Management インスタンスで、システムによって割り当てられた、またはユーザーが割り当てたマネージド ID を有効にします。 次の例は、インスタンスのシステム割り当てマネージド ID が有効になっていることを前提としています。
マネージド ID に、適切なリソースをスコープとして Cognitive Services OpenAI ユーザー ロールを割り当てます。 たとえば、システム割り当てマネージド ID に、Azure OpenAI リソースの Cognitive Services OpenAI ユーザー ロールを割り当てます。 詳細なステップについては、「Azure OpenAI Service のロールベースのアクセス制御」を参照してください。
マネージド ID を使用して Azure OpenAI API に対する要求を認証するため、
inbound
ポリシー セクションに次のポリシー スニペットを追加します。次の点に注意してください。
authentication-managed-identity
ポリシーは、マネージド ID のアクセス トークンを取得します。set-header
ポリシーは、アクセス トークンを使用して要求のAuthorization
ヘッダーを設定します。
<authentication-managed-identity resource="https://cognitiveservices.azure.com" output-token-variable-name="managed-id-access-token" ignore-error="false" /> <set-header name="Authorization" exists-action="override"> <value>@("Bearer " + (string)context.Variables["managed-id-access-token"])</value> </set-header>
ID プロバイダーを使用した OAuth 2.0 認可
特定のユーザーまたはクライアントによる OpenAPI API へのよりきめ細かなアクセスを有効にするために、Microsoft Entra ID または別の ID プロバイダーで OAuth 2.0 認可を使用して Azure OpenAI API へのアクセスを事前認可できます。 背景については、「OAuth 2.0 認可と Microsoft Entra ID を使用して Azure API Management で API を保護する」を参照してください。
Note
多層防御戦略の一環として OAuth 2.0 認可を使用します。 これは、Azure OpenAI API に対する API キー認証またはマネージド ID 認証に代わるものではありません。
ID プロバイダーを使用して認可されたユーザーまたはアプリへの API アクセスを制限するステップの概要を次に示します。
Azure API Management で OpenAI API を表すアプリケーションを ID プロバイダーに作成します。 Microsoft Entra ID を使用している場合は、Microsoft Entra ID テナントにアプリケーションを登録します。 アプリケーション ID や対象ユーザー URI などの詳細を記録してください。
必要に応じて、Azure OpenAI API にアクセスするために必要なきめ細かいアクセス許可を表すロールまたはスコープを持つアプリケーションを構成します。
API Management インスタンスに
inbound
ポリシー スニペットを追加して、Authorization
ヘッダーに JSON Web トークン (JWT) を提示する要求を検証します。 Azure OpenAI API に対して認証するように設定した他のinbound
ポリシーより "前に"、このスニペットを配置してください。Note
次の例は、JWT を検証するためのポリシーの一般的な構造を示しています。 ID プロバイダーやアプリケーションと API の要件に合わせてカスタマイズしてください。
validate-azure-ad-token - Microsoft Entra ID を使用する場合は、JWT の対象ユーザーと要求を検証するように
validate-azure-ad-token
ポリシーを構成します。 詳細については、ポリシーのリファレンスを参照してください。<validate-azure-ad-token tenant-id={{TENANT_ID}} header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid."> <client-application-ids> <application-id>{{CLIENT_APP_ID}}</application-id> </client-application-ids> <audiences> <audience>...</audience> </audiences> <required-claims> <claim name=...> <value>...</value> </claim> </required-claims> </validate-azure-ad-token>
validate-jwt - 別の ID プロバイダーを使用する場合は、JWT の対象ユーザーと要求を検証するように
validate-jwt
ポリシーを構成します。 詳細については、ポリシーのリファレンスを参照してください。<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid."> <openid-config url={{OPENID_CONFIGURATION_URL}} /> <issuers> <issuer>{{ISSUER_URL}}</issuer> </issuers> <audiences> <audience>...</audience> </audiences> <required-claims> <claim name=...> <value>...</value> </claim> </required-claims> </validate-jwt>