全アドレスとの通信を許可する AWS のデフォルトセキュリティグループ

デフォルトセキュリティグループの受信と送信を、それぞれ必要な範囲に制限してください。

説明

別のグループを指定しないリソースにはデフォルトセキュリティグループが使われる場合があり、広いルールの影響が複数のリソースに及ぶ可能性があります。全アドレスからの受信許可は不要な接続を、全アドレスへの送信許可は不要な外部接続を認める場合があります。

デフォルトグループを使うだけでインターネットから到達できるわけではありません。実際の関連付け、ルーティング、許可ポートを確認してください。

想定される影響

  • 不要な受信接続や外部への送信経路が許可される可能性があります。
  • 一つのグループの広範なルールが複数のワークロードのアクセス範囲に影響するおそれがあります。

対処方法

  • サービス専用のセキュリティグループを使い、デフォルトグループの不要なルールを削除してください。
  • 受信元と送信先を必要なプロトコル・ポートに制限してください。応答トラフィックはセキュリティグループの接続追跡によって許可されます。
  • aws_default_security_group は管理開始時に既存ルールを削除してから宣言したルールを適用するため、事前に影響を確認し、必要な接続をテストしてください。

例

参照する VPC は別途定義してください。IPv4 範囲と文書用 IPv6 範囲は実際に承認された範囲に置き換えてください。self と CIDR の許可は追加し合うため、self が CIDR 範囲を狭めるわけではありません。

変更前

hcl
resource "aws_default_security_group" "default_sg" {
  vpc_id = aws_vpc.mainvpc.id

  ingress {
    protocol    = -1
    self        = true
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }
}

すべての IPv4 接続元と同じセキュリティグループ内のリソースから、全プロトコルを許可します。

変更後

hcl
resource "aws_default_security_group" "default_sg" {
  vpc_id = aws_vpc.mainvpc.id

  ingress {
    protocol         = -1
    self             = true
    from_port        = 0
    to_port          = 0
    cidr_blocks      = ["10.1.0.0/16"]
    ipv6_cidr_blocks = ["2001:db8:1234::/64"]
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["10.1.0.0/16"]
    ipv6_cidr_blocks = ["2001:db8:1234::/64"]
  }
}

受信元を指定範囲と同じグループのリソースに絞り、送信先を指定範囲に制限します。全プロトコルを引き続き許可するため、必要なサービスポートだけに絞れるかも確認してください。

参考資料