AzureにおけるNATとIPアドレス管理
Azureネットワークにおいて、IPアドレスの管理とNAT(Network Address Translation)の理解は、セキュアでスケーラブルなアーキテクチャを構築するために不可欠です。本ドキュメントでは、Public IP、Private IP、SNAT、DNAT、およびNAT Gatewayについて、Azureリソースを用いた実装の観点から解説します。
IPアドレスの種類
Public IP Address (パブリックIPアドレス)
インターネットから直接アクセス可能なIPアドレスです。Azureでは Public IP Address リソースとして管理されます。
- SKU: Basic と Standard がありますが、現在は Standard SKU が推奨されます(Availability Zones対応、デフォルトでセキュア)。
- 割り当て方法: Static(静的)と Dynamic(動的)がありますが、Standard SKUはStaticのみです。
Private IP Address (プライベートIPアドレス)
Azure Virtual Network (VNet) 内でのみ有効なIPアドレスです。VMやLoad Balancerのフロントエンドなどに割り当てられます。
- 割り当て: サブネットのCIDR範囲から自動的に割り当てられます(DHCP)。
- 固定化: 必要に応じて、ネットワークインターフェース (NIC) の設定で特定のIPを静的に割り当てることができます。
NAT (Network Address Translation) の種類
SNAT (Source Network Address Translation)
内部ネットワーク(Private IP)から外部ネットワーク(インターネットなど)へ通信する際に、送信元IPアドレスを変換する技術です。Azureでは「アウトバウンド接続」に関連します。
AzureにおけるSNATの実装方式
-
Azure NAT Gateway (推奨)
- サブネットに関連付けることで、そのサブネットからのすべてのアウトバウンド通信を特定のPublic IP経由で行います。
- SNATポート枯渇(SNAT Port Exhaustion)のリスクを最小限に抑えます。
-
Load Balancer Outbound Rules
- Standard Load Balancerを使用して、アウトバウンド通信のルールを明示的に定義します。
-
Default Outbound Access (非推奨)
- 明示的な設定がない場合にAzureが自動的に割り当てるIPを使用しますが、セキュリティと信頼性の観点から推奨されません。
DNAT (Destination Network Address Translation)
外部ネットワークから内部ネットワークへ通信する際に、宛先IPアドレス(通常はPublic IP)を内部のPrivate IPへ変換する技術です。Azureでは「インバウンド接続」に関連します。
AzureにおけるDNATの実装方式
-
Azure Firewall
- ファイアウォールのPublic IPへのアクセスを、バックエンドの特定のVMやサービスのPrivate IPとポートに転送します。
-
Azure Load Balancer (Inbound NAT Rules)
- Load BalancerのフロントエンドIPの特定ポートへのアクセスを、特定のバックエンドVMのポートに転送します(例: LBのポート50001へのSSHアクセスをVM1のポート22へ転送)。
Azure NAT Gateway の実装
Azure NAT Gatewayは、最も推奨されるアウトバウンド接続の方法です。
特徴
- 完全マネージド: スケーリングや冗長性が自動管理されます。
- ゾーン冗長: Availability Zonesに対応しています。
- 固定IP: アウトバウンド通信の送信元IPを固定できます(ホワイトリスト登録に便利)。
構築手順の概要
-
Public IP Prefix または Public IP Address の作成
- Standard SKUのPublic IPを作成します。
-
NAT Gateway リソースの作成
- 作成したPublic IPを紐付けます。
- アイドルタイムアウト設定などを調整します(デフォルト4分)。
-
サブネットへの関連付け
- VNet内の対象サブネット設定で、作成したNAT Gatewayを選択します。
- これにより、そのサブネット内のリソース(VM, AKSノードなど)は自動的にNAT Gateway経由でインターネットに出るようになります。
実践的な構成例 (Bicep)
以下は、NAT Gatewayを作成し、サブネットに関連付けるBicepコードの例です。
// Public IP for NAT Gateway
resource natPublicIP 'Microsoft.Network/publicIPAddresses@2023-04-01' = {
name: 'pip-nat-gateway-prod'
location: resourceGroup().location
sku: {
name: 'Standard'
}
properties: {
publicIPAllocationMethod: 'Static'
}
}
// NAT Gateway
resource natGateway 'Microsoft.Network/natGateways@2023-04-01' = {
name: 'ng-prod-01'
location: resourceGroup().location
sku: {
name: 'Standard'
}
properties: {
publicIpAddresses: [
{
id: natPublicIP.id
}
]
idleTimeoutInMinutes: 4
}
}
// Virtual Network & Subnet Association
resource vnet 'Microsoft.Network/virtualNetworks@2023-04-01' = {
name: 'vnet-prod-01'
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: 'snet-app'
properties: {
addressPrefix: '10.0.1.0/24'
natGateway: {
id: natGateway.id
}
}
}
]
}
}
まとめ
- Public IP / Private IP: 外部公開用と内部通信用。Standard SKUの利用が基本。
- SNAT: 内部から外部への通信。Azure NAT Gateway の利用がベストプラクティス。
- DNAT: 外部から内部への通信。Azure FirewallやLoad Balancerで制御。
適切なNAT構成を選択することで、SNATポート枯渇を防ぎ、セキュリティと可用性の高いネットワークを構築できます。