📖

[備忘録]AWSのcredentialsには有効期限がある

2022/12/09に公開

この記事を一言で

AWS SDK Go v2を使って作成したcredentialsにはexpireがあるので、使いまわせません。
expireしたら再生成しましょう。
今回はGoで発生しましたが、おそらくGo以外の言語でも同じです。
IAMセッション期間と連動していると思われます。

// エラーハンドリングは省略します。

// cfgは静的なものでずっと有効
cfg, err := config.LoadDefaultConfig(ctx)

// credentialsはIAMのセッション期間が過ぎると無効化される
// 今の時点では最長12時間
credentials, err := cfg.Credentials.Retrieve(ctx)
if (credentials.Expired()) {
  // 再生成
}

何があったか

AWSに通信を送るときにIAM認証をONにしていた。
IAMをONにしているので、credentialsを作成してsigv4で署名しないと通信を送れない。
毎回通信のたびにcredentialsを生成するのはもったいないので、サーバー起動時に1回だけ作るようにしたら通信が通らなくなった。
原因はcredentialsがexpireされていたから。
Expired()でチェックして再生成しましょう。

参考

AWS SDK go v2のcredentialsのdocs
AWSのsigv4について

Discussion