aws-vault と MFA を組み合わせてセキュリティを確保する
1. はじめに
AWSの学習を進めると、まず最初に「アクセスキー」を ~/.aws/credentials というファイルに保存する方法を習うことが多いです。しかし、この方法にはファイルに書き込まれたキーは「平文(ひらぶん)」、つまり誰でも読めるテキスト形式で保存されているため、もしPCがウイルスに感染したり、設定ミスで中身が流出したりすると、一瞬でアカウントを乗っ取られる危険があります。
そこで今回は、その「生のキー」を隠す aws-vault と、さらに「二重の鍵」をかける MFA(多要素認証) を組み合わせる方法を記載します。以前一時認証情報の発行について記事にしましたが、それだと面倒がかさむので自分の忘備録としてまとめています。
2. 技術内容の説明
今回行う設定のポイントは、「AWSのマネジメントコンソール」と「パソコン内のconfigファイル」の2箇所を連携させることです。
MFA連携の仕組み
IAMユーザーにMFAを紐付け
AWS側で「このユーザーが操作するときは、このスマホアプリの数字が必要」という設定をします。
configファイルにARNを記載
PC側の設定ファイルに、そのMFAデバイスの「住所(ARN)」を登録します。
aws-vaultが仲介
コマンド実行時、aws-vaultが「MFAの数字を入れてください」と画面に表示し、正しい数字が入った時だけ「一時的な魔法の鍵」を発行します。
3. 注意点
スマホの紛失に注意: MFAを設定したスマホを無くすと、自分もAWSに入れなくなります。必ずバックアップコードを控えるか、予備のデバイスを検討しましょう。
時刻のズレ: ワンタイムパスワードは「時間」を元に作られます。PCやスマホの時計がズレていると認証エラーになるので注意してください。
ARNのコピペミス: 1文字でも違うと動きません。必ずAWSコンソールから直接コピーしましょう。
4. サンプル手順
事前にAWSコンソールでMFAを有効化しているものとします。
ステップ1:aws-vaultでキーを作成
自分のAccess Key IDとSecret Access Keyを確認します。
aws-vault addでキーを作成します。
※my-projectは任意の名前
※間違えた場合などはrm -rf ~/.awsvault/keys/でキーを削除
$ aws-vault add my-project
Enter Access Key ID: 確認した自分のAccess Key IDを入れる
Enter Secret Access Key: 確認した自分のSecret Access Keyを入れる
Enter passphrase to unlock "/home/自分のホーム/.awsvault/keys/": キー使用時のパスワードを入れる
Added credentials to profile "my-project" in vaultステップ2:AWSコンソールでの操作
IAMコンソールで自分のユーザーを選択します。
「セキュリティ認証情報」タブから「多要素認証 (MFA) 」を確認します。
事前に登録しているMFAデバイスの 「ARN」をコピー します。

ステップ3:~/.aws/config の編集
~/.aws/configに以下の内容を追記します。
※mfa_serialはステップ2でコピーしたARN
[profile my-project]
# 使う地域(リージョン)を指定
region = ap-northeast-1
# 出力形式
output = json
# ★ここが最重要!コピーしたMFAのARNを貼り付けます
mfa_serial = arn:aws:iam::123456789012:mfa/mfa-name
ステップ4:コマンド実行
設定ができたら、aws-vault経由でaws s3 lsコマンドを打って接続を確認します。
# S3バケット一覧を見る
aws-vault exec my-project -- aws s3 ls
# 実行すると、ターミナルでmfaを求められます!
# Enter token for arn:aws:iam::123456789012:mfa/mfa-name:
# mfaを入力後にステップ1で設定したキー使用時のパスワードを入れます
Enter passphrase to unlock "/home/自分のホーム/.awsvault/keys/":5. サンプル手順で扱うデータ構造の説明
MFAを有効にすると、aws-vaultが裏側で取得するデータは以下のような構成になり、aws-vaultが一時的に保持するセッション情報は、単なるキーよりも情報量が増えています。
Source
MFA (Virtual):「スマホの認証を通った」という証明情報
Expiration
2026-03-22T20:00:00Z:この鍵が使える期限(数時間で消えます)
AssumedRole
my-project-role:実際に操作している権限の名前
このように「誰が」「どのMFAを通って」「いつまで」使える鍵なのかがセットになるため、非常に安全になります。
6. まとめ
~/.aws/credentials への直接保存は、鍵を出しっぱなしにするのと同じで危険。
aws-vault と MFA を組み合わせれば、操作のたびに本人の確認が必要になり、セキュリティが劇的に向上する。
設定は ~/.aws/config に mfa_serial を書くだけと意外に簡単!
これで、たとえアクセスキーが何かの拍子に漏れてしまっても、あなたのスマホがない限り悪用はされません。
