Skip to content
This repository was archived by the owner on Jul 31, 2025. It is now read-only.
This repository was archived by the owner on Jul 31, 2025. It is now read-only.

Unable to get EC2 Role Credentials #1861

@bensont1

Description

@bensont1

Please fill out the sections below to help us address your issue.

Version of AWS SDK for Go?

1.13.20

Version of Go (go version)?

1.9.3

What issue did you see?

I used the following method to simply list the objects in a S3 bucket, however the SDK cannot seem to get the EC2 role which is set to s3:* for * resources. This is the code I'm using to list, as well log debug enabled.

I've verified that the Role is indeed attached to the instance. One thing I did notice, when curl-ing https://169.254.169.254/latest/meta-data/iam/security-credentials from the instance, I get a timeout as well, but when curl is issued for http only, I get a valid response...

        sess := session.New(&aws.Config{
		LogLevel:                      aws.LogLevel(aws.LogDebugWithHTTPBody),
		CredentialsChainVerboseErrors: aws.Bool(true),
		Region: aws.String("us-east-1"),
	})

	val, err := sess.Config.Credentials.Get()
	fmt.Println(val)
	fmt.Println(err)

	svc := s3.New(sess)

	input := &s3.ListObjectsInput{
		Bucket: aws.String("bucket-name"),
	}

	result, err := svc.ListObjects(input)
	if err != nil {
		if aerr, ok := err.(awserr.Error); ok {
			switch aerr.Code() {
			case s3.ErrCodeNoSuchBucket:
				fmt.Println(s3.ErrCodeNoSuchBucket, aerr.Error())
			default:
				fmt.Println(aerr.Error())
			}
		} else {
			// Print the error, cast err to awserr.Error to get the Code and
			// Message from an error.
			fmt.Println(err.Error())
		}
		return
	}

	fmt.Println(result)

Output:

2018/03/24 23:48:26 DEBUG: Request ec2metadata/GetMetadata Details:
---[ REQUEST POST-SIGN ]-----------------------------
GET /latest/meta-data/iam/security-credentials HTTP/1.1
Host: 169.254.169.254
User-Agent: aws-sdk-go/1.13.20 (go1.9.3; linux; amd64)
Accept-Encoding: gzip


-----------------------------------------------------

2018/03/24 23:48:56 DEBUG: Request ec2metadata/GetMetadata Details:
---[ REQUEST POST-SIGN ]-----------------------------
GET /latest/meta-data/iam/security-credentials HTTP/1.1
Host: 169.254.169.254
User-Agent: aws-sdk-go/1.13.20 (go1.9.3; linux; amd64)
Authorization: AWS4-HMAC-SHA256 Credential=***/20180324/us-east-1/es/aws4_request, SignedHeaders=date;host;x-amz-date;x-amz-security-token, Signature=***
Date: 2018-03-24T23:48:26Z
X-Amz-Date: 20180324T234826Z
X-Amz-Security-Token: ***
Accept-Encoding: gzip


-----------------------------------------------------

After a minute or so, I get the following error

{   }
NoCredentialProviders: no valid providers in chain
caused by: EnvAccessKeyNotFound: AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment
UserHomeNotFound: user home directory not found.
EC2RoleRequestError: no EC2 instance role found
caused by: RequestError: send request failed
caused by: Get https://169.254.169.254/latest/meta-data/iam/security-credentials: dial tcp 169.254.169.254:443: i/o timeout
2018/03/24 23:50:26 DEBUG: Request ec2metadata/GetMetadata Details:
---[ REQUEST POST-SIGN ]-----------------------------
GET /latest/meta-data/iam/security-credentials HTTP/1.1
Host: 169.254.169.254
User-Agent: aws-sdk-go/1.13.20 (go1.9.3; linux; amd64)
Accept-Encoding: gzip


-----------------------------------------------------

Steps to reproduce

If you have have an runnable example, please include it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    guidanceQuestion that needs advice or information.service-apiThis issue is due to a problem in a service API, not the SDK implementation.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions