次の方法で共有


Azure API Management を使用して LLM API へのアクセスを認証および承認する

適用対象: すべての API Management レベル

この記事では、Azure API Management が管理する AI API エンドポイントへのアクセスを認証および承認する方法について説明します。 この記事では、次の一般的な方法を示します:

  • 認証 - API キーまたは Microsoft Entra ID マネージド ID を使用するポリシーを使用して、AI API に対して認証します。

  • 認証 - アクセスの制御をより細かく行うために、Microsoft Entra ID などの ID プロバイダーによって生成された OAuth 2.0 トークンを渡す要求を事前認証します。

バックグラウンドについては、以下を参照してください:

[前提条件]

この記事の例に従うには、次のものが必要です。

API キーを使用して認証する

AI API に対する既定の認証方法は、API キーを使用することです。 この種類の認証では、すべての API 要求に有効な API キーを HTTP ヘッダーに含める必要があります。 ヘッダー名は API によって異なります。 たとえば、Microsoft Foundry API の Azure OpenAI では、 api-key ヘッダーが使用されます。

  • API Management では、 名前付き値を使用して、安全な方法で API キーを管理できます。
  • API ポリシーで名前付き値を参照して、API への要求の api-key ヘッダーを設定できます。 次の 2 つの例は、これを行う方法を示しています。1 つは set-backend-service ポリシーを使用し、もう 1 つは set-header ポリシーを使用します。

名前付きの値に API キーを格納する

API Management の名前付き値に Azure OpenAI API キーを格納する方法の例を次に示します。

  1. AI モデルのデプロイから API キーを取得します。 Azure OpenAI モデルのデプロイの場合は、Microsoft Foundry ポータルのプロジェクトの ホーム ページでこの情報を見つけます。
  2. Azure API Management インスタンスに移動し、左側のメニューから [名前付きの値] を選択します。
  3. [ + 追加] を選択し、値をシークレットとして追加します。 セキュリティを強化するには、必要に応じて キー コンテナー参照を使用します。

API 要求で API キーを渡す - set-backend-service ポリシー

  1. Azure OpenAI API をポイントするバックエンドを作成します。

    1. API Management インスタンスの左のメニューで、[バックエンド] を選択します。
    2. [+ 追加] を選択し、バックエンドにわかりやすい名前を入力します。 例: openai-backend
    3. [種類][カスタム] を選択し、Azure OpenAI エンドポイントの URL を入力します。 例: https://contoso.services.ai.azure.com/openai
    4. [認可資格情報] で、[ヘッダー] を選択し、ヘッダー名として api-key と入力し、値として名前付きの値を入力します。
    5. を選択してを作成します。
  2. set-backend-service ポリシー セクションに次の inbound ポリシー スニペットを追加して、要求の API キーを Azure OpenAI API に渡します。

    この例では、バックエンド リソースは openai-backend です。

    <set-backend-service backend-id="openai-backend" />
    

API 要求で API キーを渡す - set-header ポリシー

または、set-header ポリシー セクションに次の inbound ポリシー スニペットを追加して、要求の 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 による認証

Azure OpenAI やその他の Microsoft Foundry のモデル デプロイの場合は、Microsoft Entra ID のマネージド ID を使用して認証します。 背景については、「 Microsoft Entra ID 認証を使用して Microsoft Foundry Models で Azure OpenAI を構成する方法」を参照してください。

認証にマネージド ID を使用するように API Management インスタンスを構成するには、次の手順に従います。

  1. API Management インスタンスで、システムによって割り当てられた、またはユーザーが割り当てたマネージド ID を有効にします。 次の例では、インスタンスのシステム割り当てマネージド ID を有効にしていることを前提としています。

  2. マネージド ID に、適切なリソースをスコープとして [Cognitive Services OpenAI ユーザー] ロールを割り当てます。 たとえば、システム割り当てマネージド ID に、Microsoft Foundry リソースの Cognitive Services OpenAI ユーザー ロールを割り当てます。 詳しい手順については、「Azure OpenAI Service のロールベースのアクセス制御」を参照してください。

  3. マネージド ID を使用して 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> 
    

ヒント

この例で示す authentication-managed-identity ポリシーと set-header ポリシーを使用する代わりに、API 要求を AI サービス エンドポイントに送信する バックエンド リソースを構成できます。 バックエンド構成で、 https://cognitiveservices.azure.com/ リソースへのマネージド ID 資格情報を構成します。 Microsoft Foundry から API を直接インポートすると、Azure API Management によってこれらの手順が自動化されます。

ID プロバイダーを使用した OAuth 2.0 承認

特定のユーザーまたはクライアントによる Azure OpenAPI またはその他の LLM API へのよりきめ細かなアクセスを有効にするには、Microsoft Entra ID または別の ID プロバイダーで OAuth 2.0 承認を使用して API へのアクセスを事前認証します。 バックグラウンドについては、「OAuth 2.0 承認と Microsoft Entra ID を使用して Azure API Management で API を保護する」を参照してください。

多層防御戦略の一環として OAuth 2.0 認証を使用します。 これは、Azure OpenAI API に対する API キー認証またはマネージド ID 認証に代わるものではありません。

次の手順では、ID プロバイダーを使用して承認されたユーザーまたはアプリへの API アクセスを制限する方法を示します。

  1. Azure API Management で AI API を表すアプリケーションを ID プロバイダーに作成します。 Microsoft Entra ID を使用している場合は、Microsoft Entra ID テナントにアプリケーションを登録します。 アプリケーション ID や対象ユーザー URI などの詳細を記録してください。

    必要に応じて、AI API にアクセスするために必要なきめ細かいアクセス許可を表すロールまたはスコープを持つアプリケーションを構成します。

  2. API Management インスタンスに inbound ポリシー スニペットを追加して、Authorization ヘッダーに JSON Web トークン (JWT) を提示する要求を検証します。 Azure OpenAI API に対して認証するように設定した他の inbound ポリシーより 前に、このスニペットを配置してください。

    次の例は、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>