~/.aws/credentials の平文を避ける — aws-vault と macOS Keychain による IAM ユーザーキー管理

IAM Identity Center (SSO) を採用しない環境で、aws-vault と macOS Keychain を使い ~/.aws/credentials の平文管理を避ける運用と、その実用性について整理します。

awssecurityaws-vaultiammacos

台本(フルテキスト)

動画の掛け合いを書き起こしたものです。音声を再生しづらい場合はこちらをお読みください。

オープニング

  • ~/.aws/credentials の平文管理を避ける
  • aws-vault と macOS Keychain を使った IAM キー管理
ずんだもん
今日はどんな話なのだ?
めたん
IAM ユーザーキーを ~/.aws/credentials に平文で書くのを避ける方法を紹介するわ。aws-vault と macOS Keychain を組み合わせる構成ね。
ずんだもん
平文で書くと何が問題なのだ?
めたん
バックアップや IDE のキャッシュ、ターミナル履歴、うっかり git へのコミットなど、いくつかの経路でキーが露出する余地があるの。
ずんだもん
SSO に移行すれば解決するのだ?
めたん
IAM Identity Center を使うのが AWS の推奨方針ね。ただし個人利用や既存の共有 IAM ユーザー環境では導入が難しいケースもあるの。そういう場合の現実的な選択肢を紹介するわ。

aws-vault の概要

  • IAM キーを OS キーストアに格納
  • CLI / SDK には一時セッショントークンを渡す
ずんだもん
aws-vault って何なのだ?
めたん
IAM ユーザーキーを OS のキーストア、macOS なら Keychain に格納して、CLI や SDK には一時セッショントークンを渡すツールよ。
ずんだもん
どこで入手できるのだ?
めたん
Homebrew で brew install aws-vault とすれば入れられるわ。現在のアクティブな fork は ByteNess 版で、これが Homebrew formula の実体になっているの。
ずんだもん
仕組みはどうなっているのだ?
めたん
長期キーは Keychain 内にとどまっていて、アプリに渡るのは STS が発行した一時セッションなの。デフォルトは12時間で失効するわ。

~/.aws/config の設定

  • credential_process に aws-vault export を指定
  • AWS_VAULT_KEYCHAIN_NAME=login で login keychain を使用
ずんだもん
設定ファイルはどう書くのだ?
めたん
~/.aws/config のプロファイルに credential_process を書くの。aws-vault export コマンドを指定して、CLI が呼び出すと一時セッションを返すようにするわ。
ずんだもん
AWS_VAULT_KEYCHAIN_NAME=login は何のためなのだ?
めたん
デフォルトだと aws-vault 専用の keychain が作られるけど、login keychain を使うと Touch ID など他のアプリと統合しやすくなるの。
ずんだもん
MFA を使う場合はどうするのだ?
めたん
mfa_serial に TOTP デバイスの ARN を設定するの。セッション発行時に6桁のコードを求められるけど、12時間キャッシュされるから頻繁な入力にはならないわ。

移行手順とキーローテーション

  • 既存キーは環境変数経由で aws-vault add に登録
  • aws-vault rotate で新キー発行から旧キー削除まで一括実行
ずんだもん
既存の平文キーをどう移行するのだ?
めたん
環境変数でキー値を渡しながら aws-vault add --env を実行するの。成功したら ~/.aws/credentials から該当プロファイルを削除するわ。
ずんだもん
キーのローテーションもできるのだ?
めたん
aws-vault rotate コマンドを使うと、新キーの発行・Keychain の更新・旧キーの削除をひとつのコマンドで実行できるの。
ずんだもん
動作確認はどうするのだ?
めたん
aws sts get-caller-identity を実行して、アカウント情報が返れば成功ね。aws-vault list でセッションのキャッシュ状況も確認できるわ。

実運用でのつまずきポイント

  • MFA 入力は半角数字のみ受け付け
  • 同じ TOTP コードを続けて使うと拒否される
ずんだもん
実際に使ってみて困ることはあったのだ?
めたん
いくつかあったの。まず osascript ダイアログは IME が有効だと全角数字が入力されてしまうことがあって、AWS の API は半角のみ受け付けるから弾かれるわ。
ずんだもん
他にはどんな問題があったのだ?
めたん
同じ30秒枠の TOTP コードを2回使うと拒否されるの。タイプミスしてリトライしたら、次のコードが表示されるまで待つ必要があったわ。
ずんだもん
U2F セキュリティキーは使えないのだ?
めたん
aws-vault は U2F には対応していないから、IAM に TOTP デバイスを別途追加する必要があるの。1Password の TOTP 機能などを使うと管理しやすいわ。

信頼性の評価と推奨構成

  • 平文ファイルよりリスクを段階的に低減できる
  • TOTP MFA + 定期ローテーションとの組み合わせが効果的
ずんだもん
サードパーティツールにキーを任せて大丈夫なのだ?
めたん
メンテナーが ByteNess fork に移っていること、Homebrew formula 経由なら SHA256 検証があることを確認した上で使う形になるわ。
ずんだもん
マルウェアに感染したら意味がないのだ?
めたん
ローカルマシンへの侵害への対策は、EDR や FileVault など OS レベルのセキュリティの領域ね。aws-vault の目的は、ローカルファイルからの偶発的な露出を遮断することよ。
ずんだもん
どんな組み合わせが推奨されるのだ?
めたん
aws-vault と Keychain と TOTP MFA、それに定期ローテーションを組み合わせると、平文ファイル運用より段階的にリスクを下げられるわ。Identity Center に移行できる環境があればそちらが本筋ね。

まとめ

  • ~/.aws/credentials を空ファイルにでき露出経路を削減
  • 既存の CLI/SDK が credential_process 経由で透過的に動作
ずんだもん
今日のポイントをまとめてほしいのだ。
めたん
aws-vault を使うと、IAM の長期キーを macOS Keychain に格納して、credential_process 経由で一時セッションを使う構成が組めるわ。
めたん
~/.aws/credentials を空にでき、アプリ側コードの変更も不要で透過的に動作するのがメリットね。
ずんだもん
rotate コマンドでローテーションも楽になるのだ。
めたん
そう。絶対的な防御ではないけど、偶発的な露出を減らすための現実的な選択肢よ。
ずんだもん
よく分かったのだ。ありがとうなのだ!