aws-vault とは
- AWS の認証情報をローカルに安全に保管する事が出来る CLI ツール
- GitHub Star 7K⭐ (2022-12-22現在)
- brew で下記のコマンドのようにインストール可能
brew install --cask aws-vault
リポジトリ
https://github.com/99designs/aws-vault
使うことになった背景
- あるお客様の案件では、各 AWS 環境に IAM アカウント1つずつ作られており、環境が大量にある為、切り替えが大変
- IAM ユーザーのアクセスキーを生で保管しておくのが不安
aws-valut で出来る事
AWS のクレデンシャルをローカルに安全に保存する事が出来る
下記のローカルシークレットストレージに対応しています。
- macOS Keychain
- Windows Credential Manager
- Secret Service (Gnome Keyring, KWallet)
- KWallet (KDE)
- Pass (the standard unix password manager)
- Encrypted file (暗号化ファイル)
使用する際は短時間なクレデンシャルを使用し、安全に使用する事が出来る
- AWS STS を使って一時的なセキュリティ認証情報 (Temporary security credentials) を取得する
- アプリ等 (AWS CLI や AWS SDK 、インフラ自動化ツール等) は一時的な認証情報を使って AWS にアクセスする
AWS 公式文献:IAM の一時的な認証情報
環境の切り替えが簡単に出来る
実際の使い方は下記の通りです。
登録時
aws-value add
コマンドを用いて登録します。
$ aws-vault add hogehoge-dev
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
# 複数追加可能
$ aws-vault add hogehoge-stg
# ...
使用時
aws-value exec
コマンドを用いて awscli を実行します。
# コマンドの実行
$ aws-vault exec hogehoge-dev -- aws s3 ls
bucket_1
bucket_2
コマンドを指定せずに exec
を実行すると、
環境変数 (AWS_SECRET_ACCESS_KEY
等) に一時的な認証情報が指定された状態でサブシェルが生成されます。
$ aws-vault exec hogehoge-dev
また、aws-valut login
で、AWS Web Console にログインできます。
# aws-vault login hogehoge-dev
また、これ以外にもサーバーモードというものがあり、裏で EC2 の metadata endpoint を模して、一時的な認証情報を取得出来るサーバーを立ててくれます。ユースケースは Terraform 等長時間アプリから使用される際、など活用できると思います。
細かい点
以下、その他使用時の細かい留意点です。
$HOME/.aws/credentials
は勿論不要。$HOME/.aws/config
はそのまま使用できます- なんらかの事情で、暗号化している元々のクレデンシャルを使いたい時は
-no-session
フラグを付けます
EKS クラスタを使う際の注意点
aws eks update-kubeconfig
で .kubeconfig
にクラスタ情報を追加した場合、 aws コマンドを用いて EKS にアクセスする為のトークンを取得しています。
その為、EKS にアクセスする際は、 aws-vault exec
でクレデンシャルを環境変数に設定してから kubectl
で各種操作を行う必要があります。
複数のクラスタを使用している際は kubectx
を使われている方が多いかと思いますが、 aws-vault, kubectx
の両方の切り替えを忘れずに行うことが必要です。
$ aws-vault exec hogehoge-dev
$ kubectx arn:aws:eks:ap-northeast-1:.....
$ kubectl cluster-info
感想
いかがでしたでしょうか。
煩雑な AWS の認証情報の管理をセキュアに行えて、対象の環境をすぐに切り替えることができたり
Switch Role するケースや、MFA や SSO にも対応しているようで、作業を効率化できるツールかと思います。
みなさまもぜひ機会があれば活用してみてください。