Skip to content

Commit 33feec8

Browse files
feat: Add option enforce_security_group_inbound_rules_on_private_link_traffic (#332)
Co-authored-by: Bryant Biggs <[email protected]>
1 parent a1a54c5 commit 33feec8

File tree

10 files changed

+79
-68
lines changed

10 files changed

+79
-68
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ module "nlb" {
242242
subnets = ["subnet-abcde012", "subnet-bcde012a"]
243243
244244
# Security Group
245+
enforce_security_group_inbound_rules_on_private_link_traffic = "on"
245246
security_group_ingress_rules = {
246247
all_http = {
247248
from_port = 80
@@ -348,13 +349,13 @@ See [patterns.md](https://github.com/terraform-aws-modules/terraform-aws-alb/blo
348349
| Name | Version |
349350
|------|---------|
350351
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
351-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.23 |
352+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.31 |
352353

353354
## Providers
354355

355356
| Name | Version |
356357
|------|---------|
357-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.23 |
358+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.31 |
358359

359360
## Modules
360361

@@ -398,6 +399,7 @@ No modules.
398399
| <a name="input_enable_tls_version_and_cipher_suite_headers"></a> [enable\_tls\_version\_and\_cipher\_suite\_headers](#input\_enable\_tls\_version\_and\_cipher\_suite\_headers) | Indicates whether the two headers (`x-amzn-tls-version` and `x-amzn-tls-cipher-suite`), which contain information about the negotiated TLS version and cipher suite, are added to the client request before sending it to the target. Only valid for Load Balancers of type `application`. Defaults to `false` | `bool` | `null` | no |
399400
| <a name="input_enable_waf_fail_open"></a> [enable\_waf\_fail\_open](#input\_enable\_waf\_fail\_open) | Indicates whether to allow a WAF-enabled load balancer to route requests to targets if it is unable to forward the request to AWS WAF. Defaults to `false` | `bool` | `null` | no |
400401
| <a name="input_enable_xff_client_port"></a> [enable\_xff\_client\_port](#input\_enable\_xff\_client\_port) | Indicates whether the X-Forwarded-For header should preserve the source port that the client used to connect to the load balancer in `application` load balancers. Defaults to `false` | `bool` | `null` | no |
402+
| <a name="input_enforce_security_group_inbound_rules_on_private_link_traffic"></a> [enforce\_security\_group\_inbound\_rules\_on\_private\_link\_traffic](#input\_enforce\_security\_group\_inbound\_rules\_on\_private\_link\_traffic) | Indicates whether inbound security group rules are enforced for traffic originating from a PrivateLink. Only valid for Load Balancers of type network. The possible values are on and off. | `string` | `null` | no |
401403
| <a name="input_idle_timeout"></a> [idle\_timeout](#input\_idle\_timeout) | The time in seconds that the connection is allowed to be idle. Only valid for Load Balancers of type `application`. Default: `60` | `number` | `null` | no |
402404
| <a name="input_internal"></a> [internal](#input\_internal) | If true, the LB will be internal. Defaults to `false` | `bool` | `null` | no |
403405
| <a name="input_ip_address_type"></a> [ip\_address\_type](#input\_ip\_address\_type) | The type of IP addresses used by the subnets for your load balancer. The possible values are `ipv4` and `dualstack` | `string` | `null` | no |

examples/complete-alb/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ Note that this example may create resources which cost money. Run `terraform des
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.23 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.31 |
2424
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 2.0 |
2525

2626
## Providers
2727

2828
| Name | Version |
2929
|------|---------|
30-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.23 |
30+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.31 |
3131
| <a name="provider_null"></a> [null](#provider\_null) | >= 2.0 |
3232

3333
## Modules

examples/complete-alb/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.23"
7+
version = ">= 5.31"
88
}
99
null = {
1010
source = "hashicorp/null"

examples/complete-nlb/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ Note that this example may create resources which cost money. Run `terraform des
2020
| Name | Version |
2121
|------|---------|
2222
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
23-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.23 |
23+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.31 |
2424

2525
## Providers
2626

2727
| Name | Version |
2828
|------|---------|
29-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.23 |
29+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.31 |
3030

3131
## Modules
3232

examples/complete-nlb/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ module "nlb" {
4646
enable_deletion_protection = false
4747

4848
# Security Group
49+
enforce_security_group_inbound_rules_on_private_link_traffic = "off"
4950
security_group_ingress_rules = {
5051
all_tcp = {
5152
from_port = 80

examples/complete-nlb/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.23"
7+
version = ">= 5.31"
88
}
99
}
1010
}

main.tf

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,25 @@ resource "aws_lb" "this" {
2222
}
2323
}
2424

25-
customer_owned_ipv4_pool = var.customer_owned_ipv4_pool
26-
desync_mitigation_mode = var.desync_mitigation_mode
27-
dns_record_client_routing_policy = var.dns_record_client_routing_policy
28-
drop_invalid_header_fields = var.drop_invalid_header_fields
29-
enable_cross_zone_load_balancing = var.enable_cross_zone_load_balancing
30-
enable_deletion_protection = var.enable_deletion_protection
31-
enable_http2 = var.enable_http2
32-
enable_tls_version_and_cipher_suite_headers = var.enable_tls_version_and_cipher_suite_headers
33-
enable_waf_fail_open = var.enable_waf_fail_open
34-
enable_xff_client_port = var.enable_xff_client_port
35-
idle_timeout = var.idle_timeout
36-
internal = var.internal
37-
ip_address_type = var.ip_address_type
38-
load_balancer_type = var.load_balancer_type
39-
name = var.name
40-
name_prefix = var.name_prefix
41-
preserve_host_header = var.preserve_host_header
42-
security_groups = var.create_security_group ? concat([aws_security_group.this[0].id], var.security_groups) : var.security_groups
25+
customer_owned_ipv4_pool = var.customer_owned_ipv4_pool
26+
desync_mitigation_mode = var.desync_mitigation_mode
27+
dns_record_client_routing_policy = var.dns_record_client_routing_policy
28+
drop_invalid_header_fields = var.drop_invalid_header_fields
29+
enable_cross_zone_load_balancing = var.enable_cross_zone_load_balancing
30+
enable_deletion_protection = var.enable_deletion_protection
31+
enable_http2 = var.enable_http2
32+
enable_tls_version_and_cipher_suite_headers = var.enable_tls_version_and_cipher_suite_headers
33+
enable_waf_fail_open = var.enable_waf_fail_open
34+
enable_xff_client_port = var.enable_xff_client_port
35+
enforce_security_group_inbound_rules_on_private_link_traffic = var.enforce_security_group_inbound_rules_on_private_link_traffic
36+
idle_timeout = var.idle_timeout
37+
internal = var.internal
38+
ip_address_type = var.ip_address_type
39+
load_balancer_type = var.load_balancer_type
40+
name = var.name
41+
name_prefix = var.name_prefix
42+
preserve_host_header = var.preserve_host_header
43+
security_groups = var.create_security_group ? concat([aws_security_group.this[0].id], var.security_groups) : var.security_groups
4344

4445
dynamic "subnet_mapping" {
4546
for_each = var.subnet_mapping

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ variable "load_balancer_type" {
104104
default = "application"
105105
}
106106

107+
variable "enforce_security_group_inbound_rules_on_private_link_traffic" {
108+
description = "Indicates whether inbound security group rules are enforced for traffic originating from a PrivateLink. Only valid for Load Balancers of type network. The possible values are on and off."
109+
type = string
110+
default = null
111+
}
112+
107113
variable "name" {
108114
description = "The name of the LB. This name must be unique within your AWS account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen"
109115
type = string

versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.23"
7+
version = ">= 5.31"
88
}
99
}
1010
}

wrappers/main.tf

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,46 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
access_logs = try(each.value.access_logs, var.defaults.access_logs, {})
7-
associate_web_acl = try(each.value.associate_web_acl, var.defaults.associate_web_acl, false)
8-
create = try(each.value.create, var.defaults.create, true)
9-
create_security_group = try(each.value.create_security_group, var.defaults.create_security_group, true)
10-
customer_owned_ipv4_pool = try(each.value.customer_owned_ipv4_pool, var.defaults.customer_owned_ipv4_pool, null)
11-
default_port = try(each.value.default_port, var.defaults.default_port, 80)
12-
default_protocol = try(each.value.default_protocol, var.defaults.default_protocol, "HTTP")
13-
desync_mitigation_mode = try(each.value.desync_mitigation_mode, var.defaults.desync_mitigation_mode, null)
14-
dns_record_client_routing_policy = try(each.value.dns_record_client_routing_policy, var.defaults.dns_record_client_routing_policy, null)
15-
drop_invalid_header_fields = try(each.value.drop_invalid_header_fields, var.defaults.drop_invalid_header_fields, true)
16-
enable_cross_zone_load_balancing = try(each.value.enable_cross_zone_load_balancing, var.defaults.enable_cross_zone_load_balancing, true)
17-
enable_deletion_protection = try(each.value.enable_deletion_protection, var.defaults.enable_deletion_protection, true)
18-
enable_http2 = try(each.value.enable_http2, var.defaults.enable_http2, null)
19-
enable_tls_version_and_cipher_suite_headers = try(each.value.enable_tls_version_and_cipher_suite_headers, var.defaults.enable_tls_version_and_cipher_suite_headers, null)
20-
enable_waf_fail_open = try(each.value.enable_waf_fail_open, var.defaults.enable_waf_fail_open, null)
21-
enable_xff_client_port = try(each.value.enable_xff_client_port, var.defaults.enable_xff_client_port, null)
22-
idle_timeout = try(each.value.idle_timeout, var.defaults.idle_timeout, null)
23-
internal = try(each.value.internal, var.defaults.internal, null)
24-
ip_address_type = try(each.value.ip_address_type, var.defaults.ip_address_type, null)
25-
listeners = try(each.value.listeners, var.defaults.listeners, {})
26-
load_balancer_type = try(each.value.load_balancer_type, var.defaults.load_balancer_type, "application")
27-
name = try(each.value.name, var.defaults.name, null)
28-
name_prefix = try(each.value.name_prefix, var.defaults.name_prefix, null)
29-
preserve_host_header = try(each.value.preserve_host_header, var.defaults.preserve_host_header, null)
30-
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
31-
route53_records = try(each.value.route53_records, var.defaults.route53_records, {})
32-
security_group_description = try(each.value.security_group_description, var.defaults.security_group_description, null)
33-
security_group_egress_rules = try(each.value.security_group_egress_rules, var.defaults.security_group_egress_rules, {})
34-
security_group_ingress_rules = try(each.value.security_group_ingress_rules, var.defaults.security_group_ingress_rules, {})
35-
security_group_name = try(each.value.security_group_name, var.defaults.security_group_name, null)
36-
security_group_tags = try(each.value.security_group_tags, var.defaults.security_group_tags, {})
37-
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.defaults.security_group_use_name_prefix, true)
38-
security_groups = try(each.value.security_groups, var.defaults.security_groups, [])
39-
subnet_mapping = try(each.value.subnet_mapping, var.defaults.subnet_mapping, [])
40-
subnets = try(each.value.subnets, var.defaults.subnets, [])
41-
tags = try(each.value.tags, var.defaults.tags, {})
42-
target_groups = try(each.value.target_groups, var.defaults.target_groups, {})
43-
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
44-
vpc_id = try(each.value.vpc_id, var.defaults.vpc_id, null)
45-
web_acl_arn = try(each.value.web_acl_arn, var.defaults.web_acl_arn, null)
46-
xff_header_processing_mode = try(each.value.xff_header_processing_mode, var.defaults.xff_header_processing_mode, null)
6+
access_logs = try(each.value.access_logs, var.defaults.access_logs, {})
7+
associate_web_acl = try(each.value.associate_web_acl, var.defaults.associate_web_acl, false)
8+
create = try(each.value.create, var.defaults.create, true)
9+
create_security_group = try(each.value.create_security_group, var.defaults.create_security_group, true)
10+
customer_owned_ipv4_pool = try(each.value.customer_owned_ipv4_pool, var.defaults.customer_owned_ipv4_pool, null)
11+
default_port = try(each.value.default_port, var.defaults.default_port, 80)
12+
default_protocol = try(each.value.default_protocol, var.defaults.default_protocol, "HTTP")
13+
desync_mitigation_mode = try(each.value.desync_mitigation_mode, var.defaults.desync_mitigation_mode, null)
14+
dns_record_client_routing_policy = try(each.value.dns_record_client_routing_policy, var.defaults.dns_record_client_routing_policy, null)
15+
drop_invalid_header_fields = try(each.value.drop_invalid_header_fields, var.defaults.drop_invalid_header_fields, true)
16+
enable_cross_zone_load_balancing = try(each.value.enable_cross_zone_load_balancing, var.defaults.enable_cross_zone_load_balancing, true)
17+
enable_deletion_protection = try(each.value.enable_deletion_protection, var.defaults.enable_deletion_protection, true)
18+
enable_http2 = try(each.value.enable_http2, var.defaults.enable_http2, null)
19+
enable_tls_version_and_cipher_suite_headers = try(each.value.enable_tls_version_and_cipher_suite_headers, var.defaults.enable_tls_version_and_cipher_suite_headers, null)
20+
enable_waf_fail_open = try(each.value.enable_waf_fail_open, var.defaults.enable_waf_fail_open, null)
21+
enable_xff_client_port = try(each.value.enable_xff_client_port, var.defaults.enable_xff_client_port, null)
22+
enforce_security_group_inbound_rules_on_private_link_traffic = try(each.value.enforce_security_group_inbound_rules_on_private_link_traffic, var.defaults.enforce_security_group_inbound_rules_on_private_link_traffic, null)
23+
idle_timeout = try(each.value.idle_timeout, var.defaults.idle_timeout, null)
24+
internal = try(each.value.internal, var.defaults.internal, null)
25+
ip_address_type = try(each.value.ip_address_type, var.defaults.ip_address_type, null)
26+
listeners = try(each.value.listeners, var.defaults.listeners, {})
27+
load_balancer_type = try(each.value.load_balancer_type, var.defaults.load_balancer_type, "application")
28+
name = try(each.value.name, var.defaults.name, null)
29+
name_prefix = try(each.value.name_prefix, var.defaults.name_prefix, null)
30+
preserve_host_header = try(each.value.preserve_host_header, var.defaults.preserve_host_header, null)
31+
putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true)
32+
route53_records = try(each.value.route53_records, var.defaults.route53_records, {})
33+
security_group_description = try(each.value.security_group_description, var.defaults.security_group_description, null)
34+
security_group_egress_rules = try(each.value.security_group_egress_rules, var.defaults.security_group_egress_rules, {})
35+
security_group_ingress_rules = try(each.value.security_group_ingress_rules, var.defaults.security_group_ingress_rules, {})
36+
security_group_name = try(each.value.security_group_name, var.defaults.security_group_name, null)
37+
security_group_tags = try(each.value.security_group_tags, var.defaults.security_group_tags, {})
38+
security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.defaults.security_group_use_name_prefix, true)
39+
security_groups = try(each.value.security_groups, var.defaults.security_groups, [])
40+
subnet_mapping = try(each.value.subnet_mapping, var.defaults.subnet_mapping, [])
41+
subnets = try(each.value.subnets, var.defaults.subnets, [])
42+
tags = try(each.value.tags, var.defaults.tags, {})
43+
target_groups = try(each.value.target_groups, var.defaults.target_groups, {})
44+
timeouts = try(each.value.timeouts, var.defaults.timeouts, {})
45+
vpc_id = try(each.value.vpc_id, var.defaults.vpc_id, null)
46+
web_acl_arn = try(each.value.web_acl_arn, var.defaults.web_acl_arn, null)
47+
xff_header_processing_mode = try(each.value.xff_header_processing_mode, var.defaults.xff_header_processing_mode, null)
4748
}

0 commit comments

Comments
 (0)