Microsoft が管理する世界のデータ センター ネットワークを介してアプリケーションとサービスを構築、配置、および管理するインフラストラクチャおよびクラウド コンピューティング プラットフォーム。
takezawa_skk 様、こんにちは。
Microsoft Q&A プラットフォームへようこそ!ご質問いただきありがとうございます。以下の解決策をご確認ください。さらに詳細な手順が必要な場合はお知らせください。
想定されるワークフロー
Web PubSub → APIM (パブリック/アクセス可能) → APIM が AAD トークン (マネージド ID) を取得 → APIM が Authorization: Bearer <token> でリクエストを転送 → 関数 (AAD/Easy Auth で保護) が呼び出しを受け入れます。
手順
- Web PubSub イベント Webhook を受信する APIM 操作を作成します。例のパス:
POST(およびOPTIONS) をサポートする/webpubsub/{event}。 - APIM インスタンスでマネージド ID (システム割り当てまたはユーザー割り当て) を有効にします。
- Microsoft Entra (App Service 認証 / Azure AD) を使用して Function App を保護します。トークンの対象ユーザーとして、App ID URI を公開するか、App のクライアント ID を使用します。
- APIM 受信ポリシーを追加してトークンを取得し、バックエンド呼び出し用の
Authorizationヘッダーをアタッチします。サンプルポリシースニペット:
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Request.Method == \"OPTIONS\")">
<return-response>
<set-status code="204" reason="No Content" />
</return-response>
</when>
</choose>
<authentication-managed-identity resource="https://{your-function-app-appid-uri}" output-token-variable-name="msi-token" />
<set-header name="Authorization" exists-action="override">
<value>@("Bearer " + (string)context.Variables["msi-token"])</value>
</set-header>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
</policies>
- Web PubSub を構成します。イベント ハンドラーの URL テンプレートを APIM のエンドポイントに設定します (例:
https://api.contoso.com/webpubsub/{event})。 - エンドツーエンドのテストを行います。OPTIONS プローブの応答、APIM トークンの取得、および Function がトークンを受け入れてイベントを処理することを検証します。
考慮すべき重要なポイント
- APIM の到達可能性: Web PubSub は APIM エンドポイントを呼び出すことができる必要があります。APIM がプライベートの場合は、Web PubSub が APIM へのネットワーク アクセス (プライベート リンク) を持っていることを確認するか、直接プライベート呼び出しを行うために Web PubSub 共有プライベート エンドポイントを使用します。
- トークンの対象ユーザー/リソース: トークンを取得する際、Function App の App ID URI またはクライアント ID をリソース/対象ユーザーとして使用します。
- OPTIONS/プローブ処理: Web PubSub はプローブを送信する場合があります。 APIM は、障害を回避するために、
OPTIONSに対して 204 またはその他の許容可能な応答を返す必要があります。 - ファンクションキーは不要: マネージド ID と AAD を組み合わせることで、APIM にファンクションキーを保存する必要がなくなります (セキュリティ強化のため推奨)。
- ネットワークとレイテンシ: APIM が Function のプライベートエンドポイント (VNet/統合) に到達できることを確認し、負荷時の追加レイテンシを測定します。
- 最小限の権限: APIM のマネージド ID に必要な権限のみを付与します。可能な場合は、環境ごとにユーザー割り当て ID を優先します。
制限事項
- 複雑さ: このパターンでは、マネージド ID、Microsoft Entra アプリ登録または App Service 認証設定、および APIM ポリシーを正しく構成する必要があります。
- プライベートネットワークの制約: APIM をプライベートにする場合は、Web Pub/Sub のネットワーク到達可能性を解決する必要があります。パスに APIM が必要ない場合は、Web Pub/Sub 共有プライベートエンドポイント機能を代替手段として使用できます。
- 関数認証の不一致: 関数が依然として
?code=関数キーを必要とする場合は、AAD 認証に移行するか、APIM を調整して関数キーを挿入してください(セキュリティが低下します)。 - トークンの有効期間と更新: APIM は有効期限までトークンをキャッシュします。トークンの有効期間がニーズに適合していることを確認してください。