AWS の session token を簡単に管理する
トークン取得→設定作業が地味に面倒
先日、こんな issei-m がこんな投稿をしました。
IAM で MFA を強制する方法と CLI での認証方法 – もばらぶエンジニアブログ
今はどこもセキュリティが厳しくなって、MFA が必須のところが多くなっていると思いますが、上の投稿では、
- AWS で MFA を強制する方法
- CLI で MFA の認証を使う方法
aws sts get-session-token
で session toke を取得- 表示される情報を環境変数や
.aws/credentials
ファイルに記載
を紹介しています。ただ、記事中にある通り、セッショントークンは最大で36時間までしか有効で無いので、そのたびに毎回環境変数や credentials ファイルを書き換えるのが、一度の手間は大したことないとは言え、ほぼ毎日やるとなると地味に面倒です。
今回は、それを解消する方法を2つ紹介します。
シェルスクリプトを使う
aws sts get-session-token
の結果をごにょごにょいじって、それを環境変数に設定するなり credentials ファイルに記載するという単純な方法です。
既に誰か作ってるだろうと思って軽くググったところ、以下のページが見つかりました。
A useful script for AWS credentials
そこで紹介されているスクリプトをちょこっといじったものを gist に上げました。
Executes aws sts get-session-token, and sets the result to .aws/credentials
使い方としては、通常の access key (有効期限が無いが、権限も少ない)を持つプロファイルを用意して、それを以下の通りに引数として渡します。
set-aws-session-token.sh --profile プロファイル名 --serial arn:aws:iam::111111111111:mfa/username --token 6桁の数字
そうすると、指定したプロファイル名に -session
を付加したプロファイルにセッショントークンがセットされます。
例えば、user1 というプロファイル名に通常の access token がセットされているとして、以下を実行すると、user1-session
というプロファイル名にセッショントークンがセットされます。
set-aws-session-token.sh --profile user1 --serial arn:aws:iam::111111111111:mfa/user1 --token 6桁の数字
その後、そのプロファイルを使って、以下のように aws コマンドを実行します。
aws --profile user1-session s3 ls
これでも十分便利です。
AWS Vault を使う
ただ、これだとちょっとかっこ悪いと思う方は、AWS Vault を使う方法があります。
実際の使い方はドキュメントを見たり検索した方が早そうですが、一応簡単に書いておきます。上の例の通り、access token を持つプロファイル名を user1
だとすると、以下のようになります。
aws-valut add user1
その後、.aws/config
に以下を追記します。
[profile user1]
mfa_serial = arn:aws:iam::111111111111:mfa/user1
これで準備完了です。以下のようにして、aws コマンドを実行します。
aws-vault exec user1 -- aws s3 ls
# MFA のトークンの入力を求められる
まとめ
最近は、セキュリティ強化のためにも、MFA 必須の流れになってます。AWS で MFA を強制する方法は以前投稿しましたが、セッショントークン環境変数かファイルに設定するのが若干面倒でした。
今回は、その手間を軽減する方法を2つ紹介しました。参考になれば幸いです。
コメントを残す