~/.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 コマンドでローテーションも楽になるのだ。
- めたん
- そう。絶対的な防御ではないけど、偶発的な露出を減らすための現実的な選択肢よ。
- ずんだもん
- よく分かったのだ。ありがとうなのだ!