Terraform 在子 AWS 账户中创建资源
Posted
技术标签:
【中文标题】Terraform 在子 AWS 账户中创建资源【英文标题】:Terraform Create resource in Child AWS Account 【发布时间】:2020-03-16 23:01:33 【问题描述】:我的目标是创建一个 Terraform 模块,该模块会创建一个子 AWS 账户并在该账户内创建一组资源(例如 AWS Config 规则)。
使用以下aws_organizations_account
定义创建帐户:
resource "aws_organizations_account" "account"
name = "my_new_account"
email = "john@doe.org"
aws_config_config_rule
的示例类似于:
resource "aws_config_config_rule" "s3_versioning"
name = "my-config-rule"
description = "Verify versioning is enabled on S3 Buckets."
source
owner = "AWS"
source_identifier = "S3_BUCKET_VERSIONING_ENABLED"
scope
compliance_resource_types = ["AWS::S3::Bucket"]
但是,这样做会在主账户中创建 AWS Config 规则,而不是在新创建的子账户中。
如何定义配置规则以应用于子帐户?
【问题讨论】:
你可能会从这个答案中受益:serverfault.com/questions/929745/… 但听起来你想做的事情会非常痛苦,我建议不要这样做。 【参考方案1】:所以,我实际上能够通过在模块中定义一个新的提供者来实现这一点,该模块假定新创建的帐户中的OrganizationAccountAccessRole。
这是一个例子:
// Define new account
resource "aws_organizations_account" "my_new_account"
name = "my_new_account"
email = "john@doe.org"
provider "aws"
/* other provider config */
assume_role
// Assume the organization access role
role_arn = "arn:aws:iam::$aws_organizations_account.my_new_account.id:role/OrganizationAccountAccessRole"
alias = "my_new_account"
resource "aws_config_config_rule" "s3_versioning"
// Tell resource to use the new provider
provider = aws.my_new_account
name = "my-config-rule"
description = "Verify versioning is enabled on S3 Buckets."
source
owner = "AWS"
source_identifier = "S3_BUCKET_VERSIONING_ENABLED"
scope
compliance_resource_types = ["AWS::S3::Bucket"]
但是,应该注意的是,在模块内定义提供程序会导致一些问题,特别是一旦您获取此模块您无法删除此模块。如果你这样做,它会抛出一个Error: Provider configuration not present
,因为你也会删除提供者定义。
但是,如果您不打算删除这些帐户(或者可以在需要时手动删除),那么这应该很好!
【讨论】:
以上是关于Terraform 在子 AWS 账户中创建资源的主要内容,如果未能解决你的问题,请参考以下文章
在 CodePipeline 中创建使用另一个 AWS 账户的资源的管道
terraform 中是不是有任何特定的资源标签可以在 eventbridge 中创建规则
在另一个 AWS 账户中创建 RDS/Postgres 副本?