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

Lines changed: 4 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 0 additions & 9 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 10 additions & 4 deletions
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

Lines changed: 0 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 6 additions & 3 deletions
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

Lines changed: 0 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
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

0 commit comments

Comments
 (0)