このエントリは2021/10/072022/03/31現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります(Front Door Standard/Premium SKUは2022/03/30に一般提供を開始しました。2022/03/18現在API ManagementのPrivate EndpointはPublic Previewです)。
前回、以下のようなエントリを書いた。
前回はApplication Gatewayを使っていたが、今度はFront Doorでやってみる。とはいえ、結論から言うと、現在GAしているFront DoorではどのSKUを使ったとしても、Public accessのみになってしまうために、(Microsoft Network内を通るとしても)どうしてもIP Addressフィルタリングなどを使う必要がある。それゆえ、ふつうに構成すれば以下のエントリに記載の通りになってしまう。
Integrate Azure Front Door with Azure API Management
https://techcommunity.microsoft.com/t5/azure-paas-blog/integrate-azure-front-door-with-azure-api-management/ba-p/2654925
現在のところ、Premium SKUで利用可能な、Private Linkでも同様だが、一旦は確認してみる。
Front Door Premium SKU
2022/03/30に一般提供を開始したFront Door Premiumでは、GA版のFront DoorとはPortal上の設定が少々異なっている。以下はStorage (Blob) だけを構成した例。

OriginとしてStorage accountを使っているが、この中でOriginとの通信にPrivate Linkを設定できる部分がある通り、Private Linkでの接続が可能になっている。

2022/03/31現在、Front Door Premiumの上記入力箇所から接続を作成できるが、Front DoorからAPI ManagementまでのPrivate Linkを作成することができない。そのため、以下のような構成が考えられる。
- Application Gatewayを組み合わせる
- Internal Load Balancerを組み合わせる
- Front DoorのFDIDを使って制御(これはFront DoorとApp Service/Functionsの組み合わせの場合と同じ)
3.は、API ManagementでHTTP HeaderのチェックとIPアドレスによるフィルタリングをすることになるが、API ManagementのIPアドレス制限ポリシーではネットワークタグが使えない点に注意が必要。
以後では1.と2.の現時点の可能性をまとめる。
1. Front DoorとApplication Gatewayの両方を使う
これは、Front Doorの背後にApplication Gatewayを配置し、さらにその背後にAPI Managementを配置しよう、というもの。Application GatewayはVNetに配置するため、特定のFront Doorからのアクセスだけを許可するには、以下のような方法が考えられる。
a) Public Accessのみで構成する場合
まずは、Front Door Classicでも利用可能な以下の方法。
- サービスタグ
AzureFrontDoor.Backend
を使ってNSGの受信規則を構成 - Application GatewayでHTTP Headerの
X-Azure-FDID
の存在ならびに値のチェックを実施 - バックエンドのAPI ManagementではApplication GatewayのIPアドレスとHTTP Headerをチェック
このあたりは以下のFAQにも記載がある。
バックエンドへのアクセスを Azure Front Door のみにロックダウンするにはどうしたらよいですか? / How do I lock down the access to my backend to only Azure Front Door?
https://docs.microsoft.com/azure/frontdoor/standard-premium/faq#how-do-i-lock-down-the-access-to-my-backend-to-only-azure-front-door
b) API Managementで利用可能になったPrivate Endpoint接続を組み合わせる場合
API Managementで利用可能になったPrivate Endpoint接続を使う方法(2022/03/18現在、Public Preview)。API ManagementのConsumption SKU以外(Premium、Standard、Basic、Developer)で利用可能である。これを使えば、Application GatewayのあるVNetから安全にアクセスできるが、バックエンドサービスに対するPrivate Endpoint接続はできないので注意が必要。
プライベート エンドポイントを使って API Management に非公開で接続する / Connect privately to API Management using a private endpoint
https://docs.microsoft.com/azure/api-management/private-endpoint
c) その他
Front Door Premiumで利用可能な、Private LinkでApplication Gatewayと接続する方法も理論上は可能だが、2022/03/31現在Private Linkを構成できないので選択できない。
注意
Front Door Premium SKUでは、API ManagementやApplication Gatewayへの接続構成はあるものの、Private Linkは構成できないので注意が必要。


2. Internal Load Balancerを使う
Private Link Serviceを構成できるよう、VNetにStandard SKUのInternal Load Balancerを作成し、その背後にAPI Managementを配置する、というアイデア。
プライベート リンクを使用して Azure Front Door Premium を配信元に接続する / Connect Azure Front Door Premium to an internal load balancer origin with Private Link
https://docs.microsoft.com/azure/frontdoor/standard-premium/how-to-enable-private-link-internal-load-balancer
結論から言うと、構成できない。というのも、Internal Load BalancerのBackend poolに要素を配置する場合、IPアドレスもしくはNICで指定できるが、
- API Managementを配置する場合、IPアドレスで指定するしかない
- Private Link Serviceは、Backend poolに追加されるbackendはNICで指定されたものだけをサポートする(IPアドレスで指定されたbackendが入っているとサポートされず、作成時にエラーが発生する)
という制限があるため。下図において、黄色でマークした部分を選択していなければならない。

実際にBackend PoolにIPアドレスで追加していれば、Private Link Serviceを構成すると、以下のようなエラーが発生する。
{
"status": "Failed",
"error": {
"code": "PrivateLinkServiceIsNotSupportedForIPBasedLoadBalancer",
"message": "Private link service is not supported for load balancer /subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.Network/privateLinkServices/{resource_name} with backend addresses set by (virtualNetwork, ipAddress) or (subnet, ipAddress).",
"details": []
}
}
そのため、Internal Load Balancerを使うのであれば、
- Managed Gatewayを使うなら、VMを立ててIP forwarderを構成する
- Self-hosted Gatewayを使うなら、VMを立ててSelf-hosted Gatewayをデプロイする
の2方式しかない。ただいずれもVMの管理が必要なので、手離れがいまいちである点は否定できない。
まとめ
ということで、現時点ではまだFront Door Premium SKUでPrivate Linkを使い、API Managementと直接連携するのはまだできない。API ManagementのPrivate Link/EndpointのGAを待てば何か変わるかもしれない。