🕸️

aws-sdk-go-v2でMFAトークンによるAssumeRoleに対応する

2022/02/03に公開

タイトルの通りですが、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