Azure Container Instances のネットワーク公開範囲の確認

内部用ワークロードは、承認された仮想ネットワークと必要な通信経路に限定してください。

説明

内部専用の 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 とサブネットを指定します。委任と通信経路は別途用意する必要があります。

参考資料