我的目标是创建一个Terraform模块,该模块创建一个子AWS账户并且在该账户内创建一组资源(例如,AWS Config规则)。
使用以下aws_organizations_account
定义创建帐户:
aws_organizations_account
示例resource "aws_organizations_account" "account" {
name = "my_new_account"
email = "[email protected]"
}
类似于:
aws_config_config_rule
但是,这样做是在主账户而不是新创建的子账户中创建AWS Config规则。
我如何定义配置规则以应用于子帐户?
因此,我实际上可以通过在模块中定义一个新的提供程序来实现这一点,该提供程序假定新创建的帐户内包含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"]
}
}
但是,应该注意的是,在模块内部定义提供程序会引起一些怪癖,特别是在您获取该模块后您无法删除此模块。如果这样做,则会抛出OrganizationAccountAccessRole,因为您还将删除提供程序定义。
但是,如果您不打算删除这些帐户(或者可以在需要时手动进行此操作,那么这应该很好!