LoginSignup
2
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-12

はじめに

工事中

インストール方法

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
2
0
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
2
0