🕸️
aws-sdk-go-v2でMFAトークンによるAssumeRoleに対応する
タイトルの通りですが、aws-sdk-go-v2でMFAトークンによるAssumeRoleに対応するのに手間取ったのでサンプルコードを残します。
破壊的変更が頻繁に入っているようで、ネットに落ちているサンプルコードが軒並み動かないかんじでした。
main.go
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials/stscreds"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
cfg, _ := config.LoadDefaultConfig(context.Background(),
config.WithRegion("ap-northeast-1"),
config.WithAssumeRoleCredentialOptions(func(options *stscreds.AssumeRoleOptions) {
options.TokenProvider = func() (string, error) {
// MFAの入力を標準入力から受け付ける
return stscreds.StdinTokenProvider()
}
}),
)
// ここからは操作したいサービスのクライアント立ち上げ、実際の操作を行う
client := s3.NewFromConfig(cfg)
res, err := client.GetObject(context.Background(), &s3.GetObjectInput{
Bucket: aws.String("hoge-bucket"),
Key: aws.String("index.html"),
})
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(res)
}
Discussion