MFAによって認証された有効期限付きのAWS Access Keyをできるだけ楽に使いたい

AWSのIAMユーザーを作って権限を与えて管理している場合、やっぱりふとしたミスが怖い。

例えば、AccessKeyとSecretAccessKeyをプログラムの中に埋め込んでしまっていることを忘れて public repository にコミットしてしまったりなど。
そもそも、profileをちゃんと使って、ソースコードの中に決して埋め込まないようにしたり、IAM Roleとかを使えという話ではあるが、扱う人のAWSレベルによってはこのあたりが理解されず、また、古い資料にはプラクティスを反映していないものがあるので、それらを鵜呑みにしてしまうこともあるので、どうしても問題はなくならない。

なので、複数人で同一アカウントを利用し、ローカルでの個人利用をする場合はコンソールへのログインだけではなく、APIコールもMFA承認をしなくてはつかえないようにすることができる。 具体的には、以下のように Policy の Condition で aws:MultiFactorAuthPresent の有無による制御をかけられる。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_users-self-manage-mfa-and-creds.html


この設定を行った場合、AccessKeyによるProgram Accessを利用する場合はまずsts:GetSessionTokenでMFAコードを渡し、一時的に有効なトークンを取得しなくてはいけない。 取得の方法や使い方なんかは例えば以下のページなどでまとめられている。

https://dev.classmethod.jp/cloud/aws/mfa-protected-aws-api/


が、取得したこれらの認証情報を使いたいのだけれども特定プロファイルに対して逐一自分で保存をしなければいけないのがそろそろ面倒になってきたので、スクリプト1個で何とかできるように以下のようなコードを書いてみた。

https://github.com/a-hisame/aws-mfa-credential-settings


まあ、集団でAccessKeyをちゃんと管理するのであれば、例えばVault使うとかの方が良いと思うけれど、ほぼ個人利用でAccessKeyの流出被害を最低限に抑えるための自己満足として。