【APIM連載 第2回】Azure API Management 応用編 - ポリシーとセキュリティを極める

第1回ではAzure API Management(APIM)の基本概念とAPI登録方法を学びました。今回は、ポリシー機能を使ったAPI動作の制御、高度なセキュリティ設定、バックエンドサービスとの統合など、本番環境で必要となる実践的なテクニックを詳しく解説します。

本記事を読むことで、APIのセキュリティ強化、パフォーマンス最適化、そして柔軟なAPI管理が可能になります。

この記事を読むとできるようになることは以下の通りです。

  • ポリシーを使ってAPI動作を柔軟に制御できる
  • レート制限でAPIを保護できる
  • IP制限で多層防御を実装できる
  • バックエンドサービスとの統合パターンを理解できる

※本記事は、第1回の内容を理解していることを前提としています。第1回の内容を理解していると、よりスムーズに理解できます。未読の方は、先に第1回をご覧いただくと理解が深まります。 blog.jbs.co.jp

開発者ポータルの詳細

このセクションでは、以下を学びます。

  • 開発者ポータルの役割と主要機能を理解する
  • API利用者がどのようにセルフサービスでAPIを利用開始できるかを学ぶ

開発者ポータルの役割

開発者ポータルは、API利用者(開発者)向けのセルフサービスポータルです。主な特徴は以下の通りです。

  • APIMインスタンス作成時に自動生成される
  • Azure Portalから「発行」操作を行うことで利用可能になる
  • 一度発行すれば、API利用者が自由にアクセスできる

開発者ポータルにより、API提供者と利用者の間の手動的なやり取りを最小限に抑え、迅速なAPI利用開始が可能になります。

開発者ポータルの公開手順

初めて開発者ポータルを利用する場合は、以下の手順で公開します。

  1. 左側のメニューから「開発者ポータル」を選択
  2. 「公開」ボタンをクリック  

    開発者ポータル公開画面

  3. 発行完了後、「ポータルURL」リンクから開発者ポータルにアクセス

ポータルURL確認

本記事ではデフォルトの標準機能とUIを使用して解説します。開発者ポータルはロゴ、色、レイアウトなどのカスタマイズが可能ですが、ここでは扱いません。

なお、カスタマイズが必要な場合は、以下の手順で「開発者ポータル」を開いて操作できます。

 

開発者ポータルカスタマイズ

では、実際に開発者ポータルの主要機能を見ていきましょう。

API利用者のセルフサービス体験

開発者ポータルを使用することで、API利用者は管理者の介入なしに、すぐにAPIの利用を開始できます。

開発者ポータルは以下の機能が提供されます。

機能 説明
ユーザー登録 セルフサービスでアカウント作成
サインイン Microsoft Entra ID、GitHub、Googleなど複数の認証方式をサポート
製品へのサブスクリプション 利用したい製品にサブスクライブ
APIキー管理 主キー・副キーの表示、再生成
API一覧表示 公開されているAPIを表示
APIドキュメント 各APIの詳細定義、パラメータ、レスポンス例を表示
インタラクティブコンソール ブラウザ上でAPIを直接テスト実行
ホーム画面

開発者ポータルのURLhttps://[APIMインスタンス名].developer.azure-api.netを開くと、ホーム画面が表示されます。

開発者ポータルホーム画面

ホーム画面には、以下のようなメニューが表示されています。

メニュー 説明
Home 開発者ポータルのトップページ
APIs 公開されているAPI一覧。各APIの詳細定義やドキュメントにアクセス可能
Products 利用可能な製品一覧。製品にサブスクライブしてAPIキーを取得する
Sign In アカウントを持っているユーザーがサインインする
Sign Up 新規ユーザーがアカウントを作成する

それでは、実際にAPI利用者がどのように開発者ポータルを利用するのか見ていきましょう。

ユーザー登録&サインイン

APIを利用するには、まず開発者ポータルでアカウントを作成する必要があります。

1, ホーム画面でSign Upボタンをクリック

2, メールアドレス、名前、パスワード等を入力

ユーザー登録画面

3, 登録したメールアドレスに確認メールが届く

4, メール内のリンクをクリックして認証完了

メール認証画面

アカウント作成後は、以下の方法でサインインできます。

認証方式 説明
メールアドレス&パスワード 登録時に設定したメールアドレスとパスワードでサインイン
Microsoft Entra ID 組織のMicrosoft Entra IDアカウントでサインイン(要設定)
GitHub GitHubアカウントでサインイン(要設定)
Google Googleアカウントでサインイン(要設定)

サインイン画面(メールアドレス&パスワード)

外部認証プロバイダーの設定について

Microsoft Entra ID、GitHub、Googleなどの外部認証プロバイダーとの連携設定は、Azure Portalの「開発者ポータル」→「ID」から設定できます。設定完了後、サインイン画面に該当する認証ボタンが表示されます。

外部認証プロバイダー連携後のサインイン画面

また、セキュリティ要件に応じて、メールアドレス&パスワード認証を無効にすることも可能です。

メールアドレス&パスワード認証を無効

製品へのサブスクライブ&APIキー管理

サインイン後、利用したいAPIが含まれる製品にサブスクライブし、APIキーを取得します。

  1. メニューからProductsを選択
  2. 利用したい製品を選択(例: Starter)
  3. サブスクリプション名を入力
  4. Subscribeボタンをクリック

製品サブスクライブ画面

製品の設定により、以下の2つの承認フローがあります。

承認タイプ 説明 利用開始までの時間
自動承認 サブスクライブ後、即座にAPIキーが発行され、アクティブ(利用可能)状態になる 即時
手動承認 管理者が承認するまでAPIキーは発行されない 管理者承認後

サブスクリプション承認後、以下の手順でAPIキーを確認・管理できます。

  1. 画面右上のユーザーアイコンをクリック
  2. Profileを選択
  3. SubscriptionsタブでAPIキーを確認

APIキー管理画面

各サブスクリプションには、主キー(Primary Key)副キー(Secondary Key)の2種類が提供されます。この2つのキーを活用することで、サービスを停止することなく安全にキーローテーションを実施できます。

以下の操作が可能です。

  • Show keys: マスクされたキーの全体を表示
  • Regenerate Primary/secondary Key: 新しいキーに再生成(古いキーは無効化される)
  • Cancel Subscription: サブスクリプションを無効化する
API一覧表示とドキュメント確認

メニューからAPIsを選択すると、公開されているAPIを確認できます。

APIドキュメントで確認できる情報は以下です。

  • パラメータ
  • レスポンス例
  • API定義書(ダウンロード可能)

APIドキュメント画面

インタラクティブコンソールでテスト

開発者ポータルでは、ブラウザ上で直接APIをテストできるインタラクティブなコンソールが提供されています。

  1. APIsメニューから利用したいAPIを選択
  2. テストしたい操作(エンドポイント)を選択
  3. Try This operationボタンをクリック
  4. テストコンソールで必要なパラメータを入力
    • すでにサブスクリプションキーを取得している場合、「Subscription key」ドロップダウンには自動的に入力されます
  5. SendボタンをクリックしてAPIをリクエスト
  6. レスポンス確認

インタラクティブコンソールでのAPIテスト

ポリシーの活用

このセクションでは、以下を学びます。

  • ポリシーでAPI動作を制御する方法を理解する
  • ポリシーの実行順序と各セクションの役割を把握する
  • レート制限、リクエスト・レスポンス変換などの実装方法を学ぶ

ポリシーとは

ポリシーは、APIリクエストとレスポンスの処理フローを制御するXML形式のルールです。APIMの最も強力な機能の1つで、コードを変更することなく、API動作を柔軟に制御できます。

ポリシーで実現できる主な機能は以下です。

カテゴリ 機能例
認証・認可 OAuth 2.0、JWT検証、APIキー検証
トラフィック制御 レート制限、クォータ管理、同時接続数制限
データ変換 リクエスト・レスポンスの書き換え、フォーマット変換
セキュリティ IP制限、CORS設定、ヘッダーのマスキング
統合 バックエンドURL変更、リトライ、タイムアウト設定

ポリシーの実行順序

ポリシーは4つのセクションで構成され、APIリクエストの処理フローに沿って順次実行されます。

ポリシーの実行フロー

セクション 実行タイミング 主な用途
inbound クライアントからのリクエスト受信後、バックエンドへ転送前 認証、レート制限、リクエスト変換、ヘッダー追加
backend バックエンドサービスへのリクエスト送信時 バックエンドURL変更、タイムアウト設定、リトライ
outbound バックエンドからのレスポンス受信後、クライアントへ返却前 レスポンス変換、ヘッダー追加、データマスキング
on-error 処理中にエラーが発生した場合 エラーログ記録、カスタムエラーレスポンス

ポリシーの設定方法

ポリシーは、Azure PortalのAPIのDesignタブから設定できます。

ポリシー設定画面

設定方法はいかです。

  1. XMLエディターで編集: </>アイコンをクリックし、XMLエディターで直接ポリシーを記述

XMLエディター

  1. UIから設定: + Add policyボタンをクリックし、専用UIからポリシーを選択(初心者におすすめ)

ポリシーUI選択画面

では、よく利用されるポリシーの実装例を見ていきましょう。

レート制限ポリシー

レート制限は、APIの過度な使用を防ぎ、バックエンドサービスを保護する重要なポリシーです。

基本的なレート制限(全体)では、すべてのリクエストに対して1分間に100回までのアクセスを許可するように設定できます。 たとえば次のように記述します。

<inbound>
    <rate-limit calls="100" renewal-period="60" />
</inbound>

サブスクリプションキーごとの制限では、各サブスクリプション(API利用者)ごとに個別の上限を設定できます。 たとえば次のように記述します。

<inbound>
    <rate-limit-by-key calls="100" renewal-period="60" 
                       counter-key="@(context.Subscription.Id)" />
</inbound>
パラメータ 説明
calls 期間内の最大呼び出し回数 100
renewal-period 制限期間(秒) 60(1分)
counter-key レート制限のキー(キーごとに個別カウント) サブスクリプションID、IPアドレスなど

リクエスト・レスポンス変換ポリシー

APIの入出力を変換することで、バックエンドサービスを変更せずにAPI仕様を調整できます。

カスタムヘッダーの追加や、セキュリティ上削除すべきヘッダーの除去を行います。

<inbound>
    <!-- カスタムヘッダーの追加 -->
    <set-header name="X-Custom-Header" exists-action="override">
        <value>custom-value</value>
    </set-header>
    
    <!-- サブスクリプションキーヘッダーの削除(バックエンドに送信しない) -->
    <set-header name="Ocp-Apim-Subscription-Key" exists-action="delete" />
</inbound>

リクエストにデフォルト値を設定したり、パラメータを追加できます。

<inbound>
    <!-- デフォルトのlimitパラメータを追加 -->
    <set-query-parameter name="limit" exists-action="override">
        <value>10</value>
    </set-query-parameter>
</inbound>

バックエンドのレスポンスにヘッダーを追加できます。

<outbound>
    <!-- レスポンスヘッダーの追加 -->
    <set-header name="X-Powered-By" exists-action="override">
        <value>Azure APIM</value>
    </set-header>
</outbound>

IP制限ポリシー

特定のIPアドレスからのアクセスのみを許可します。

たとえば次のように記述します。

<inbound>
    <ip-filter action="allow">
        <address>203.0.113.10</address>
        <address-range from="198.51.100.0" to="198.51.100.255" />
    </ip-filter>
</inbound>

ベストプラクティスとしては以下のとおりです。

  • ポリシーのスコープ: 全体、製品、API、操作の各レベルで適切に配置
  • テスト: 本番環境適用前に開発環境で十分にテスト

バックエンドサービスとの統合

このセクションでは、以下を学びます。

  • App ServiceをAPIMのバックエンドとして統合する
  • IP制限で多層防御を実装する

APIMとApp Serviceを統合することで、バックエンドAPIを保護しながら、統一されたAPIゲートウェイとして機能させることができます。

以下はセキュリティアーキテクチャ図です。

────────────────────────────────────────────────────
                      特定クライアント                          
           例: 社内ネットワーク、開発環境など                    
────────────────────────────────────────────────────
                     |
                     | 1. IP制限 (APIM ポリシー)
                     ↓
────────────────────────────────────────────────────
            API Management (APIM)   
            ・サブスクリプションキー認証  
────────────────────────────────────────────────────
                     |
                     | 2. IP制限 (App Service ネットワーク)
                     ↓
────────────────────────────────────────────────────
             App Service (API)      
             ・APIM IPのみ許可        
────────────────────────────────────────────────────
レイヤー 設定場所 保護内容
第1層 APIMポリシー 特定クライアントIPのみ許可
第2層 APIMサブスクリプション APIキー認証
第3層 App Serviceネットワーク APIM IPのみ許可

Step 1: App Service(バックエンドAPI)の準備

  1. APIをAzure App Serviceにデプロイ
  2. HTTPSで正常にアクセスできることを確認 https://<appservice-name>.azurewebsites.net
  3. APIのエンドポイントとレスポンスが安定していることを確認

Step 2: APIMにApp ServiceをAPIとして追加

  1. APIM → APIs+ Add APIApp Serviceを選択

App Serviceからインポート

  1. Browse をクリックし、対象の App Service を選択する
    • 画面の案内に従い、API 名API URL サフィックス製品(必要に応じて) などの必須項目を入力する

API作成

  1. Createをクリック

Step 3: ワイルドカード操作のテスト

  • 選択したWeb AppにOpenAPI定義が関連付けられている場合、API Managementはそれをフェッチしてインポートします。

  • OpenAPI定義が見つからない場合、API Managementは一般的なHTTP動詞のワイルドカード操作を生成してAPIを公開します。

ワイルドカード操作の例

ワイルドカード操作のテスト手順:

ワイルドカード操作は、バックエンドAPIに直接マップされない場合があります。

: APIMにインポートされるワイルドカードGET操作は、デフォルトでパス / を使用しますが、このデモで使用するWeb Appには /api/cart/mock エンドポイントしか存在しません。

  1. 作成したAPIを選択し、操作を選択
  2. Testタブを開く
  3. Template parametersで、ワイルドカード (*) 名の横にある値を更新
    • 例: api/cart/mock と入力
  4. Sendをクリック

テストコンソール

テストが成功すると、バックエンドから 200 OK とレスポンスデータが返されます。

テスト成功レスポンス

Step 4: IP制限の設定(多層防御)

バックエンドサービスを保護するため、APIM側とApp Service側の2つのレイヤーでIP制限を実装します。

Step 4-1: APIM側のIP制限ポリシーの設定

特定のクライアントIPからのみアクセスを許可するポリシーを設定します。

  1. 作成したAPIのDesignタブを開く
  2. InboundセクションのCode editor (</>) をクリック
  3. 以下のポリシーを追加
<inbound>
    <base />
    <!-- 特定のIPアドレスからのアクセスのみ許可 -->
    <ip-filter action="allow">
        <address>203.0.113.10</address>
    </ip-filter>
</inbound>
  • APIポリシー(本記事で使用): API単位で柔軟にIP制限を設定。異なるAPIに異なるIP制限を適用する場合に最適
  • APIM ネットワーク設定: APIMインスタンス全体にIP制限を適用。すべてのAPIに同じIP制限を適用する場合に適切
Step 4-2: App Service側のIP制限設定

APIMからのアクセスのみを許可するよう、App Serviceのネットワーク設定を行います。

  1. APIMのIPアドレスを取得
    • APIM → 概要仮想 IP (VIP) アドレスを確認

APIM IPアドレス確認

  1. App Serviceのネットワーク設定を開く
    • App Service → ネットワーク受信トラフィックの構成

App Serviceネットワーク設定

  1. 公衆ネットワークアクセスを制限

    • 公衆ネットワーク アクセス」で「選択した仮想ネットワークと IP アドレスから有効」を選択
  2. APIMのIPアドレスを追加

    • 手順1で取得したAPIMのIPアドレスを許可リストに追加

IP制限の追加

これで、APIMからのアクセスのみがApp Serviceに到達できるようになりました。

まとめ

この記事では、Azure API Managementの応用機能として、開発者ポータル、ポリシー、バックエンド統合のポイントを確認しました。 特に、セルフサービスでのAPI利用開始やAPIキー管理、ポリシーによるレート制限・変換・IP制限、さらにApp Serviceとの統合と多層防御の考え方を整理しました。

  1. 開発者ポータル:セルフサービスでのAPI利用開始、APIキー管理、インタラクティブテスト
  2. ポリシー:レート制限によるAPI保護、リクエスト/レスポンス変換、IP制限の実装
  3. バックエンド統合:App Serviceとの統合、多層防御によるセキュリティ強化、APIMとApp ServiceのIP制限設定

これらの機能を組み合わせることで、セキュアで管理しやすく、スケーラブルなAPI基盤を構築できます。次のステップとして、実際にAPIMを導入し、段階的に高度な機能を追加していくことをお勧めします。

執筆担当者プロフィール
Nguyen Tien Vinh

Nguyen Tien Vinh(日本ビジネスシステムズ株式会社)

CBS事業本部 CoEデザイン部 技術支援G所属。 DevSecOps関連担当。

担当記事一覧