让我介绍一下这个问题的背景。
我正在尝试创建一个 terraform 脚本,该脚本使用一些账户以及这些账户中的一些资源来部署 AWS 组织。
所以,问题是我似乎无法弄清楚如何在运行时间在多个帐户上创建资源。这意味着我想在我用同一个脚本创建的帐户上创建资源。
“工作流程”将是这样的
这是可以做的事情吗?我知道可以通过执行以下操作来“模拟”用户。
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 模块的某种输出后,我可以获得这些信息吗?
也许有另一种方法可以做到这一点,我只需要一些阅读材料。
答案 0 :(得分:2)
您可以这样做,但您可能希望将其中的一些内容分开以最小化爆炸半径,这样它们就不会全部集中在一个 terraform apply
或 terraform 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 存储桶。