リモート開発メインのソフトウェア開発企業のエンジニアブログです

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 を使う方法があります。

99designs/aws-vault: A vault for securely storing and accessing AWS credentials in development environments

実際の使い方はドキュメントを見たり検索した方が早そうですが、一応簡単に書いておきます。上の例の通り、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つ紹介しました。参考になれば幸いです。

← 前の投稿

分類のための指標(PrecisionとRecall)の解説

次の投稿 →

kedroのモデルを読み込むパイプラインにおいて、同じ型のモデルを切り替える

コメントを残す