diff --git a/examples/complete/README.md b/examples/complete/README.md
index be8c6cdc..d655529e 100644
--- a/examples/complete/README.md
+++ b/examples/complete/README.md
@@ -39,12 +39,15 @@ Note that this example may create resources which cost money. Run `terraform des
| [ipv4\_ipv6\_example](#module\_ipv4\_ipv6\_example) | ../../ | n/a |
| [main\_sg](#module\_main\_sg) | ../../ | n/a |
| [only\_rules](#module\_only\_rules) | ../../ | n/a |
+| [prefix\_list](#module\_prefix\_list) | ../../ | n/a |
| [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | n/a |
## Resources
| Name | Type |
|------|------|
+| [aws_prefix_list.dynamodb](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/prefix_list) | data source |
+| [aws_prefix_list.s3](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/prefix_list) | data source |
| [aws_security_group.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/security_group) | data source |
| [aws_vpc.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc) | data source |
diff --git a/examples/complete/main.tf b/examples/complete/main.tf
index cd824efb..2f00a1c2 100644
--- a/examples/complete/main.tf
+++ b/examples/complete/main.tf
@@ -66,7 +66,8 @@ module "complete_sg" {
ingress_ipv6_cidr_blocks = ["2001:db8::/64"]
# Prefix list ids to use in all ingress rules in this module.
- # ingress_prefix_list_ids = ["pl-123456"]
+ # ingress_prefix_list_ids = [data.aws_prefix_list.s3.id, data.aws_prefix_list.dynamodb.id]
+
# Open for all CIDRs defined in ingress_cidr_blocks
ingress_rules = ["https-443-tcp"]
@@ -399,3 +400,40 @@ module "only_rules" {
},
]
}
+
+###################################
+# Security group with prefix lists
+###################################
+
+data "aws_prefix_list" "s3" {
+ filter {
+ name = "prefix-list-name"
+ values = ["com.amazonaws.eu-west-1.s3"]
+ }
+}
+
+data "aws_prefix_list" "dynamodb" {
+ filter {
+ name = "prefix-list-name"
+ values = ["com.amazonaws.eu-west-1.dynamodb"]
+ }
+}
+
+module "prefix_list" {
+ source = "../../"
+
+ name = "pl-sg"
+ description = "Security group with prefix list"
+ vpc_id = data.aws_vpc.default.id
+
+ ingress_prefix_list_ids = [data.aws_prefix_list.s3.id, data.aws_prefix_list.dynamodb.id]
+ ingress_with_cidr_blocks = [
+ {
+ from_port = 9100
+ to_port = 9100
+ protocol = 6 # "tcp"
+ description = "Arbitrary TCP port"
+ prefix_list_ids = join(",", [data.aws_prefix_list.s3.id, data.aws_prefix_list.dynamodb.id])
+ },
+ ]
+}
diff --git a/main.tf b/main.tf
index 6ca0aaf9..85374990 100644
--- a/main.tf
+++ b/main.tf
@@ -194,14 +194,14 @@ resource "aws_security_group_rule" "ingress_with_cidr_blocks" {
security_group_id = local.this_sg_id
type = "ingress"
- cidr_blocks = split(
+ cidr_blocks = compact(split(
",",
lookup(
var.ingress_with_cidr_blocks[count.index],
"cidr_blocks",
join(",", var.ingress_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.ingress_prefix_list_ids
description = lookup(
var.ingress_with_cidr_blocks[count.index],
@@ -233,14 +233,14 @@ resource "aws_security_group_rule" "computed_ingress_with_cidr_blocks" {
security_group_id = local.this_sg_id
type = "ingress"
- cidr_blocks = split(
+ cidr_blocks = compact(split(
",",
lookup(
var.computed_ingress_with_cidr_blocks[count.index],
"cidr_blocks",
join(",", var.ingress_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.ingress_prefix_list_ids
description = lookup(
var.computed_ingress_with_cidr_blocks[count.index],
@@ -284,14 +284,14 @@ resource "aws_security_group_rule" "ingress_with_ipv6_cidr_blocks" {
security_group_id = local.this_sg_id
type = "ingress"
- ipv6_cidr_blocks = split(
+ ipv6_cidr_blocks = compact(split(
",",
lookup(
var.ingress_with_ipv6_cidr_blocks[count.index],
"ipv6_cidr_blocks",
join(",", var.ingress_ipv6_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.ingress_prefix_list_ids
description = lookup(
var.ingress_with_ipv6_cidr_blocks[count.index],
@@ -323,14 +323,14 @@ resource "aws_security_group_rule" "computed_ingress_with_ipv6_cidr_blocks" {
security_group_id = local.this_sg_id
type = "ingress"
- ipv6_cidr_blocks = split(
+ ipv6_cidr_blocks = compact(split(
",",
lookup(
var.computed_ingress_with_ipv6_cidr_blocks[count.index],
"ipv6_cidr_blocks",
join(",", var.ingress_ipv6_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.ingress_prefix_list_ids
description = lookup(
var.computed_ingress_with_ipv6_cidr_blocks[count.index],
@@ -570,14 +570,14 @@ resource "aws_security_group_rule" "egress_with_cidr_blocks" {
security_group_id = local.this_sg_id
type = "egress"
- cidr_blocks = split(
+ cidr_blocks = compact(split(
",",
lookup(
var.egress_with_cidr_blocks[count.index],
"cidr_blocks",
join(",", var.egress_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.egress_prefix_list_ids
description = lookup(
var.egress_with_cidr_blocks[count.index],
@@ -609,14 +609,14 @@ resource "aws_security_group_rule" "computed_egress_with_cidr_blocks" {
security_group_id = local.this_sg_id
type = "egress"
- cidr_blocks = split(
+ cidr_blocks = compact(split(
",",
lookup(
var.computed_egress_with_cidr_blocks[count.index],
"cidr_blocks",
join(",", var.egress_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.egress_prefix_list_ids
description = lookup(
var.computed_egress_with_cidr_blocks[count.index],
@@ -660,14 +660,14 @@ resource "aws_security_group_rule" "egress_with_ipv6_cidr_blocks" {
security_group_id = local.this_sg_id
type = "egress"
- ipv6_cidr_blocks = split(
+ ipv6_cidr_blocks = compact(split(
",",
lookup(
var.egress_with_ipv6_cidr_blocks[count.index],
"ipv6_cidr_blocks",
join(",", var.egress_ipv6_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.egress_prefix_list_ids
description = lookup(
var.egress_with_ipv6_cidr_blocks[count.index],
@@ -699,14 +699,14 @@ resource "aws_security_group_rule" "computed_egress_with_ipv6_cidr_blocks" {
security_group_id = local.this_sg_id
type = "egress"
- ipv6_cidr_blocks = split(
+ ipv6_cidr_blocks = compact(split(
",",
lookup(
var.computed_egress_with_ipv6_cidr_blocks[count.index],
"ipv6_cidr_blocks",
join(",", var.egress_ipv6_cidr_blocks),
),
- )
+ ))
prefix_list_ids = var.egress_prefix_list_ids
description = lookup(
var.computed_egress_with_ipv6_cidr_blocks[count.index],