Azure API ManagementによるAPI保護

この記事の内容

  • Azure API ManagementとManaged Identity(マネージドID)を組み合わせることで、APIのセキュリティを大幅に強化できます
  • すべてのAPIアクセスをAPI Management経由に統一することで、認証・認可を一元管理できます
  • Azure FunctionsをバックエンドとしてAPI Managementと連携させる具体的な構成例を紹介します
  • APIキー不要でAzure OpenAI Serviceを安全に利用する応用パターンも解説します
  • レート制限や負荷分散など、API Managementならではの高度な制御機能についても触れます

API Managementの役割とは

Azure API Managementは、その名の通りAPIを管理するためのサービスです。必須のサービスではありませんが、APIのセキュリティ強化、ログ取得、流量制御(レート制限)など、高度な管理を行いたい場合に非常に役立ちます。

多機能であるがゆえに、どのような場面で活用すればよいか分からないという方も少なくないでしょう。この記事では、API Managementを使った効果的なセキュリティアーキテクチャの一例をご紹介します。


API Managementによる認証・認可の一元管理

API Managementを導入する大きなメリットの一つは、認証・認可の一元管理です。すべてのAPI呼び出しをAPI Management経由に統一することで、誰がどのAPIにアクセスできるかを集中管理できます。

さらに、Managed Identity認証を組み合わせることで、「このAPI Managementからのみ、バックエンドの各サービス(Azure FunctionsやContainer Appsなど)を呼び出せる」という構成を実現できます。これにより、API Managementを経由しない不正なアクセスをすべて拒否することが可能になり、セキュリティが大幅に向上します。

この構成を取ることで、意図しないサービスの利用を防ぎ、すべてのAPIアクセスをAPI Managementで一元的に管理・監視できるため、安全で効率的な運用が実現します。


具体的な構成例:API ManagementとAzure Functionsの連携

ここでは具体的な構成例として、API ManagementとAzure Functionsを連携させる方法を見ていきましょう。

バックエンド(Azure Functions)側の設定

この構成で最も重要なポイントは、バックエンドとなるAzure Functions側の設定です。Functionsの認証設定で、特定のクライアントアプリケーション(この場合はAPI ManagementのManaged Identity)からのリクエストのみを許可するよう構成します。

これにより、FunctionsのURLを知っていたとしても、第三者が直接APIを呼び出すことはできなくなります。許可されたAPI Managementからのアクセスにのみ限定される、という強固な制御が実現します。

API Management側のポリシー設定

次に、API Management側では、受け取ったリクエストをそのままバックエンドに転送するのではなく、インバウンド処理ポリシーを設定します。このポリシーの役割は以下の通りです。

  1. API ManagementのManaged Identityを利用して、バックエンドのAzure FunctionsにアクセスするためのアクセストークンをMicrosoft Entra IDから取得します
  2. 取得したアクセストークンを、リクエストのヘッダーに付与します
  3. トークンが追加されたリクエストを、バックエンドのAzure Functionsに転送します

インバウンド処理ポリシーの設定イメージは以下のようになります。

<inbound>
    <authentication-managed-identity resource="https://<your-function-app>.azurewebsites.net" />
    <base />
</inbound>

このポリシーによって、API Managementはバックエンドサービスに対して正当な呼び出し元であることを証明できます。


構成全体の仕組み

この仕組み全体の流れを整理すると、以下のようになります。

AMAAPiPzIcIurrMoMeasanonFafaugtgneecmEmteneintnotrtnasID
  1. クライアントがAPI Managementのエンドポイントを呼び出します
  2. API Managementは、自身のManaged Identityを使い、Microsoft Entra IDに対してバックエンドサービスへのアクセストークンを要求します
  3. 取得したアクセストークンをリクエストヘッダーに埋め込み、バックエンドのAzure Functionsに転送します
  4. Azure Functionsは、リクエストに含まれるトークンを検証し、正当なAPI Managementからの呼び出しであることを確認して処理を実行します

これにより、クライアントとバックエンドの間にセキュアな中継点が確立されます。


応用例:Azure OpenAI Serviceとの連携

このアーキテクチャは、Azure Functions以外のサービスにも応用可能です。Azure OpenAI Serviceと組み合わせる例を考えてみましょう。

OpenAIリソースへのアクセスを従来のAPIキーベース認証からMicrosoft Entra IDベースの認証に切り替え、API ManagementのManaged Identityにのみアクセス許可を付与します。これにより、APIキーがコードや設定ファイルに漏洩するリスクなしに、安全にAzure OpenAIの機能を利用できます。

さらに、API Managementの機能を活用すれば、以下のような高度な制御も実現できます。

レート制限(Rate Limiting)

特定のユーザーやアプリケーションからの呼び出し回数を制限し、サービスの乱用や意図しないコスト増を防ぎます。

<rate-limit-by-key calls="10" renewal-period="60" counter-key="@(context.Subscription.Id)" />

負荷分散

複数のOpenAIリソースをバックエンドに配置し、API Managementがリクエストを振り分けることで、実質的な処理能力を向上させることが可能です。


まとめ

API Managementをアーキテクチャに組み込むことで、セキュリティを大幅に強化し、柔軟なAPI管理が可能になります。今回ご紹介したポイントを振り返ります。

  • 認証・認可の一元管理: すべてのAPIアクセスをAPI Management経由に統一することで、バックエンドへの不正アクセスを防止できます
  • Managed Identityの活用: APIキーを使わずにバックエンドサービスへ安全に接続でき、シークレット漏洩リスクをゼロにできます
  • インバウンドポリシー: API Managementでトークン取得・付与を自動化することで、クライアント側の実装をシンプルに保てます
  • Azure OpenAI Serviceへの応用: 同じパターンをOpenAIリソースに適用することで、セキュアかつコスト制御されたAI活用が実現します

最初は少し複雑に感じるかもしれませんが、一度仕組みを理解すれば様々なサービスに応用できる非常に強力なパターンです。ぜひ、この機会にAPI Managementの活用を検討してみてください。