AWS
Ansible
Terraform
MFA
AssumeRole

terraform も ansible も MFA&AssumeRole で実行する(執筆中)


はじめに

工事中


インストール方法


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 のように短時間で終了するプロセスは問題ないのですが、terraformansible のように

長時間動作し続けるプロセスを 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