Site icon Mr. 沙先生

Terraform 用 Assume role 的方式登入 AWS

這篇要講的是 Terraform 對於 AWS Assume role 的用法,官方文件上有寫「Assume role」的作法,不過我實際上的情境是由 Jump Account 跳到 Project Account 的 Assume role 方式,其實文件上也是有寫,只是並不怎麼明確,所以用這篇記錄用法

 

由於現有團隊會需要管理非常多的 AWS Account,所以會統一由一個 Jump Account 來 Switch Role 到其他的 Project Account,這時候 Assume role 就會是很常用到的項目

 

原本看官方文件單純使用 assume_role 的方式沒辦法直接 Assume role,查了一下 terraform 的一個 issue「AWS assume role not working」和我的情境相同

 

首先必須在 ~/.aws/credentials 要有 Jump Account 的 Credentials Profile,像這樣:

[jump-account]
aws_access_key_id = foo
aws_secret_access_key = bar

 

然後在 Terraform 我就可以透過 [jump-account] 來 Assume role 到其他 Project Account,其實概念和你在 manage console 上操作 Switch Role 相同。

provider "aws" {
  profile = "jump-account"
  region = "us-east-1"
  assume_role {
    role_arn = "arn:aws:iam::<DESTINATION_AWS_ACCOUNT_NUMBER>:role/user/myadminrole"
    session_name = "terraform"
  }
}

 

這樣就可以不需要儲存 credentials 而且透過 Jump Account 的方式來管理更方便。

 

 

 

另外如果你用 sts 的方式可以用 AccessKey、SecretKey、Token 登入:

provider "aws" {
  region     = "${var.region}"
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  token      = "${var.aws_token}"
}

 

因為是使用 var 來抓變數,所以必須先 export AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN。

export AWS_ACCESS_KEY_ID=foo
export AWS_SECRET_ACCESS_KEY=bar
export AWS_SESSION_TOKEN=baz

 

 

Exit mobile version