
Windowsでaws-vaultの設定を最初から実施し、aws-vault経由でterraformの実行テストをしてみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんちには。
データアナリティクス事業本部 インテグレーション部 機械学習チームの中村です。
今回はWindowsマシンに対して、以下記事に沿ってaws-vaultの設定をしてterraformの実行まで確認しましたので、その作業メモをブログにしました。
本記事の設定は以下の則っています。aw-vaultについての説明はこれらの記事もご参考にされてください。
aws-vaultのインストール
Windowsマシンからの実行であるため、PowerShellを管理者権限で起動して以下でaws-vaultをインストールします。
choco install aws-vault
環境毎にインストール方法は異なりますので以下を参照ください。
インストール後は、恒例のバージョンチェックをしてみます。
aws-vault --version # v7.2.0
aws-vaultの設定と~/.aws/configの設定
~/.aws/configと~/.aws/credentialsは存在しない状態で開始します。
(実際にはバックアップをしています。またaws-vaultはcredentialsを使用しないはずですが念のため)
まずは、classmethodという名前でスイッチロール元のプロファイルを設定します。
(名前は任意で設定可能)
aws-vault add classmethod # Enter Access Key ID: XXXX # Enter Secret Access Key: **************************************** # Added credentials to profile "classmethod" in vault
プロファイルの登録を確認します。
aws-vault list # Profile Credentials Sessions # ======= =========== ======== # classmethod classmethod -
この時点で~/.aws/configは以下のように空欄で作成されています。
[profile classmethod]
ここに以下のようにこちらの記事と同様の設定を追記します。
[profile classmethod] mfa_serial=arn:aws:iam::<スイッチロール元のアカウントID>:mfa/<スイッチロール元のIAMユーザ名> region=ap-northeast-1 output=json [profile common] credential_process=aws-vault --prompt terminal export classmethod --duration 12h --format=json [profile myproject1] source_profile=common role_arn=arn:aws:iam::<スイッチロール先1のアカウントID>:role/<ロール名> region=ap-northeast-1 output=json [profile myproject2] source_profile=common role_arn=arn:aws:iam::<スイッチロール先2のアカウントID>:role/<ロール名> region=ap-northeast-1 output=json
ロールセッション名が必要な場合はrole_session_nameも設定されてください。
- ロールセッション名についての参考記事
この編集後は、以下のようにprofileが認識されます。
aws-vault list # Profile Credentials Sessions # ======= =========== ======== # classmethod classmethod - # common - - # myproject1 - - # myproject2 - -
aws-vaultの実行
セッションをクリアします。
aws-vault clear
スイッチロール先1でAWS CLIを実行してみます。
aws --profile myproject1 sts get-caller-identity
# Enter MFA code for arn:aws:iam::<スイッチロール元のアカウントID>:mfa/<スイッチロール元のIAMユーザ名>: <MFAコード>
# {
# "UserId": "XXXXXXXXXXXXXXXXXXXXX:<ロールセッション名>",
# "Account": "<スイッチロール先1のアカウントID>",
# "Arn": "arn:aws:sts::<スイッチロール先1のアカウントID>:assumed-role/<ロール名>/<ロールセッション名>"
# }
MFAコードの入力が求められますので入力します。
一度入力すると、以下のようにスイッチロール先2でもMFAコードの再入力は求められなくなります。
aws --profile myproject2 sts get-caller-identity
# {
# "UserId": "XXXXXXXXXXXXXXXXXXXXX:<ロールセッション名>",
# "Account": "<スイッチロール先1のアカウントID>",
# "Arn": "arn:aws:sts::<スイッチロール先1のアカウントID>:assumed-role/<ロール名>/<ロールセッション名>"
# }
現在の状態を以下で確認できます。12時間セッショントークンが有効となっていることが分かります。
(これはcommonプロファイルで--duration 12hとしているため)
aws-vault list # Profile Credentials Sessions # ======= =========== ======== # classmethod classmethod sts.GetSessionToken:11h51m2s # common - - # myproject1 - - # myproject2 - -
terraform実行の確認
最後にaws-vault経由でterraformを実行します。
以下のようなmain.tfファイルを任意のディレクトリに作成します。
resource "aws_s3_bucket" "sample-bucket" {
bucket = "バケット名"
}
terraform initを実行します。
terraform init # Initializing the backend... # # (...中略...) # # If you ever set or change modules or backend configuration for Terraform, # rerun this command to reinitialize your working directory. If you forget, other # commands will detect it and remind you to do so if necessary.
applyで実際にS3バケットを作成します。(実際はplanなどをその前に挟んでもよいです)
aws-vault exec myproject1 -- terraform apply # (...中略...) # # Enter a value: yes # # (...中略...) # # Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
無事作成を確認し終わったら、destroyします。
aws-vault exec myproject1 -- terraform destroy # (...中略...) # # Enter a value: yes # # (...中略...) # # Destroy complete! Resources: 1 destroyed.
まとめ
いかがでしたでしょうか。こちらが皆様の環境設定のお役に立てば幸いです。






