Authenticating Go AWS SDK v2 using external id

2023-03-01

Assume · Aws · External-Id · Golang · Roles · Sdk · Tech · V2

1 minute

For self reference:

Sample code as to how to authenticate aws-sdk-go-v2 using external ids:

import (
awsv2 "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
credentialsv2 "github.com/aws/aws-sdk-go-v2/credentials"
stscredsv2 "github.com/aws/aws-sdk-go-v2/credentials/stscreds"
s3v2 "github.com/aws/aws-sdk-go-v2/service/s3"
stsv2 "github.com/aws/aws-sdk-go-v2/service/sts"
"github.com/aws/aws-sdk-go/aws"
)
ctx := context.Background()
assumecnf, _ := config.LoadDefaultConfig(
ctx, config.WithRegion("{aws-region}"),
config.WithCredentialsProvider(awsv2.NewCredentialsCache(
credentialsv2.NewStaticCredentialsProvider(
"{your-assumer-key}",
"{your-assumer-secret}", "",
)),
),
)
stsclient := stsv2.NewFromConfig(assumecnf)
cnf, _ := config.LoadDefaultConfig(
ctx, config.WithRegion("{aws-region}"),
config.WithCredentialsProvider(awsv2.NewCredentialsCache(
stscredsv2.NewAssumeRoleProvider(
stsclient,
"{role-arn-to-assume}",
func(o *stscredsv2.AssumeRoleOptions) {
o.ExternalID = aws.String("{external-id}")
},
)),
),
)
client := s3v2.NewFromConfig(cnf)
...