タイトルオンリーです。
GItHub HooksのCIDRから来たhttpsアクセスのみ許可するセキュリティグループを考えます。
マネージドプリフィクス使わない例。CIDRブロックの数だけ、ingress ruleをfor_eachで回して作成する形になります。
locals { # https://api.github.com/meta github_webhook_cidr = [ "192.30.252.0/22", "185.199.108.0/22", "140.82.112.0/20", "143.55.64.0/20", ] } resource "aws_security_group" "main" { name = "no prefix list" vpc_id = var.vpc_id } resource "aws_vpc_security_group_ingress_rule" "main" { for_each = toset(local.github_webhook_cidr) security_group_id = aws_security_group.main.id ip_protocol = "tcp" from_port = 443 to_port = 443 cidr_ipv4 = each.value }
マネージドプリフィクス使う例。マネージドプリフィクスを指定したingress rule1つだけ作成される形になります。
locals { # https://api.github.com/meta github_webhook_cidr = [ "192.30.252.0/22", "185.199.108.0/22", "140.82.112.0/20", "143.55.64.0/20", ] } resource "aws_ec2_managed_prefix_list" "main" { name = "GitHub Hooks" address_family = "IPv4" max_entries = length(local.github_webhook_cidr) dynamic "entry" { for_each = local.github_webhook_cidr content { cidr = entry.value } } } resource "aws_security_group" "main" { name = "prefix list" vpc_id = var.vpc_id } resource "aws_vpc_security_group_ingress_rule" "main" { security_group_id = aws_security_group.main.id ip_protocol = "tcp" from_port = 443 to_port = 443 prefix_list_id = aws_ec2_managed_prefix_list.main.id }
何が嬉しいかというと、CIDRの変更する際に aws_ec2_managed_prefix_list.main
のリソースの変更だけで済むということです。ingress ruleに直接CIDRを指定してる場合だと、それぞれのルールの作成削除が行われて、変更差分が見にくくなります。