在多个 AWS Organizations 账户上部署资源

时间:2021-04-27 13:12:53

标签: amazon-web-services terraform terraform-provider-aws

让我介绍一下这个问题的背景。

我正在尝试创建一个 terraform 脚本,该脚本使用一些账户以及这些账户中的一些资源来部署 AWS 组织。

所以,问题是我似乎无法弄清楚如何在运行时间在多个帐户上创建资源。这意味着我想在我用同一个脚本创建的帐户上创建资源。

“工作流程”将是这样的

  1. 脚本创建 AWS 组织
  2. 相同的脚本创建 AWS Organizations 账户
  3. 相同的脚本在创建的账户上创建一个 S3 存储桶

这是可以做的事情吗?我知道可以通过执行以下操作来“模拟”用户。

provider "aws" {
  alias   = "dns"
  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}

但是,在创建帐户作为 AWS-organization-account terraform 模块的某种输出后,我可以获得这些信息吗?

也许有另一种方法可以做到这一点,我只需要一些阅读材料。

1 个答案:

答案 0 :(得分:2)

您可以这样做,但您可能希望将其中的一些内容分开以最小化爆炸半径,这样它们就不会全部集中在一个 terraform applyterraform destroy 中。

举个简单的例子,您可以执行以下操作:

resource "aws_organizations_organization" "org" {
  aws_service_access_principals = [
    "cloudtrail.amazonaws.com",
    "config.amazonaws.com",
  ]

  feature_set = "ALL"
}

resource "aws_organizations_account" "new_account" {
  name  = "my_new_account"
  email = "john@doe.org"

  depends_on = [
    aws_organizations_organization.org,
  ]
}

provider "aws" {
  alias = "new_account"

  assume_role {
    role_arn     = "arn:aws:iam::${aws_organizations_account.new_account.id}:role/OrganizationAccountAccessRole"
    session_name = "new_account_creation"
  }
}

resource "aws_s3_bucket" "bucket" {
  provider = aws.new_account

  bucket = "new-account-bucket-${aws_organizations_account.new_account.id}"
  acl    = "private"
}

以上使用在子账户中创建的 default OrganizationAccountAccessRole IAM role 然后在该账户中创建 S3 存储桶。