LoginSignup
0
1

aws-vaultを使ってAWSのシークレットキーおよびアクセスキーを暗号化した状態で使用しよう!

Last updated at Posted at 2023-01-13

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

以下のようなポップアップが表示されますが開くを押します

スクリーンショット 2023-07-31 11.27.16.png

AWSのIAMユーザの

  • アクセスキー
  • シークレットキー

を入力していきます

Enter Access Key ID:
Enter Secret Access Key:

aws-vault用のパスワードを作成します

スクリーンショット 2023-07-31 11.24.08.png

以下のように表示されたら登録成功です

Added credentials to profile "shun198" in vault

以下のコマンドでキー一覧を確認できます

aws-vault ls
Profile                  Credentials              Sessions                 
=======                  ===========              ========                 
shun198                  shun198                  -          

追加の設定

~/.aws/configを開いて

  • リージョン
  • MFA認証

の設定を追加します

code ~/.aws/config
~/.aws/config
[profile shun198]
region=ap-northeast-1
mfa_serial=<多段階認証のarnを記載>

arnに関しましてはIAMのユーザから該当するユーザを選択した後に多要素認証(MFA)を開くとシリアル番号として表示されるのでこちらをコピーして貼り付けます

スクリーンショット 2023-01-13 18.09.52.png

上記の設定が完了したらMFA認証を以下のコマンドで行います
デフォルトだと1時間ですが、最大12時間まで有効化できます

aws-vault exec shun198 --duration=12h

MFAコードを入力します

Enter MFA code for arn:aws:iam::xxxxxxxxxxxx:user/shun198:

スクリーンショット 2023-07-31 11.28.07.png

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を指定します

~/.aws/config
[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を参照してください

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1