Edited at

AssumeRoleしよう(Terraform編)

More than 1 year has passed since last update.

Yasと申します。

人や環境によって色々ですが、企業ベースで利用する場合にはAWSアカウントを複数持って直接Deployする場合もあるかと思います。

そんな人の為の一助になれば幸いです。


Terraformって何ぞや?

HashiCorp社の有名な構成管理ツールです。

インフラをコードで管理したい!という人は一度は目にしているのではないでしょうか。

詳しくは色々なサイトにいっぱい書かれているので省略します。


で、何したいの?

AWS環境を複数管理するような人向けに、わざわざAccessKeyを書いたり切り替えたり管理したりアーーーーッ!!!となることを少しでも楽に

する為に

IAMuserは1つだけ、あとはAssumeRoleで管理しよう

的なことを目的としています。


どうやるの?

基本的な流れは

<AWS側のこと>

1:AssumeRoleする別AWSアカウントにIAMRoleを作る(アカウントIDを仮に「987654321098」とします。)

2:操作用のIAMuserを作る(アカウントIDを仮に「123456789012」とします。)

<Terraformのこと>

3:Providerを登録する

です。


1:AssumeRoleする別AWSアカウントにIAMRoleを作る

AssumeRoleをする先のアカウントにIAMroleを発行します。

なんで先にRoleを作るかというと、操作するアカウント側のIAMuserに作成したRoleのarnを記載する必要があるからです。

最近のコンソールはかなり簡単なので、最初に別アカウントでできるようになってます。

ロールの作成で「別のAWSアカウント」を選択→IAMuserを作る方のAWSアカウント番号(12桁)を入力→権限を選んで作成

これだけです。

assumerole.png

↑Roleの作成からここを選べばよいです。

ここでは分かりやすいように作成したIAMroleのarnを

arn:aws:iam::987654321098:role/AssumeRoleIAMrole

とします。

(次に使うのでメモっておきましょう。)


2:IAMuserを作る

利用ユーザー用にAccessKeyとSecretKeyを発行します。

そして、作成したIAMroleにPolicyを追加します。

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::987654321098:role/AssumeRoleIAMrole"
}
]
}

↑こんな感じです


3:Providerを登録する

TerraformでCredentialを登録する際に以下のように登録します。

実体として登録するAccecckey・SecretKeyは2で作ったものを利用する形です。

扱うAWS環境が1つだけであれば以下でもOKです。

provider "aws" {

access_key = "AWSのアクセスキー"
secret_key = "AWSのシークレットキー"
region = "リージョン"
assume_role {
role_arn = "arn:aws:iam::987654321098:role/AssumeRoleIAMrole"
}
}

複数あったりセキュアにするならプロファイルで分けられた方が便利なので以下になります。

provider "aws" {

profile = "適当なプロファイル名"
region = "${var.aws_region}"

assume_role {
role_arn = "arn:aws:iam::987654321098:role/AssumeRoleIAMrole"
}
}

これでIAMuserをたくさん作成して設定する必要や、複数アカウントのキーローテーションをする手間が省けるわけです。

どこかにいる誰かの一助になれば幸いです。

参考

https://www.terraform.io/docs/providers/aws/