🧣

aws-sdk-go-v2 でIAMロール認証を使う

2022/06/10に公開

クレデンシャルの参照順序

aws-sdk-go-v2では、簡易に示すと以下の順序でクレデンシャルを取得します。

  1. 環境変数
  2. ~/.aws/config, ~/.aws/credentials
  3. IAMロール

ただしIAMロールを使用するよう推奨しています。詳細事項は以下にあります
https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specifying-credentials

config.LoadDefaultConfig

IAMロールの認証情報を取得するには、AWS SDK forGOV2の入門のコードにもあるようにLoadDefaultConfigという関数を基本的に利用するのが良さそうです。
リージョン情報は取ってくれないため指定するか、環境変数で定義する必要があります。

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
if err != nil {
	log.Fatal(err)
}

https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Config

S3: ListBuckets

上記を踏まえて、例えばS3バケットの一覧と作成時刻を表示には以下のようなコードになります。

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
if err != nil {
	log.Fatal(err)
}

s3Client := s3.NewFromConfig(cfg)
buckets, err := s3Client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
if err != nil {
	log.Fatal(err)
}

for _, bucket := range (*listBuckets).Buckets {
	fmt.Printf("%s %s\n", *bucket.CreationDate, *bucket.Name)
}

Discussion