はじめに
TerraformCLIを利用する際に、スイッチロールやMFAを設定しているアカウントの設定方法について調べたので、その際の設定方法についての備忘。
(TerraformCLIというよりかは、AWSの設定方法)
環境
- MacOS12(Monterey)
- CLI
- Terraform: v1.5.7
- aws-vault: 7.2.0
- aws-cli: 2.13.21
設定
いきなりですが、最終的な.aws/config
の設定は以下の通り
[profile hoge-origin]
region = ap-northeast-1
output = json
[profile hoge-vault]
region = ap-northeast-1
output = json
role_arn = arn:aws:iam::{スイッチ先アカウントID}:role/{ロール名}
source_profile = hoge-origin
mfa_serial = arn:aws:iam::{スイッチ元アカウントID}:mfa/{ユーザーアカウント}
[profile hoge]
region = ap-northeast-1
output = json
credential_process = aws-vault exec hoge-vault --json --prompt=osascript
ここではhoge-origin
をスイッチ元のアカウント(credentials
が設定されているアカウント)
hoge-vault
はスイッチ先アカウントとして、hoge
を最終的にAWS_PROFILEとして設定するアカウントとします。(default
で運用されている場合は適宜読み替えてください)
AWSCLIの利用だけであれば、上記で言うところのhoge-vault
をAWS_PROFILEに設定すれば、問題なく利用できると思いますが、terraformを実行すると
Error: error configuring S3 Backend: Error creating AWS session: AssumeRoleTokenProviderNotSetError: assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.
というエラーが発生するため、後述するaws-vaultというツールを利用して、これを回避しました。
aws-vault
aws-vaultはAWSアクセスキーをキーチェーン等で暗号化して安全に扱うことができるツールです。
Macであればhomebrewでインストールします。
$ brew install aws-vault
$ aws-vault --version
7.2.0-Homebrew
設定
aws-vaultに認証情報を設定します。
credentialsが設定されているのはhoge-origin
のため、以下のように設定します。
$ aws-vault add hoge-origin
Enter Access Key ID: {aws_access_key_id}
Enter Secret Access Key: {aws_secret_access_key}
Added credentials to profile "hoge-origin" in vault
登録ができているか確認
$ aws-vault list
Profile Credentials Sessions
======= =========== ========
default - -
hoge-origin hoge-origin -
hoge-vault - -
hoge - -
設定は以上です。
あとは、実際にhoge
プロファイルに切り替えて、いつも通りにawsコマンド及びterraformコマンドが実行できます。
※MFAを設定しているため、コードの入力は必要です
$ export AWS_PROFILE=hoge
$ aws s3 ls
2023-02-08 12:06:02 xxx
2022-05-18 19:21:10 yyy
その他
実行に関して、都度キーチェーンのパスワードの入力を求められる場合があります。
その場合は、以下のように設定変更することで、無効化 or 時間を変更することができます。
$ open ~/Library/Keychains/aws-vault.keychain-db
参考