Skip to content

Commit cc3c024

Browse files
authored
fix: Allow settting metadata endpoint options so users can configure or disable (#657)
1 parent f43f649 commit cc3c024

File tree

13 files changed

+40
-37
lines changed

13 files changed

+40
-37
lines changed

examples/node-groups/managed-node-groups/main.tf

+4
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ module "eks_blueprints" {
134134
eni_delete = true
135135
public_ip = false # Use this to enable public IP for EC2 instances; only for public subnets used in launch templates
136136

137+
http_endpoint = "enabled"
138+
http_tokens = "optional"
139+
http_put_response_hop_limit = 3
140+
137141
# pre_userdata can be used in both cases where you provide custom_ami_id or ami_type
138142
pre_userdata = <<-EOT
139143
yum install -y amazon-ssm-agent

examples/node-groups/self-managed-node-groups/main.tf

+2
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ module "eks_blueprints" {
7878
public_ip = false
7979
enable_monitoring = false
8080

81+
enable_metadata_options = false
82+
8183
pre_userdata = <<-EOT
8284
yum install -y amazon-ssm-agent
8385
systemctl enable amazon-ssm-agent && systemctl start amazon-ssm-agent

locals.tf

-9
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ locals {
99
# aws_partition
1010
aws_partition_id = data.aws_partition.current.id
1111
aws_partition_dns_suffix = data.aws_partition.current.dns_suffix
12-
# http details
13-
http_endpoint = "enabled"
14-
http_tokens = "required"
15-
http_put_response_hop_limit = 2 # Hop limit should be between 2 and 64 for IMDSv2 instance metadata services
1612
}
1713

1814
eks_cluster_id = module.aws_eks.cluster_id
@@ -39,11 +35,6 @@ locals {
3935
# Worker Security Group
4036
worker_security_group_ids = local.worker_security_group_ids
4137

42-
# Http config
43-
http_endpoint = local.context.http_endpoint
44-
http_tokens = local.context.http_tokens
45-
http_put_response_hop_limit = local.context.http_put_response_hop_limit
46-
4738
# Data sources
4839
aws_partition_dns_suffix = local.context.aws_partition_dns_suffix
4940
aws_partition_id = local.context.aws_partition_id

modules/aws-eks-managed-node-groups/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ No modules.
4646

4747
| Name | Description | Type | Default | Required |
4848
|------|-------------|------|---------|:--------:|
49-
| <a name="input_context"></a> [context](#input\_context) | Input configuration for the Node groups | <pre>object({<br> # EKS Cluster Config<br> eks_cluster_id = string<br> cluster_ca_base64 = string<br> cluster_endpoint = string<br> cluster_version = string<br> # VPC Config<br> vpc_id = string<br> private_subnet_ids = list(string)<br> public_subnet_ids = list(string)<br> # Security Groups<br> worker_security_group_ids = list(string)<br><br> # Http config<br> http_endpoint = string<br> http_tokens = string<br> http_put_response_hop_limit = number<br> # Data sources<br> aws_partition_dns_suffix = string<br> aws_partition_id = string<br> #IAM<br> iam_role_path = string<br> iam_role_permissions_boundary = string<br> # Tags<br> tags = map(string)<br> # Service IPV4/IPV6 CIDR<br> service_ipv6_cidr = string<br> service_ipv4_cidr = string<br> })</pre> | n/a | yes |
49+
| <a name="input_context"></a> [context](#input\_context) | Input configuration for the Node groups | <pre>object({<br> # EKS Cluster Config<br> eks_cluster_id = string<br> cluster_ca_base64 = string<br> cluster_endpoint = string<br> cluster_version = string<br> # VPC Config<br> vpc_id = string<br> private_subnet_ids = list(string)<br> public_subnet_ids = list(string)<br> # Security Groups<br> worker_security_group_ids = list(string)<br><br> # Data sources<br> aws_partition_dns_suffix = string<br> aws_partition_id = string<br> #IAM<br> iam_role_path = string<br> iam_role_permissions_boundary = string<br> # Tags<br> tags = map(string)<br> # Service IPV4/IPV6 CIDR<br> service_ipv6_cidr = string<br> service_ipv4_cidr = string<br> })</pre> | n/a | yes |
5050
| <a name="input_managed_ng"></a> [managed\_ng](#input\_managed\_ng) | Map of maps of `eks_node_groups` to create | `any` | `{}` | no |
5151

5252
## Outputs

modules/aws-eks-managed-node-groups/managed-launch-templates.tf

+10-4
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,16 @@ resource "aws_launch_template" "managed_node_groups" {
3333
enabled = local.managed_node_group["enable_monitoring"]
3434
}
3535

36-
metadata_options {
37-
http_endpoint = try(var.context.http_endpoint, "enabled")
38-
http_tokens = try(var.context.http_tokens, "required") #tfsec:ignore:aws-autoscaling-enforce-http-token-imds
39-
http_put_response_hop_limit = try(var.context.http_put_response_hop_limit, 2)
36+
dynamic "metadata_options" {
37+
for_each = try(var.managed_ng.enable_metadata_options, true) ? [1] : []
38+
39+
content {
40+
http_endpoint = try(var.managed_ng.http_endpoint, "enabled")
41+
http_tokens = try(var.managed_ng.http_tokens, "required") #tfsec:ignore:aws-autoscaling-enforce-http-token-imds
42+
http_put_response_hop_limit = try(var.managed_ng.http_put_response_hop_limit, 2)
43+
http_protocol_ipv6 = try(var.managed_ng.http_protocol_ipv6, null)
44+
instance_metadata_tags = try(var.managed_ng.instance_metadata_tags, null)
45+
}
4046
}
4147

4248
tag_specifications {

modules/aws-eks-managed-node-groups/variables.tf

-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ variable "context" {
1919
# Security Groups
2020
worker_security_group_ids = list(string)
2121

22-
# Http config
23-
http_endpoint = string
24-
http_tokens = string
25-
http_put_response_hop_limit = number
2622
# Data sources
2723
aws_partition_dns_suffix = string
2824
aws_partition_id = string

modules/aws-eks-self-managed-node-groups/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Checkout the usage docs for Self-managed Node groups [examples](https://aws-ia.g
4646

4747
| Name | Description | Type | Default | Required |
4848
|------|-------------|------|---------|:--------:|
49-
| <a name="input_context"></a> [context](#input\_context) | Input configuration for the Node groups | <pre>object({<br> # EKS Cluster Config<br> eks_cluster_id = string<br> cluster_ca_base64 = string<br> cluster_endpoint = string<br> cluster_version = string<br> # VPC Config<br> vpc_id = string<br> private_subnet_ids = list(string)<br> public_subnet_ids = list(string)<br> # Security Groups<br> worker_security_group_ids = list(string)<br> # Http config<br> http_endpoint = string<br> http_tokens = string<br> http_put_response_hop_limit = number<br> # Data sources<br> aws_partition_dns_suffix = string<br> aws_partition_id = string<br><br> iam_role_path = string<br> iam_role_permissions_boundary = string<br> # Tags<br> tags = map(string)<br> # Service IPV4/IPV6 CIDR<br> service_ipv6_cidr = string<br> service_ipv4_cidr = string<br> })</pre> | n/a | yes |
49+
| <a name="input_context"></a> [context](#input\_context) | Input configuration for the Node groups | <pre>object({<br> # EKS Cluster Config<br> eks_cluster_id = string<br> cluster_ca_base64 = string<br> cluster_endpoint = string<br> cluster_version = string<br> # VPC Config<br> vpc_id = string<br> private_subnet_ids = list(string)<br> public_subnet_ids = list(string)<br> # Security Groups<br> worker_security_group_ids = list(string)<br> # Data sources<br> aws_partition_dns_suffix = string<br> aws_partition_id = string<br><br> iam_role_path = string<br> iam_role_permissions_boundary = string<br> # Tags<br> tags = map(string)<br> # Service IPV4/IPV6 CIDR<br> service_ipv6_cidr = string<br> service_ipv4_cidr = string<br> })</pre> | n/a | yes |
5050
| <a name="input_self_managed_ng"></a> [self\_managed\_ng](#input\_self\_managed\_ng) | Map of maps of `eks_self_managed_node_groups` to create | `any` | `{}` | no |
5151

5252
## Outputs

modules/aws-eks-self-managed-node-groups/self-managed-launch-templates.tf

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ module "launch_template_self_managed_ng" {
1717
kubelet_extra_args = local.self_managed_node_group["kubelet_extra_args"]
1818
monitoring = local.self_managed_node_group["enable_monitoring"]
1919

20-
http_endpoint = var.context.http_endpoint
21-
http_tokens = var.context.http_tokens
22-
http_put_response_hop_limit = var.context.http_put_response_hop_limit
20+
enable_metadata_options = try(var.self_managed_ng.enable_metadata_options, true)
21+
http_endpoint = try(var.self_managed_ng.http_endpoint, "enabled")
22+
http_tokens = try(var.self_managed_ng.http_tokens, "required")
23+
http_put_response_hop_limit = try(var.self_managed_ng.http_put_response_hop_limit, 2)
24+
http_protocol_ipv6 = try(var.self_managed_ng.http_protocol_ipv6, null)
25+
instance_metadata_tags = try(var.self_managed_ng.instance_metadata_tags, null)
2326

2427
service_ipv6_cidr = var.context.service_ipv6_cidr
2528
service_ipv4_cidr = var.context.service_ipv4_cidr

modules/aws-eks-self-managed-node-groups/variables.tf

-4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ variable "context" {
1818
public_subnet_ids = list(string)
1919
# Security Groups
2020
worker_security_group_ids = list(string)
21-
# Http config
22-
http_endpoint = string
23-
http_tokens = string
24-
http_put_response_hop_limit = number
2521
# Data sources
2622
aws_partition_dns_suffix = string
2723
aws_partition_id = string

modules/launch-templates/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ No modules.
122122
| Name | Description | Type | Default | Required |
123123
|------|-------------|------|---------|:--------:|
124124
| <a name="input_eks_cluster_id"></a> [eks\_cluster\_id](#input\_eks\_cluster\_id) | EKS Cluster ID | `string` | n/a | yes |
125-
| <a name="input_launch_template_config"></a> [launch\_template\_config](#input\_launch\_template\_config) | Launch template configuration | <pre>map(object({<br> ami = string<br> launch_template_os = optional(string)<br> launch_template_prefix = string<br> instance_type = optional(string)<br> capacity_type = optional(string)<br> iam_instance_profile = optional(string)<br> vpc_security_group_ids = optional(list(string)) # conflicts with network_interfaces<br><br> network_interfaces = optional(list(object({<br> public_ip = optional(bool)<br> security_groups = optional(list(string))<br> })))<br><br> block_device_mappings = list(object({<br> device_name = string<br> volume_type = string<br> volume_size = string<br> delete_on_termination = optional(bool)<br> encrypted = optional(bool)<br> kms_key_id = optional(string)<br> iops = optional(string)<br> throughput = optional(string)<br> }))<br><br> format_mount_nvme_disk = optional(bool)<br> pre_userdata = optional(string)<br> bootstrap_extra_args = optional(string)<br> post_userdata = optional(string)<br> kubelet_extra_args = optional(string)<br><br> http_endpoint = optional(string)<br> http_tokens = optional(string)<br> http_put_response_hop_limit = optional(number)<br><br> service_ipv6_cidr = optional(string)<br> service_ipv4_cidr = optional(string)<br><br> monitoring = optional(bool)<br> }))</pre> | n/a | yes |
125+
| <a name="input_launch_template_config"></a> [launch\_template\_config](#input\_launch\_template\_config) | Launch template configuration | <pre>map(object({<br> ami = string<br> launch_template_os = optional(string)<br> launch_template_prefix = string<br> instance_type = optional(string)<br> capacity_type = optional(string)<br> iam_instance_profile = optional(string)<br> vpc_security_group_ids = optional(list(string)) # conflicts with network_interfaces<br><br> network_interfaces = optional(list(object({<br> public_ip = optional(bool)<br> security_groups = optional(list(string))<br> })))<br><br> block_device_mappings = list(object({<br> device_name = string<br> volume_type = string<br> volume_size = string<br> delete_on_termination = optional(bool)<br> encrypted = optional(bool)<br> kms_key_id = optional(string)<br> iops = optional(string)<br> throughput = optional(string)<br> }))<br><br> format_mount_nvme_disk = optional(bool)<br> pre_userdata = optional(string)<br> bootstrap_extra_args = optional(string)<br> post_userdata = optional(string)<br> kubelet_extra_args = optional(string)<br><br> enable_metadata_options = optional(bool)<br> http_endpoint = optional(string)<br> http_tokens = optional(string)<br> http_put_response_hop_limit = optional(number)<br><br> service_ipv6_cidr = optional(string)<br> service_ipv4_cidr = optional(string)<br><br> monitoring = optional(bool)<br> }))</pre> | n/a | yes |
126126
| <a name="input_tags"></a> [tags](#input\_tags) | Additional tags (e.g. `map('BusinessUnit`,`XYZ`) | `map(string)` | `{}` | no |
127127

128128
## Outputs

modules/launch-templates/locals.tf

+2-5
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,11 @@ locals {
3535
post_userdata = ""
3636
kubelet_extra_args = ""
3737

38-
http_endpoint = "enabled"
39-
http_tokens = "required"
40-
http_put_response_hop_limit = 2
41-
4238
service_ipv6_cidr = ""
4339
service_ipv4_cidr = ""
4440
format_mount_nvme_disk = false
4541

46-
monitoring = true
42+
monitoring = true
43+
enable_metadata_options = true
4744
})
4845
}

modules/launch-templates/main.tf

+12-5
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,23 @@ resource "aws_launch_template" "this" {
7070
}
7171

7272
dynamic "monitoring" {
73-
for_each = each.value.monitoring ? { enabled = true } : {}
73+
for_each = each.value.monitoring ? [1] : []
74+
7475
content {
7576
enabled = true
7677
}
7778
}
7879

79-
metadata_options {
80-
http_endpoint = each.value.http_endpoint
81-
http_tokens = each.value.http_tokens
82-
http_put_response_hop_limit = each.value.http_put_response_hop_limit
80+
dynamic "metadata_options" {
81+
for_each = each.value.enable_metadata_options ? [1] : []
82+
83+
content {
84+
http_endpoint = try(each.value.http_endpoint, "enabled")
85+
http_tokens = try(each.value.http_tokens, "required")
86+
http_put_response_hop_limit = try(each.value.http_put_response_hop_limit, 2)
87+
http_protocol_ipv6 = try(each.value.http_protocol_ipv6, null)
88+
instance_metadata_tags = try(each.value.instance_metadata_tags, null)
89+
}
8390
}
8491

8592
lifecycle {

modules/launch-templates/variables.tf

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ variable "launch_template_config" {
3131
post_userdata = optional(string)
3232
kubelet_extra_args = optional(string)
3333

34+
enable_metadata_options = optional(bool)
3435
http_endpoint = optional(string)
3536
http_tokens = optional(string)
3637
http_put_response_hop_limit = optional(number)

0 commit comments

Comments
 (0)