Azure MySQL TLS 연결 강제 설정 점검

Azure MySQL 연결에 TLS를 요구하고 클라이언트에서 서버 인증서를 검증하세요.

설명

MySQL 서버가 암호화되지 않은 연결을 허용하면 접속 정보와 데이터가 전송 중 노출될 수 있습니다. 내부 네트워크도 TLS 보호를 대신하지 않습니다. 과거 Single Server의 ssl_enforcement_enabled 대신 현재 Flexible Server에서는 require_secure_transport를 사용합니다.

잠재적 영향

  • 암호화되지 않은 요청과 조회 결과를 가로채 읽거나 변조할 수 있습니다.
  • 전송 암호화가 필요한 보안 기준을 충족하지 못할 수 있습니다.

해결 방법

Flexible Server에서 require_secure_transport를 ON으로 유지하세요. 애플리케이션과 운영 도구가 TLS 및 서버 인증서 검증을 사용하도록 구성하고 필요한 연결이 계속 동작하는지 확인하세요. 네트워크 접근과 데이터베이스 권한도 필요한 범위로 제한하세요.

예시

변경 전은 2025년에 종료된 Single Server의 역사적 구성입니다. 현재 배포에 사용하지 마세요. 변경 후는 기존 Flexible Server에 적용하는 TLS 매개변수 설정이며, 서버 이전 절차는 별도로 준비해야 합니다.

변경 전

hcl
resource "azurerm_mysql_server" "example" {
  name                = "webflux-mysql-${var.environment}${random_integer.rnd_int.result}"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name

  administrator_login          = "webflux-${var.environment}"
  administrator_login_password = random_string.password.result

  sku_name   = "B_Gen5_2"
  storage_mb = 5120
  version    = "5.7"

  auto_grow_enabled                 = true
  backup_retention_days             = 7
  infrastructure_encryption_enabled = true
  public_network_access_enabled     = true
  ssl_enforcement_enabled           = false
}

변경 후

hcl
resource "azurerm_mysql_flexible_server_configuration" "example" {
  name                = "require_secure_transport"
  resource_group_name = azurerm_resource_group.example.name
  server_name         = azurerm_mysql_flexible_server.example.name
  value               = "ON"
}

변경 전은 SSL 연결을 강제하지 않습니다. 변경 후는 현재 서버에서 암호화된 연결을 요구합니다. 클라이언트의 인증서 검증도 유지해야 합니다.

참조