[英]How to store terraform state in one account and apply changes in another account using AWS?
我已經使用 ControlTower 建立了一個 AWS 組織。 我為自己創建了一個用戶,該用戶擁有以下 2 個賬戶的 AWSAdministratorAccess。
我現在從簡單開始,在建立組織的同時打下良好的基礎。 我讀到的一件事是,在對 DEV 帳戶進行操作更改時,我們應該將 terraform state 文件存儲在基礎設施帳戶中。
我怎樣才能在 terraform 中做到這一點? 我有點迷茫,因為我正在使用 AWS SSO 並且無法弄清楚為 role_policy_arn 放置什么。
這是一個示例代碼:
terraform {
backend "s3" {
bucket = "terraform-infrastructure"
key = "dev/sqs/terraform.tfstate"
region = "us-east-1"
assume_role_policy_arns = ["<what do I put here>"]
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-east-1"
allowed_account_ids = ["222"]
}
另外,我需要在 S3 端做些什么嗎? 我假設沒有。 如果我可以擔任基礎設施帳戶的 AWSAdministratorAccess 角色並將 terraform state 存儲在那里,並擔任 DEV 帳戶的 AWSAdministratorAccess 角色並應用我的更改,那么我不需要擾亂 S3 權限以允許跨帳戶發布。
考慮將profile
配置添加到backend
塊。 需要在您的~/.aws/config
文件中設置關聯的配置文件。 此外,您可以將profile
配置添加到provider
塊以類似地使用 AWS CLI 配置文件。 使用profile
配置並使用具有正確賬戶和角色的配置文件設置 AWS CLI應該能夠讓您完成您打算做的事情。
正如 Terraform 文檔所建議的,您應該使用 IAM 角色委派:
每個角色的代入角色策略必須授予對管理 AWS 賬戶的訪問權限,這會與管理 AWS 賬戶建立信任關系,以便其用戶可以代入該角色。
管理帳戶中的用戶或組還必須具有創建相反關系的策略,允許這些用戶或組承擔該角色。
AWS IAM 憑證應允許訪問 S3 后端和 Terraform 的 AWS 提供商。
variable "workspace_iam_roles" {
default = {
staging = "arn:aws:iam::STAGING-ACCOUNT-ID:role/Terraform"
production = "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/Terraform"
}
}
provider "aws" {
# No credentials explicitly set here because they come from either the
# environment or the global credentials file.
assume_role = {
role_arn = "${var.workspace_iam_roles[terraform.workspace]}"
}
}
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.