Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instance Metadata Service Version 2 (IMDSv2) for EC2 Instances. #29

Open
1 task done
caiovfernandes opened this issue Sep 24, 2021 · 0 comments
Open
1 task done
Labels
enhancement New feature or request good first issue Good for newcomers Hacktoberfest Hacktoberfest event

Comments

@caiovfernandes
Copy link
Contributor

caiovfernandes commented Sep 24, 2021

Contact Details (optional)

No response

Summary

The objective os this issue is to force the usage of Instance Metadata Service Version 2 into our EC2 instances.

The terraform attribute to apply imsv2 in the aws_launch_template resource is the http_tokens.

The Instance Metadata Service (IMDS) is an on-instance component used by code on the instance to securely access instance metadata. You can access instance metadata from a running instance using one of the following methods:

Instance Metadata Service Version 1 (IMDSv1) – a request/response method
Instance Metadata Service Version 2 (IMDSv2) – a session-oriented method

As a request/response method IMDSv1 is prone to local misconfigurations:

  • Open proxies, open NATs and routers, server-side reflection vulnerabilities.
  • One way or another, local software might access local-only data.

File to modify

ec2-launch-template.tf

Resource: aws_launch_template
Arguments: http_tokens - (Optional) Whether or not the metadata service requires session tokens, the mechanism used for Instance Metadata Service Version 2. Can be "optional" or "required". (Default: "optional"). Set to "required" to enable Instance Metadata Service V2.

Usage example :

resource "aws_launch_template" "example" {
  ...
    metadata_options {
            ...
           http_endpoint = "enabled"
           http_tokens   = "required"
    }
  ...
}

Attention point

If setting http_tokens = "required" in a launch template that is being used for a EKS worker/node group, you should consider setting the http_put_response_hop_limit = 2 per the default behavior in EKS.
Without this setting the default service account in EKS will not be able to access the instance metadata service.

Motivation

As described in AWS Foundational Security Best Practices controls, the EC2 instances should use IMDSv2.

This control checks whether your EC2 instance metadata version is configured with Instance Metadata Service Version 2 (IMDSv2). The control passes if HttpTokens is set to required for IMDSv2. The control fails if HttpTokens is set to optional.

You use instance metadata to configure or manage the running instance. The IMDS provides access to temporary, frequently rotated credentials. These credentials remove the need to hard code or distribute sensitive credentials to instances manually or programmatically. The IMDS is attached locally to every EC2 instance. It runs on a special "link local" IP address of 169.254.169.254. This IP address is only accessible by software that runs on the instance.

Version 2 of the IMDS adds new protections for the following types of vulnerabilities. These vulnerabilities could be used to try to access the IMDS.

  • Open website application firewalls
  • Open reverse proxies
  • Server-side request forgery (SSRF) vulnerabilities
  • Open Layer 3 firewalls and network address translation (NAT)
  • Security Hub recommends that you configure your EC2 instances with IMDSv2.

Alternatives

No response

Additional Context

References

ec2-imdsv2-check
Amazon EKS now supports EC2 Instance Metadata Service v2
Resource aws_launch_template

Code of Conduct

  • I agree to follow this project's Code of Conduct
@caiovfernandes caiovfernandes added Hacktoberfest Hacktoberfest event enhancement New feature or request good first issue Good for newcomers labels Sep 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers Hacktoberfest Hacktoberfest event
Projects
None yet
Development

No branches or pull requests

1 participant