Azure MySQL の TLS 強制設定の確認

Azure MySQL 接続で TLS を必須にし、クライアントでサーバー証明書を検証してください。

説明

MySQL サーバーが暗号化されていない接続を許可すると、認証情報やデータが転送中に漏えいするおそれがあります。内部ネットワークも TLS による保護の代わりにはなりません。現在の Flexible Server では、旧 Single Server の ssl_enforcement_enabled ではなく 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 接続を必須にしていません。変更後は現在のサーバーで暗号化接続を要求します。クライアントによるサーバー証明書の検証も維持してください。

参考資料