LoginSignup
2
0

More than 3 years have passed since last update.

iTerm2でAWSのMFAトークンを自動で入力する

Posted at

これは何?

iTerm2のTriggers機能を使って、AWS CLIなどのMFA(多要素認証)トークンを自動で入力する方法の紹介です。

はじめに

AWS CLIを使ったオペレーションや、AWS SDKを使用するアプリケーションを開発する際、組織のポリシーによってはMFA(多要素認証)のトークンの入力が必須であることも少なくないかと思います。

セキュリティはもちろん重要ですが、開発中に何度も入力するのはさすがに億劫なのでMFAトークンを自動で入力する仕組みを考えてみました。

必要なもの

設定手順

1. AWSのコンソールで仮想MFAデバイスを使用する設定を行う

既にAWSで仮想MFAデバイスの設定をしていて秘密鍵(シークレット設定キー)がわかる場合はこの手順は必要ありません。

秘密鍵がわからない場合は、以下のドキュメントを参考に仮想MFAデバイスを新たに作成し、自身のユーザに割り当てる必要があります。この際に作成した仮想MFAデバイスの秘密鍵(シークレット設定キー)を控えておいてください。

仮想 Multi-Factor Authentication (MFA) デバイスの有効化 (コンソール) - AWS Identity and Access Management

2. MFAトークンを出力するシェルスクリプトを設置する

OATH Toolkitを使用してMFAトークンを出力するシェルスクリプトを適当なパスに設置して、実行権限を付与しておきます。実行権限がないと後続の手順で動かないので忘れずに付与してください。

#!/bin/bash
/usr/local/bin/oathtool --totp --base32 <MFAデバイスのシークレット設定キー>

3. iTerm2でTriggerの設定をする

iTerm2のプロファイルの設定の Advanced タブに Triggers の項目があるので Edit ボタンをクリックします。

image.png

ターミナルの出力が特定の正規表現にマッチしたらCoprocessとして手順2のシェルスクリプトを起動するように設定します。

image.png

AWS CLIでMFAトークンを自動入力させる場合の例

  • Regular Expression: Enter MFA code for arn:aws:iam:.*:
    • AWS CLIのバージョンによって文言が若干異なるかもしれません
    • AWS SDKが表示するプロンプトも多少文言が違うと思います
  • Parameters: 手順2で設置したシェルスクリプトのパス
  • Instant: 改行が出力されていなくても発動するかのフラグ
    • MFAトークンのプロンプトは改行が出力されないのでチェックしておきます

4. 動作確認

以上で設定は完了です。
MFAトークンの入力が求められる適当な操作をしてみて、Triggerが発動するか確認してみてください。

改善点

秘密鍵の保管方法

この記事では秘密鍵をシェルスクリプトに平文で書く例を記載していますが、秘密鍵はOSのキーチェーンに格納し security コマンドを使用して取り出す手法の方がセキュアで良いと思います。

そもそも他のアプローチにする

この記事では、MFAトークンのプロンプトを正規表現でマッチするという邪道なアプローチをとっていますが、AWS的には多要素認証済みのセッションで発行した一時的な認証情報はそのセッションの間MFAトークンが不要なので、それを使ってAPIにアクセスするのが正攻法ではないかと思います。

軽く調べたところ aws-mfa-shotgun というツールがこれを実現しているようなので、こちらを使用するとよいかもしれません。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0