RDS の既定ポートとアクセス制御の確認

データベースのポート変更を、アクセス制限や認証の代わりにしないでください。

説明

一般的な既定ポートは MySQL の 3306、PostgreSQL の 5432、Oracle の 1521、SQL Server の 1433 です。番号はサービス識別の手掛かりになりますが、既定ポート自体がデータベースを公開したり認証を迂回させたりするわけではありません。リスクはネットワークの許可範囲と認証・暗号化に左右されます。

想定される影響

  • 広すぎるネットワーク許可は、不要な接続や認証への攻撃の機会を増やす可能性があります。
  • ポートだけを変えても、既存のアクセス制御の問題は残ります。

対処方法

セキュリティグループ、サブネット、ルーティングを確認し、必要なクライアントだけに接続を限定してください。データベース認証と TLS も使用してください。別のポートを使う理由がある場合はエンジンの対応範囲を確認し、接続情報と許可ルールを併せて更新してください。

例

PostgreSQL の 5432 と 5433 を比較する抜粋です。ストレージとネットワークは別途設定し、例のパスワードや最終スナップショットの省略を運用基準にしないでください。

変更前

hcl
resource "aws_db_instance" "example" {
  engine              = "postgres"
  instance_class      = "db.t3.micro"
  username            = "foo"
  password            = "foobarbaz"
  skip_final_snapshot = true
  port                = 5432
}

変更後

hcl
resource "aws_db_instance" "example" {
  engine              = "postgres"
  instance_class      = "db.t3.micro"
  username            = "foo"
  password            = "foobarbaz"
  skip_final_snapshot = true
  port                = 5433
}

変更するのはポート番号だけです。5433 を指定しても、それだけで接続元を制限したり通信を暗号化したりすることはできません。

参考資料