Front DoorからAPI Management、Blob Storageへのアクセスをセキュアにしたい

このエントリは2025/04/10現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります(Front Door Standard/Premium SKUは2022/03/30に一般提供を開始しました。2025/04/10現在、API ManagementへのPrivate Link接続とFront Door PremiumからApplication GatewayへのPrivate Link接続は一般提供済みです)。

前回、以下のようなエントリを書いた。

前回はApplication Gatewayを使っていたが、今度はFront Doorでやってみる。とはいえ、結論から言うと、Premium SKUでのPrivate Linkを使う方式と、これまで同様のPublic accessでの方式、つまり(Microsoft Network内を通るとしても)IP Addressフィルタリングを使う方式の2方式が利用できる。

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

Front Door Premium SKU

2022/03/30に一般提供を開始したFront Door Premiumでは、GA版のFront DoorとはPortal上の設定が少々異なっている。以下はStorage (Blob) だけを構成した例。

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

2025/3にAPI Management へのprivate link接続が一般提供されたので、以下のような構成の選択肢が考えられるが、よほどのことが無い限り4を選択することになるだろう。

  1. Application Gatewayを組み合わせる
  2. Internal Load Balancerを組み合わせる
  3. Front DoorのFDIDを使って制御(これはFront DoorとApp Service/Functionsの組み合わせの場合と同じ)
  4. API ManagementへPrivate Linkで接続する

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 のみに制限する手順を教えてください。 / What are the steps to restrict the access to my backend to only Azure Front Door?
https://learn.microsoft.com/azure/frontdoor/front-door-faq#what-are-the-steps-to-restrict-the-access-to-my-backend-to-only-azure-front-door-

b) API Managementで利用可能になったPrivate Endpoint接続を組み合わせる場合

Front Door Premiumでは、Application Gatewayへの接続でPrivate Link接続ができるようになった。

Private Link を使用して Azure Front Door Premium を Azure Application Gateway に接続する / Connect Azure Front Door Premium to an Azure Application Gateway with Private Link
https://learn.microsoft.com/azure/frontdoor/how-to-enable-private-link-application-gateway

Application Gatewayまで到達すれば、あとはVNetからAPI Managementへの接続だが、ここもPrivate Endpoint接続を使えばOK。API ManagementのConsumption SKU以外(Premium、Standard、Basic、Developer)で利用可能である。これを使えば、Application GatewayのあるVNetから安全にアクセスできるが、バックエンドサービスに対するPrivate Endpoint接続はできないので注意が必要。

受信プライベート エンドポイントを使用して API Management に非公開で接続する / Connect privately to API Management using an inbound private endpoint
https://learn.microsoft.com/azure/api-management/private-endpoint?tabs=classic

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の管理が必要なので、手離れがいまいちである点は否定できない。

3. Front DoorのFDIDを使って制御

これは、App Serviceとの組み合わせでも有名なもの。

Azure API Management の前に Front Door Standard/Premium を構成する / Configure Front Door Standard/Premium in front of Azure API Management
https://learn.microsoft.com/azure/api-management/front-door-api-management
Azure Front Door を用いた App Service などへのセキュアな接続の構成
https://jpaztech.github.io/blog/network/AzureFrontDoor-LockDown/

App Service観点では以下のエントリも以前書いていた。

4. Private Linkを使って接続

これは前述の通り2025/3に一般提供を開始したもの。以前は以下のスクリーンショットのように、API Management (Application Gatewayも同じ) でFront Doorからの接続を構成しようとするとPrivate Linkを使った接続を構成できなかったが、ようやく使えるようになった。

Private Link を使用して Azure Front Door Premium を Azure API Management に接続する / Connect Azure Front Door Premium to an Azure API Management with Private Link
https://learn.microsoft.com/azure/frontdoor/standard-premium/how-to-enable-private-link-apim

ただし2025/04/07現在、API Management Standard V2のPrivate EndpointはPublic Previewなので、その点は注意が必要。

まとめ

ということで、現時点ではFront Door Premium SKUでPrivate Linkを使うこともできるが、一部API ManagementのSKUではPublic Previewであることに注意が必要。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください