1
1

More than 1 year has passed since last update.

Terraform を使ってAWSにデプロイする時はaws-vaultが便利という話

Posted at

本記事について

最近、Terraformのデプロイを2段階認証ありで行うと手間だったので、簡単にできる方法はないかと調べたところ、aws-vaultを見つけた。aws-vaultを使ってデプロイするとアクセスキーを毎回取ってくる必要はないので非常に楽にデプロイできる。

前提

  • 以下インストールされている環境
    • brew
    • terraform
    • aws cli

実行環境

% aws --version
aw-cli/2.7.13 Python/3.10.5 Darwin/21.4.0 source/arm64 prompt/off

% terraform --version
Terraform v1.2.4
on darwin_arm64

% sw_vers
ProductName:	macOS
ProductVersion:	12.3.1/

AWS側の設定

デプロイをするためのIAMロールを作成する

デプロイ時に必要な権限を付与したIAMロールを作成しましょう。
選択するのは、「AWSアカウント」 > 「このアカウント」 > 「次へ」
スクリーンショット 2022-07-08 18.22.52.png

必要な権限を追加し、名前をつけた後に信頼されたエンティティを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account_id>:user/<user_id>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}

ロールが作成できたら、前準備は完了です。

aws-vault実行まで

aws-vaultインストール

% brew install aws-vault

configを設定する

mkdir ~/.aws
vi ~/.aws/config

configを以下のように記載(環境が一個でいい場合はdefaultだけでも大丈夫)

[default]
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::<account_id>:mfa/<account_id>
role_arn=arn:aws:iam::<account_id>:role/<AWS側の設定で作成したロール>

[profile test]
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::<account_id>:mfa/<account_id>
role_arn=arn:aws:iam::<account_id>:role/<AWS側の設定で作成したロール2>

aws-vaultの設定を行う

上記のようにconfigを記載した後にaws-vault listコマンドでプロファイルがあるか確認する。

% aws-vault list
Profile                  Credentials              Sessions
=======                  ===========              ========
default                  -                        -
test                     -                        -

今回はdefaultに設定を反映させたいので以下のコマンドを打ってアクセスキーとシークレットアクセスきーを設定する

% aws-vault add default
Enter Access Key Id: <access_key>
Enter Secret Key: <secret_access_key>

再度aws-vault listで実行して、Credentialsにdefaultの記載があれば設定完了です。

% aws-vault list
Profile                  Credentials              Sessions
=======                  ===========              ========
default                  default                  -
test                     -                        -

aws-vaultでs3 listを表示してみる

Terraformコマンド実行の前にs3 lsでちゃんと動くか確認して見ましょう。
下記コマンドを実行して、エラーが出なければ成功です。

% aws-vault exec default -- aws s3 ls
Enter MFA code for arn:aws:iam::<account_id>:mfa/<user_id>: 

Terraformの実行

上記までの手順があればあとは、Terraformのある場所で以下のようにTerraformのinitやapplyができます。

aws-vault exec default -- terraform init
aws-vault exec default -- terraform apply

最後に

まだまだ初学者ですので、間違っていることがあればコメントで教えて下さると大変助かります。
ありがとうございました。

1
1
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
1
1