aws-vaultとは
AWSのシークレットキーとアクセスキーを暗号化して保存できるツールです
aws configure コマンドでこれらの秘匿情報が平文でローカルマシンの ~/.aws/credentials に保存されてしまいます
セキュリティリスクが大きいため、aws-vaultを使うことを推奨します
GitHubのリンクは以下の通りです
aws-vaultのインストール
brewでインストールします
brew install --cask aws-vault
下記のようにバージョンが表示されたら成功です
aws-vault --version
v6.6.1
aws-vaultの設定を行おう!
シークレットキーとアクセスキーの設定
まず、aws-vault add
ユーザ名でユーザを追加します
aws-vault add shun198
以下のようなポップアップが表示されますが開く
を押します
AWSのIAMユーザの
- アクセスキー
- シークレットキー
を入力していきます
Enter Access Key ID:
Enter Secret Access Key:
aws-vault用のパスワードを作成します
以下のように表示されたら登録成功です
Added credentials to profile "shun198" in vault
以下のコマンドでキー一覧を確認できます
aws-vault ls
Profile Credentials Sessions
======= =========== ========
shun198 shun198 -
追加の設定
~/.aws/config
を開いて
- リージョン
- MFA認証
の設定を追加します
code ~/.aws/config
[profile shun198]
region=ap-northeast-1
mfa_serial=<多段階認証のarnを記載>
arnに関しましてはIAMのユーザから該当するユーザを選択した後に多要素認証(MFA)を開くとシリアル番号として表示されるのでこちらをコピーして貼り付けます
上記の設定が完了したらMFA認証を以下のコマンドで行います
デフォルトだと1時間ですが、最大12時間まで有効化できます
aws-vault exec shun198 --duration=12h
MFAコードを入力します
Enter MFA code for arn:aws:iam::xxxxxxxxxxxx:user/shun198:
aws-vaultのパスワードを入力した後にエラーなどが表示されていなかったら成功です
aws-vault経由でaws cli関連のコマンドを実行しよう!
今回はS3バケットの一覧を表示させます
aws cliと違ってaws-vault経由で使用するときは
aws-vault exec <ユーザ名> --
と指定します
aws-vault exec shun198 -- aws s3 ls
2023-01-08 08:10:15 terraform-playground-for-cicd
AWSリソースにアクセスできたことが確認できました
トラブルシューティング
aws-vault: error: exec: aws-vault sessions should be nested with care, unset AWS_VAULT to force
このエラーが出たときは以下のコマンドを実行してください
unset AWS_VAULT
IAMロールを使って運用する時
スイッチロールなどを使ってロールに応じてcliを利用する際は以下の手順の通りに設定する必要があります
configファイルの設定
configファイルに使用するロールの設定を行います
code ~/.aws/config
以下のように
- bastion用
- default
- スイッチロール用
のprofileを設定します
今回bastion用のprofileをcommonにしています
common内に下記の設定を記載します
項目 | 内容 |
---|---|
source_profile | IAMユーザのユーザ名を記載します |
region | ap-northeast-1をリージョンとして設定します |
output | JSON |
mfa_serial | MFAのarnを記載します |
role_session_name | ロール元(bastion)のユーザ名を記載します |
また、使用するロール内に
- include_profile
- role_session_name
を記載します
include_profileには先ほど指定したロール元のprofile(common)、role_arnに使用するロールのarnを指定します
[profile common]
source_profile=shun198
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::XXXXXXXXXXXX:mfa/shun198
role_session_name=shun198
[default]
region=ap-northeast-1
output=json
[profile shun198-poweruser]
include_profile=common
role_arn=arn:aws:iam::YYYYYYYYYYYY:role/shun198-PowerUser
なんでdefaultを記載するの?
defaultがないと以下のエラーが出力され、指定したロールで実行することができなくなってしまいます
aws-vault: error: exec: Failed to get credentials for child
詳細は以下のissueを参照してください
参考