すべての IPv4 アドレスを許可する EC2-Classic DB セキュリティグループ

すべての IPv4 接続元を許可する DB セキュリティグループは、不要な接続試行を招く可能性があります。サポートされる VPC セキュリティグループで、必要な接続元とポートだけを許可してください。

説明

DB セキュリティグループの 0.0.0.0/0 は、すべての IPv4 接続元を含む範囲です。この規則が実際のデータベース接続経路に適用されると、承認されていない接続元も接続を試みることができます。アドレスの許可だけで、データベース認証やデータへのアクセス権が与えられるわけではありません。

aws_db_security_group は終了した EC2-Classic 用のリソースで、Terraform AWS プロバイダー 5.0 で削除されました。現在の VPC 内の RDS では、VPC セキュリティグループと aws_db_instance.vpc_security_group_ids でアクセスを制御します。

想定される影響

  • 広い範囲からデータベースのポートに到達できると、不要なログイン試行や脆弱性の悪用を試みられる可能性があります。
  • 弱い認証情報や過剰なデータベース権限がある場合、不正なデータアクセスや変更のリスクが高まります。

対処方法

  • サポートされる VPC セキュリティグループを RDS に関連付け、必要なデータベースポートを承認済みのアプリケーションのセキュリティグループや管理経路だけに許可してください。削除済みのリソースを新たにデプロイしないでください。
  • CIDR を使う場合は、実際のクライアントに必要な最小範囲を指定してください。プライベートアドレスという理由だけで信頼せず、その範囲から接続できるシステムを確認してください。
  • ルーティング、グループの関連付け、データベース認証を併せて確認してください。リソースの種類を変える作業は単純な規則変更とは異なります。terraform plan で作成・削除と依存関係を確認し、変更後に必要な接続をテストしてください。

例

変更前は、現在のプロバイダーでサポートされない過去のリソースです。変更後は VPC 用の設定の一部です。vpc_id と、実際のデータベースポートを表す db_port を別途定義してください。10.0.0.0/25 は必要なクライアントの範囲に置き換え、作成したグループを RDS インスタンスの vpc_security_group_ids に関連付けてください。

変更前

hcl
resource "aws_db_security_group" "public_db_sg" {
  name = "rds_sg"

  ingress {
    cidr = "0.0.0.0/0"
  }
}

変更後

hcl
resource "aws_security_group" "db" {
  name   = "rds_sg"
  vpc_id = var.vpc_id
}

resource "aws_vpc_security_group_ingress_rule" "db_client" {
  security_group_id = aws_security_group.db.id
  cidr_ipv4         = "10.0.0.0/25"
  ip_protocol       = "tcp"
  from_port         = var.db_port
  to_port           = var.db_port
}

説明: 新しい設定では、特定の IPv4 範囲から必要な TCP ポートへの接続だけを許可します。実際の移行ではリソースの状態と接続経路を確認し、ほかのグループや規則がより広いアクセスを許可していないかも確認してください。

参考資料