説明
内部専用の Azure Container Instances では、Private IP と仮想ネットワークを検討してください。Public IP は公開サービスに使えますが、実際の公開範囲はポートとアクセス制御によって異なります。IP アドレスを割り当てない None モードもあり、Private が未設定でも必ず公開されるわけではありません。
想定される影響
- 不要に公開されたサービスポートが、外部アクセスや攻撃試行の対象になる場合があります。
- プライベートネットワークの経路や DNS が不足すると、アプリケーション通信が停止する場合があります。
対処方法
- 内部用コンテナーグループでは、
ip_address_type = "Private"と ACI に委任した専用サブネットのsubnet_idsを設定してください。必要な NSG、経路、DNS、対応する送信接続を用意してください。 - 必要なポートと接続元だけを許可し、アプリケーション認証と TLS を別途設定してください。公開サービスでは公開範囲を明確にし、不要なポートを閉じてください。
例
IP の種類とサブネット接続だけを比較します。待ち受けポート、DNS、送信経路は省略しています。Private IP だけでアプリケーション認証や別経路のアクセス制御が完成するわけではありません。
変更前
hcl
resource "azurerm_container_group" "example" {
name = "example-container-group"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
os_type = "Linux"
ip_address_type = "Public"
container {
name = "app"
image = "nginx:stable"
cpu = 1
memory = 1
}
}
変更後
hcl
resource "azurerm_container_group" "example" {
name = "example-container-group"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
os_type = "Linux"
ip_address_type = "Private"
subnet_ids = [azurerm_subnet.aci.id]
container {
name = "app"
image = "nginx:stable"
cpu = 1
memory = 1
}
}
補足:
- 変更前: Public IP を選択します。実際のサービス公開範囲は、別途設定するポートとアクセス制御によって異なります。
- 変更後: Private IP とサブネットを指定します。委任と通信経路は別途用意する必要があります。