呼び出し元のIPでAzure API Managementのアクセス制限を構成する

このエントリは2019/10/17現在の情報に基づいています。将来の機能追加・変更にともない、記載内容との乖離が発生する可能性があります(2021/10/09 Key Vaultについて記載を追加)。

Azure API Management (以後APIM)をはじめとするAPI管理製品やサービスでは、Gateway内で様々なポリシーが提供されている(カスタムでポリシーを作成することも可能なサービスや製品もある)。

Azure API Management のポリシー / Policies in Azure API Management
https://docs.microsoft.com/azure/api-management/api-management-howto-policies

今回は呼び出し元のIPアドレスを使ってアクセス制限する場合にどのようなポリシーが利用できるかを確認した。ターゲットになるのは、ip-filterポリシーとchooseポリシー。およそ以下のような棲み分けになるはず。本来、IPによるアクセス制限はFirewallでやるべきではあるが、さらに細かく制限したい場合にどうすればよいか、という話。

ip-filterポリシーchooseポリシー
1) 単一IPからのアクセスを制限
2) 単一IPからのアクセスのみ許可
3) 連続したIPからのアクセスを制限
4) 連続したいIPからのアクセスのみ許可
5) 離散した複数のIPからのアクセスを制限
6) 離散した複数のIPからのアクセスのみ許可

1) 2) 単一IPからのアクセスを制限・許可
3) 4) 連続したIPからのアクセスを制限・許可

これは素直にip-filter ポリシーを使ったほうが簡単。

呼び出し元 IP を制限する / Restrict caller IPs
https://docs.microsoft.com/azure/api-management/api-management-access-restriction-policies#RestrictCallerIPs

<ip-filter action="allow">
    <address>13.66.201.169</address>
    <address-range from="13.66.140.128" to="13.66.140.143" />
</ip-filter>

chooseポリシーでも対応できるが、コンテキスト変数に含まれるIPは文字列なので、特に範囲での制限、許可を実現するのはちょいと面倒。

5) 6) 離散した複数のIPからのアクセスを制限・許可

これはip-filterポリシーでもできるが、chooseポリシーも利用できる。名前付き値(Named value)を使えば、ポリシーにIPを直書きする必要がないので、変更も簡単。

Azure API Management ポリシーでの名前付きの値の使用方法 / How to use Named Values in Azure API Management policies
https://docs.microsoft.com/azure/api-management/api-management-howto-properties

例えば、名前付き値を以下のように作成したとする(値はカンマ区切りで指定)。

chooseポリシーを使って、上記の値からのアクセスのみを許可する場合、以下のような仕組みで実現可能。該当IPだけ制限するなら、If文を変更すればOK。

<choose>
 <when condition="@{
                if ("{{permitted-ip2}}".Contains(context.Request.IpAddress))
                {
                    return true; // OK
                }
                return false; // return 403
 }" />
 <otherwise>
 <return-response>
 <set-status code="403" reason="Forbidden" />
 </return-response>
 </otherwise>
 </choose>

この名前付き値はKey Vaultに格納できるので、ブロック対象のIPアドレスの管理は別担当が実施するのであればKey Vaultに格納する、なんてこともできる。Key Vaultとの連携は以下のドキュメントを参照。

Azure API Management ポリシーで名前付きの値を使用する / Use named values in Azure API Management policies
https://docs.microsoft.com/azure/api-management/api-management-howto-properties

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中