この記事は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 アドレスが静的のままであることは保証されていません。
Hostname (ホスト名) https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#hostname
The server’s IP address is not guaranteed to remain static.
Hostname (ホスト名) https://docs.microsoft.com/azure/mysql/flexible-server/concepts-networking#hostname
このPrivate Accessを「Private Endpointと同じものでしょ」と思っていると認識違いを起こす。Flexible ServerのPrivate AccessにはPrivate Endpointとの間に以下のような違いがある。
Private Access | Private Endpoint | |
---|---|---|
Subnetの委任 | 必要 | 不要 |
Private IPを振る対象 | インスタンス (を指し示すポインター) | Private Endpoint (のNIC) |
Private IPはstatic/dynamic | dynamic インスタンスを指し示すポインターは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) |


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) を使用することをお勧めします。
Hostname (ホスト名) https://docs.microsoft.com/azure/postgresql/flexible-server/concepts-networking#hostname
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/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を使い制御 |