従量課金のAPI ManagementとLogicAppsでIP制限する #Azure リレー
2021-06-14
azblob://2022/11/11/eyecatch/2021-06-14-apimanagement-logicapps-ip-restriction-000.jpg

API Managementには複数のプランがありますが、特に値段を抑えたい場合だと従量課金が選択候補として挙げれます。Basicでも1リソースに月16000円は飛んでいくので意外と高額です。
備忘録も兼ねて、従量課金のAPI ManagementとLogicApps間でIP制限をした時のTipsを記載していきます。

従量課金のAPI Managementが持つパブリックIPアドレス

MSのドキュメントから抜粋
https://docs.microsoft.com/ja-jp/azure/api-management/api-management-howto-ip-addresses
>従量課金レベルの API Management サービスの IP アドレス
>API Management サービスが従量課金レベルのサービスの場合、専用 IP アドレスはありません。 従量課金レベルのサービスは、決定論的 IP アドレスを使用せずに、共有インフラストラクチャ上で実行されます。
>トラフィック制限のために、Azure データ センターの IP アドレスの範囲を使用できます。

従量課金のAPI Managementは固定のパブリックIPアドレスを持ってません。代わりにAzureデータセンターのIPアドレスを使用しています。具体的にはAzureCloudサービスタグのパブリックIPアドレスです。
LogicAppsにこのパブリックIPを設定して制限をかけます。

詳細は以下のドキュメントに記載があります。
https://docs.microsoft.com/ja-jp/azure/azure-functions/ip-addresses#data-center-outbound-ip-addresses
https://docs.microsoft.com/ja-jp/azure/virtual-network/service-tags-overview

LogicApp側でIP制限

従量課金のAPI ManagementはAzureCloudサービスタグのパブリックIPアドレスを使用していることが分かりました。なのでこのIP群を設定していきます。ちなみに、東日本のみで100個あります(2021/6/14現在)。

・・・(´゚ω゚`)

はっきり言って手動で設定するのはなかなか心にきます。複数のLogicAppsに設定しないといけない場合ならなおさらです。なのでコマンド等で設定していくのがベターかなと。
ここではAzure CLIでの設定方法について記載します。

Azure CLI

以下のコマンドを使用します。実際に実行するとaz deploymentコマンドの方を使ってくれと警告が出ますが、使いにくかったので無視してます。ここでは使用しません。

az group deployment create -g {リソースグループ名} --template-file {LogicAppsからエクスポートしたARMテンプレートファイル}

次に、エクスポートしたARMテンプレートファイルにIPを設定する方法です。jsonファイルを開き、resources > propertiesにあるstateとdefinitionを探します。見つけたら行間を1つ空けて、IP制限を追加する準備が整いました。
propertiesの直下ならどこでもいいかと思われますが、今回は分かりやすい場所に行を空けてます。

"resources": [
    {
        "type": "Microsoft.Logic/workflows",
        "apiVersion": "2017-07-01",
        "name": "[parameters('workflows_{リソース}_name')]",
        "location": "japaneast",
        "properties": {
            "state": "Enabled", 
            ★空けた行間★
            "definition": {
                "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                "contentVersion": "1.0.0.0",
                "parameters": {

空けた行間に以下の「accessControl」を貼り付けてjsonファイルを保存します。addressRange (IPアドレス)はAzureCloudサービスタグのパブリックIPを全て指定してください。ちなみにリージョン毎にサービスタグがあるのでご注意を。
後は、最初に紹介した「az group deployment create 」コマンドを実行します。編集したjsonファイルは--template-fileオプションで指定します。
LogicAppsのワークフロー設定のトリガーIP範囲にIPアドレスが設定されていれば設定完了です。

                "accessControl": {
                    "triggers": {
                        "allowedCallerIpAddresses": [
                            {
                                "addressRange": "XXX.XXX.XXX.XXX/XX"
                            },
                            {
                                "addressRange": "XXX.XXX.XXX.XXX/XX"
                            },
                            {
                                "addressRange": "XXX.XXX.XXX.XXX/XX"
                            }
                        ]
                    }
                },