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와 서브넷을 지정합니다. 위임과 통신 경로를 별도로 준비해야 합니다.

참조