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

このエントリは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を作成することができない。そのため、以下のような構成が考えられる。

  1. Application Gatewayを組み合わせる
  2. Internal Load Balancerを組み合わせる
  3. 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を待てば何か変わるかもしれない。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

%s と連携中