簡體   English   中英

如何使用 AWS 在一個賬戶中存儲 terraform state 並在另一個賬戶中應用更改?

[英]How to store terraform state in one account and apply changes in another account using AWS?

我已經使用 ControlTower 建立了一個 AWS 組織。 我為自己創建了一個用戶,該用戶擁有以下 2 個賬戶的 AWSAdministratorAccess。

    • 運營組(組織單位)
      • 基礎設施賬戶(AWS 賬戶 - 111)
    • 開發(組織單位)
      • DEV 賬戶(AWS 賬戶 - 222)

我現在從簡單開始,在建立組織的同時打下良好的基礎。 我讀到的一件事是,在對 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM