kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Terraform で default セキュリティグループのルールを削除する

AWS Security Hub を導入して AWS Foundational Security Best Practices (FSBP) などを有効化すると VPC default security groups should not allow inbound or outbound traffic という警告が検出されることがある🚨

[EC2.2] VPC default security groups should not allow inbound or outbound traffic
This control checks whether the default security group of a VPC allows inbound or outbound traffic. The control fails if the security group allows inbound or outbound traffic.

docs.aws.amazon.com

簡単に言うと Amazon VPC を作るときに自動的に作られる default セキュリティグループのルール(インバウンド・アウトバウンド)を削除しておくことで意図しないトラフィックを防げるよー💡ということ.また default セキュリティグループ自体は削除できない仕様になっているところもポイントと言える.

docs.aws.amazon.com

Terraform で default セキュリティグループのルールを削除する

コンソールからポチポチと default セキュリティグループのルールを削除することもできるけど,せっかく Terraform で構築した Amazon VPC なら default セキュリティグループも Terraform で管理したいな〜ということで aws_default_security_group リソースが使える👏

ドキュメントに create ではなく adopt という注意点も書いてある通り,aws_default_security_group リソースは少し特殊で,通常の Terraform リソースのように追加するのではなく「もともとある設定を上書きする」ような挙動になる(terraform import ともまた違う).

とは言え実装自体は簡単で,以下のように実装すれば,新しく追加する Amazon VPC の default セキュリティグループのルール(インバウンド・アウトバウンド)を削除することができる❗️

resource "aws_vpc" "sandbox" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_default_security_group" "sandbox" {
  vpc_id = aws_vpc.sandbox.id
}

Terraform で default VPC の default セキュリティグループのルールを削除する

もし default VPC を残している場合は default VPC の default セキュリティグループの考慮も必要になる.

docs.aws.amazon.com

Terraform で default VPC 自体を削除する場合は aws_default_vpc リソースに紐付けてから force_destroy = true を指定すれば削除できる.

resource "aws_default_vpc" "default" {
  force_destroy = true
}

しかし default VPC は残しつつも default セキュリティグループのルールは削除したいという場面もあると思う.そういうときは aws_vpc データソースに default = true を指定して default VPC を参照しつつ,同じように aws_default_security_group リソースで設定を上書きすれば OK👌

data "aws_vpc" "default" {
  default = true
}

resource "aws_default_security_group" "default" {
  vpc_id = data.aws_vpc.default.id
}