Flexible ServerのPrivate AccessとPrivate Endpointの違い

この記事は2021/07/112022/04/04現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。とくにFlexible Serverは執筆時点でPublic Previewのため、GA時で仕様が変わる可能性があります。

例によって、以下のような問い合わせをもらった(問い合わせはオリジナルのエントリ執筆時点のもの。Flexible Serverは2021/11に一般提供されている)。

現在Azure Database for PostgreSQL (Flexible Server) を検証しており、GAのタイミングで本番系に利用しようと考えている。VNetからセキュアに利用したいので、Private Accessを使う予定である。このとき、

1) IPアドレス(Private IP)は固定されるのか?
2) VNet内でアクセス制御する場合、どうすればいいか?

この問い合わせ主はPostgreSQLのFlexible Serverを使っているが、MySQLのFlexible Serverでも事情は同じである。

Private IPは固定されるのか?

結論から言うと、固定されない。それは以下のドキュメントにも記載がある。

サーバーの IP アドレスが静的のままであることは保証されていません。
The server’s IP address is not guaranteed to remain static.

Hostname (ホスト名) https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#hostname
Hostname (ホスト名) https://docs.microsoft.com/azure/mysql/flexible-server/concepts-networking#hostname

このPrivate Accessを「Private Endpointと同じものでしょ」と思っていると認識違いを起こす。Flexible ServerのPrivate AccessにはPrivate Endpointとの間に以下のような違いがある。

Private AccessPrivate Endpoint
Subnetの委任必要不要
Private IPを振る対象インスタンス (を指し示すポインター)Private Endpoint (のNIC)
Private IPはstatic/dynamicdynamic
インスタンスを指し示すポインターはEndpointではないので、メンテナンス後などに別Private IPが割り当てられる可能性がある
dynamic
Private Endpointが削除されるまではPrivate IPは変更されない
DNSへの登録Aレコード
インスタンスに直接割り当てているわけではなく、ポインターを挟んで間接的に割り当てている(下図1)。
Aレコード
Private Endpoint (NIC) に割り当てたPrivate IPを、PaaSサービスインスタンス (pa4storage) に割り当てている(下図2)。
Subnetに対するNSGの利用可否
(2022/04/04現在Public Preview)
図1. Private AccessのDNS
図2. Private EndpointのDNS

Private Endpointの場合、Private IPの属性はdynamicだが、Private Endpoint (のNIC) に割り当てられているので、Private Endpointが削除されない限り、Private IPの変更はない。

対して、Private Accessの場合はEndpointにPrivate IPを割り当てているわけではなく、SubnetにFlexible Serverが接続しているだけ(このあたりがPrivate Accessの説明でVNet Integrationという用語を使っている理由)なので、Private IPは固定されない。

それゆえ、ドキュメントでは以下のような表現で注意喚起している。

選択するネットワーク オプションに関係なく、フレキシブル サーバーに接続する場合は常に、ホスト名として完全修飾ドメイン名 (FQDN) を使用することをお勧めします。
Regardless of the networking option you choose, we recommend you always use a fully qualified domain name (FQDN) as hostname when connecting to your flexible server.

Hostname (ホスト名) https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#hostname
Hostname (ホスト名) https://docs.microsoft.com/azure/mysql/flexible-server/concepts-networking#hostname

何が起こるとPrivate IPの変更が発生する可能性があるか?

Private/Public IPの変更は、以下のようなイベントで発生する可能性がある(イベントが発生しても再度同じIPアドレスが割り当てられる可能性はある)。

  • サービス停止
  • HAフェールオーバー
  • スケジュールされたメンテナンス、など

VNet内でのアクセス制御はどうすればいいか?

Firewall、NSGの両方が利用できるが、実現するには考慮すべきことや制約がある。

a) NSG (Network Security Group) を使う

ひとつのVNetに複数のSubnetを作成し、Flexible Serverとワークロードを実行するリソースでSubnetを分けたい、という場合が典型例。

NSGを使う場合、IPアドレスでのアクセス制御しかできないため、SubnetをFlexible Serverごとに作成し、Subnetに割り当てたNSGの受信ルールでアクセス制御することが推奨される(Private IPは変更される可能性があるため、Flexible ServerのPrivate IPでNSGを設定するのは推奨しない)。

Subnetに配置するFlexible Serverの個数1
Flexible Serverを配置するSubnetのIPアドレスレンジ可能な限り小さく (/29)
制御方法SubnetにNSGを設定
受信ルールで制御

b) Firewallを使う

VNetをHub-SpokeでPeeringしてHub VNetにFirewallを配置する、もしくはVirtual WANのVirtual HubでFirewallを使う場合が典型例。

Firewallを使う場合、Flexible ServerのFQDNを使ったFilteringのために、Private Access用に構成されたプライベートDNSゾーンを各VNetにリンクしておく必要がある。

プライベート DNS ゾーンと VNET ピアリング / Private DNS zone and VNET peering
https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#private-dns-zone-and-vnet-peering
Using Private DNS Zone (執筆時点で日本語翻訳はまだない)
https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#using-private-dns-zone

Subnetに配置するFlexible Serverの個数任意
Flexible Serverを配置するSubnetのIPアドレスレンジ任意
制御方法Flexible Serverは別VNetに配置
FirewallではFQDNを使い制御

コメントを残す

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

WordPress.com ロゴ

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

Facebook の写真

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

%s と連携中