Go
AWS
golang
aws-sdk-go

aws-sdk-goでEC2のIAMロールとAWS認証情報ファイルの両方に対応する

More than 1 year has passed since last update.

Amazon Elasticsearch Service用の認証プロキシを作る際に、クレデンシャルの取得部分でとてもハマったのでメモしておきます。

assumerole用とかアクセスキー用とかのプロバイダもあるので、それらを組み合わせればAWSCLIと同等のものを簡単にれるかと思います。

コードとしてはこの辺でやってます。

https://github.com/ikeisuke/amzn-es-proxy/blob/master/signer.go#L29


EC2のIAMロールのクレデンシャルの取得

ec2m := ec2metadata.New(session.New(), &aws.Config{

HTTPClient: &http.Client{Timeout: time.Second},
})
creds := ec2rolecreds.EC2RoleProvider{
Client: ec2m,
}


AWS認証情報ファイルからの取得

creds := credentials.SharedCredentialsProvider{

Profile: profile,
}


二つをまとめて1つのクレデンシャルとして取得

ec2m := ec2metadata.New(session.New(), &aws.Config{

HTTPClient: &http.Client{Timeout: time.Second},
})
creds := credentials.NewChainCredentials([]credentials.Provider{
&credentials.SharedCredentialsProvider{
Profile: profile,
},
&ec2rolecreds.EC2RoleProvider{
Client: ec2m,
},
})