チュートリアル:API を変換および保護する

このチュートリアルでは、API を変換して、プライベート バックエンド情報を公開しないようにする方法を示します。 たとえば、バックエンドで実行されているテクノロジ スタックに関する情報を非表示にすることができます。 API の HTTP 応答の本文に表示される元の URL を非表示にして、代わりに APIM ゲートウェイにリダイレクトすることもできます。

このチュートリアルでは、Azure API Management でレート制限を構成することによって、いかに簡単にバックエンド API の保護を追加できるかを示します。 たとえば、API が開発者によって過剰に使用されないよう、API 呼び出しレートを制限したい場合があります。 詳細については、「API Management のポリシー」を参照してください。

このチュートリアルでは、以下の内容を学習します。

  • 応答ヘッダーを削除するように API を変換する
  • API 応答の本文内の元の URL を APIM ゲートウェイの URL に置換する
  • レート制限ポリシー (スロットリング) を追加して API を保護する
  • 変換をテストする

ポータルでのポリシー

前提条件

API Management インスタンスに移動します。

  1. Azure portal で、API Management サービス を検索して選択します。

    [API Management サービス] を選択する

  2. [API Management サービス] ページで、ご自身の API Management インスタンスを選択します。

    API Management インスタンスを選択する

応答ヘッダーを削除するように API を変換する

このセクションでは、ユーザーに対して表示したくない HTTP ヘッダーを非表示にする方法を示します。 この例では、HTTP 応答から次のヘッダーを削除する方法を紹介しています。

  • X-Powered-By
  • X-AspNet-Version

元の応答をテストする

元の応答を表示するには:

  1. API Management サービス インスタンスで、 [API] を選択します。
  2. API の一覧で [Demo Conference API](デモ会議 API) を選択します。
  3. 画面の上部にある [テスト] タブを選択します。
  4. [GetSpeakers] 操作を選択し、 [送信] を選択します。

元の応答は、次のようになります。

元の API 応答

応答に、X-AspNet-VersionX-Powered-By というヘッダーが含まれていることがわかります。

変換ポリシーを設定する

  1. [Demo Conference API](デモ会議 API) > [Design](デザイン) > [すべての操作] を選択します。

  2. [送信処理] セクションで、コード エディター ( </> ) アイコンを選択します。

    送信ポリシーに移動する

  3. <outbound> 要素内にカーソルを置き、右上隅にある [Show snippets](スニペットの表示) を選択します。

  4. 右側のウィンドウの [変換ポリシー] で、 [+ HTTP ヘッダーの設定] を 2 回クリックします (2 つのポリシー スニペットを挿入するため)。

    HTTP ヘッダーの設定ポリシー

  5. <outbound> コードを次のように変更します。

    <set-header name="X-Powered-By" exists-action="delete" />
    <set-header name="X-AspNet-Version" exists-action="delete" />
    

    HTTP ヘッダーを設定する

  6. [保存] を選択します。

API 応答の本文内の元の URL を APIM ゲートウェイの URL に置換する

このセクションでは、API の HTTP 応答の本文に表示される元の URL を非表示にして、代わりに APIM ゲートウェイにリダイレクトする方法を示します。

元の応答をテストする

元の応答を表示するには:

  1. [Demo Conference API](デモ会議 API) > [テスト] を選択します。

  2. [GetSpeakers] 操作を選択し、 [送信] を選択します。

    応答に、元のバックエンド URL が含まれていることがわかります。

    応答に含まれる元の URL

変換ポリシーを設定する

  1. [Demo Conference API](デモ会議 API) > [すべての操作] > [Design](デザイン) を選択します。
  2. [送信処理] セクションで、コード エディター ( </> ) アイコンを選択します。
  3. <outbound> 要素内にカーソルを置き、右上隅にある [Show snippets](スニペットの表示) を選択します。
  4. 右側のウィンドウの [変換ポリシー] で、 [Mask URLs in content](コンテンツ内の URL をマスク) を選択します。
  5. [保存] を選択します。

レート制限ポリシー (調整) を追加して API を保護する

このセクションでは、レート制限を構成してバックエンド API の保護を強化する方法を示します。 たとえば、API が開発者によって過剰に使用されないよう、API 呼び出しレートを制限したい場合があります。 この例では、各サブスクリプション ID に対して呼び出しの上限が 15 秒ごとに 3 回に設定されます。 15 秒後、開発者は、API の呼び出しを再試行できます。

  1. [Demo Conference API](デモ会議 API) > [すべての操作] > [Design](デザイン) を選択します。

  2. [受信処理] セクションで、コード エディター ( </> ) アイコンを選択します。

  3. <inbound> 要素内にカーソルを置き、右上隅にある [Show snippets](スニペットの表示) を選択します。

    受信ポリシーを設定する

  4. 右側のウィンドウの [アクセス制限ポリシー] で、 [+ Limit call rate per key](+ キーごとの呼び出しレートの制限) を選択します。

  5. rate-limit-by-key コード ( <inbound> 要素内) を次のコードに変更します。

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

変換をテストする

この時点でコード エディターのコードを確認すると、ポリシーは次のようになります。

<policies>
   <inbound>
     <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />
     <base />
   </inbound>
   <backend>
     <base />
   </backend>
   <outbound>
     <set-header name="X-Powered-By" exists-action="delete" />
     <set-header name="X-AspNet-Version" exists-action="delete" />
     <redirect-content-urls />
     <base />
   </outbound>
   <on-error>
     <base />
   </on-error>
</policies>

このセクションの残りの部分では、この記事で設定したポリシー変換をテストします。

削除した応答ヘッダーをテストする

  1. [Demo Conference API](デモ会議 API) > [テスト] を選択します。

  2. [GetSpeakers] 操作を選択し、 [送信] を選択します。

    ヘッダーが削除されたことがわかります。

    削除された応答ヘッダー

置換された URL をテストする

  1. [Demo Conference API](デモ会議 API) > [テスト] を選択します。

  2. [GetSpeakers] 操作を選択し、 [送信] を選択します。

    URL が置換されたことがわかります。

    置き換えられた URL

レート制限 (調整) をテストする

  1. [Demo Conference API](デモ会議 API) > [テスト] を選択します。

  2. [GetSpeakers] 操作を選択します。 [送信] を 3 回続けて選択します。

    要求を 3 回送信すると、"429 要求が多すぎます" 応答が返されます。

    要求が多すぎます

  3. 15 秒ほど待ち、 [送信] をもう一度選択します。 今度は "200 OK" 応答が返されます。

次のステップ

このチュートリアルでは、以下の内容を学習しました。

  • 応答ヘッダーを削除するように API を変換する
  • API 応答の本文内の元の URL を APIM ゲートウェイの URL に置換する
  • レート制限ポリシー (調整) を追加して API を保護する
  • 変換をテストする

次のチュートリアルに進みます。