はじめに
工事中
インストール方法
Linux(僕はubuntuでやりました)
工事中
mac
$ brew cask install aws-vault
設定方法(踏み台アカウント)
踏み台として使用するAWSアカウントのアクセスキーを登録します。
ここではdefault
というプロファイル名で登録してみます。
※アクセスキーのローテーションをした場合は再登録する必要があるので注意。忘れがちです…
$ aws-vault add default
Enter Access Key ID: xxxxxxxxxxxxxxxxxxxxx
Enter Secret Access Key:
~/.aws/config
にdefaultプロファイルの情報を記載します。
[default]
output = json
region = ap-northeast-1
aws-vaultを利用するので~/.aws/credentials
にAccessKeyを設定する必要はありません。
登録したプロフィールを確認します。
$ aws-vault ls
Profile Credentials Sessions
======= =========== ========
default default
これでとりあえずの設定は完了です。
試しにaws-vaultを経由してawsコマンドを叩いてみます。
$ aws-vault exec default -- aws s3 ls
Enter passphrase to unlock /home/User/.awsvault/keys/:
2019-04-12 17:39:33 sample-bucket-name1
2019-04-12 13:36:22 sample-bucket-name2
2019-04-12 15:37:08 sample-bucket-name3
踏み台AWSアカウントのS3バケット一覧が表示されると思います。
設定方法(AssumeRole先のアカウント)
AssumeRole先のアカウントをhoge
として、~/.aws/config
にプロファイルの情報を記載します。
[default]
output = json
region = ap-northeast-1
[profile hoge]
output = json
region = ap-northeast-1
mfa_serial=arn:aws:iam::${踏み台AWSアカウントID}:mfa/${踏み台AWSアカウントIDの個人IAMユーザー名}
role_arn=arn:aws:iam::${AssumeRole先のAWSアカウントID}:role/${AssumeRole先AWSアカウントのAssumeRole名}
source_profile=default
登録したプロファイル確認してみます。
$ aws-vault ls
Profile Credentials Sessions
======= =========== ========
default default
hoge default
これでとりあえずの設定は完了です。
試しにaws-vaultを経由してAssumeRole先AWSアカウントに対して、awsコマンドを叩いてみます。
$ aws-vault exec hoge -- aws s3 ls
Enter passphrase to unlock /home/User/.awsvault/keys/:
2019-04-12 17:39:33 hoge-bucket-name1
2019-04-12 13:36:22 hoge-bucket-name2
2019-04-12 15:37:08 hoge-bucket-name3
AssumeRole先AWSアカウントのS3バケット一覧が表示されると思います。
あどばんす
長時間プロセスの実行
aws s3 ls
のように短時間で終了するプロセスは問題ないのですが、terraform
や ansible
のように
長時間動作し続けるプロセスを aws-vault 経由で動作させたいこともあります。
aws-vault exec
は一時的なアクセスキーを取得してプロセスへ渡すため、長時間動作し続けるプロセスの場合には途中でアクセスキーの期限が切れることがあります。
対策として、以下のようなオプションを付与することでアクセスキーの期限切れを防ぐことができます。
$ aws-vault exec --session-ttl=1h --assume-role-ttl=1h hoge -- aws s3 ls
僕はこのオプションをいちいち打つのが面倒なので、 ~/.bashrc
に alias に書くことで簡略化しています。
alias ave='aws-vault exec --session-ttl=1h --assume-role-ttl=1h'
# 真面目にコマンドを打つ場合
$ aws-vault exec --session-ttl=1h --assume-role-ttl=1h hoge -- aws s3 ls
# aliasで簡略可した場合
$ ave hoge -- aws s3 ls