全接続元アドレスからの受信を許可する AWS セキュリティグループ

公開サービスと内部専用サービスの受信範囲を分離してください。

説明

0.0.0.0/0 または ::/0 を許可する受信ルールは、指定したプロトコルとポートに対して全接続元アドレスを許可します。一つのポートだけでも、内部専用サービスには範囲が広すぎる場合があります。実際のインターネットからの到達性は、関連リソースとネットワーク経路によって異なります。

Web サイトのように全クライアントを受け入れる必要がある公開サービスもあります。目的を確認し、管理・データベース・内部 API へのアクセスと分離してください。

想定される影響

  • 内部専用サービスへの不要な外部接続やパスワードの推測が増えるおそれがあります。
  • 広い接続元許可と脆弱なサービスが組み合わさると、データ漏えいやサービス停止につながる可能性があります。

対処方法

  • 内部サービスの全アドレス許可を削除し、承認したクライアント範囲か適切なアプリケーションのセキュリティグループだけを接続元として許可してください。
  • 公開サービスはルールとグループを分けて必要なプロトコル・ポートだけを許可し、IPv4・IPv6 両方の範囲を確認してください。
  • 関連する全セキュリティグループと経路を確認し、必要な接続が成功して不要な接続が遮断されることをテストしてください。

例

TCP 3306 を使うサービスのセキュリティグループ設定の抜粋です。実際の DB ポート、VPC、関連付けを確認し、例のプライベート範囲を承認済みのアプリケーションアドレスに置き換えてください。

変更前

hcl
resource "aws_security_group" "database_access" {
  ingress {
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

全 IPv4 接続元から TCP 3306 の受信を許可します。全ポートを開く設定でも、DB 認証を省略する設定でもありません。

変更後

hcl
resource "aws_security_group" "database_access" {
  ingress {
    from_port   = 3306
    to_port     = 3306
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/16"]
  }
}

接続元を 10.0.0.0/16 に絞っています。依然として広い例示範囲なので、実際の DB クライアントだけに制限してください。

参考資料