見出し画像

aws-vault と MFA を組み合わせてセキュリティを確保する

1. はじめに

AWSの学習を進めると、まず最初に「アクセスキー」を ~/.aws/credentials というファイルに保存する方法を習うことが多いです。しかし、この方法にはファイルに書き込まれたキーは「平文(ひらぶん)」、つまり誰でも読めるテキスト形式で保存されているため、もしPCがウイルスに感染したり、設定ミスで中身が流出したりすると、一瞬でアカウントを乗っ取られる危険があります。

そこで今回は、その「生のキー」を隠す aws-vault と、さらに「二重の鍵」をかける MFA(多要素認証) を組み合わせる方法を記載します。以前一時認証情報の発行について記事にしましたが、それだと面倒がかさむので自分の忘備録としてまとめています。


2. 技術内容の説明

今回行う設定のポイントは、「AWSのマネジメントコンソール」と「パソコン内のconfigファイル」の2箇所を連携させることです。

MFA連携の仕組み

  1. IAMユーザーにMFAを紐付け

    • AWS側で「このユーザーが操作するときは、このスマホアプリの数字が必要」という設定をします。

  2. configファイルにARNを記載

    •  PC側の設定ファイルに、そのMFAデバイスの「住所(ARN)」を登録します。

  3. aws-vaultが仲介

    •  コマンド実行時、aws-vaultが「MFAの数字を入れてください」と画面に表示し、正しい数字が入った時だけ「一時的な魔法の鍵」を発行します。


3. 注意点

  • スマホの紛失に注意: MFAを設定したスマホを無くすと、自分もAWSに入れなくなります。必ずバックアップコードを控えるか、予備のデバイスを検討しましょう。

  • 時刻のズレ: ワンタイムパスワードは「時間」を元に作られます。PCやスマホの時計がズレていると認証エラーになるので注意してください。

  • ARNのコピペミス: 1文字でも違うと動きません。必ずAWSコンソールから直接コピーしましょう。


4. サンプル手順

事前にAWSコンソールでMFAを有効化しているものとします。

ステップ1:aws-vaultでキーを作成

  1. 自分のAccess Key IDとSecret Access Keyを確認します。

  2. 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コンソールでの操作

  1. IAMコンソールで自分のユーザーを選択します。

  2. 「セキュリティ認証情報」タブから「多要素認証 (MFA) 」を確認します。

  3. 事前に登録している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 を書くだけと意外に簡単!

これで、たとえアクセスキーが何かの拍子に漏れてしまっても、あなたのスマホがない限り悪用はされません。


いいなと思ったら応援しよう!