使用Terraform创建AWS组织成员账户及解决删除支付约束问题
AWS组织成员账户Terraform创建与删除问题解决
问题背景
我使用Terraform的aws_organizations_account资源创建AWS组织成员账户,代码如下:
resource "aws_organizations_account" "dev" { name = "example-dev" email = "validemailtest@testdomain.com" close_on_deletion = true iam_user_access_to_billing = "ALLOW" parent_id = aws_organizations_organizational_unit.dev.id }
当前账户可成功创建,但登录时需填写信用卡信息,希望将其关联为父账户绑定信用卡的子账户,无需手动操作。
补充:现已实现无信用卡登录创建账户,但执行terraform destroy删除时出现以下错误:
Error: deleting AWS Organizations Account (#######): ConstraintViolationException: The member account must be configured with a valid payment method, such as a credit card. │ { │ RespMetadata: { │ StatusCode: 400, │ RequestID: "bfaee9fb-a537-4eeb-9935-53a4bab10cf1" │ }, │ Message_: "The member account must be configured with a valid payment method, such as a credit card.", │ Reason: "MEMBER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED" │ }
解决方案
1. 关联父账户支付方式,避免登录时要求信用卡
AWS组织中子账户默认继承主账户支付方式,但需确保两点:
- 主账户已开启统一账单(AWS组织默认配置,若未开启需在控制台手动开启)
- 将子账户的
iam_user_access_to_billing设为DENY,禁止子账户用户修改支付设置,登录时就不会要求填写信用卡。修改后的Terraform代码:
resource "aws_organizations_account" "dev" { name = "example-dev" email = "validemailtest@testdomain.com" close_on_deletion = true # 强制使用主账户支付方式,禁止子账户操作账单设置 iam_user_access_to_billing = "DENY" parent_id = aws_organizations_organizational_unit.dev.id }
若账户已创建,修改参数后执行
terraform apply即可更新配置,无需重建账户。
2. 解决删除时的支付约束错误
出现MEMBER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED错误,是因为AWS要求删除成员账户前,账户必须处于已关闭状态。解决方式如下:
- 确保Terraform资源中
close_on_deletion = true(你的代码已配置该参数),此参数会在删除前自动触发账户关闭操作 - 若仍报错,可手动在主账户的AWS组织控制台操作:
- 找到目标成员账户,点击关闭账户
- 等待账户状态变为已关闭(通常需数分钟)
- 再次执行
terraform destroy
- 若需自动化操作,可通过
local-execprovisioner在销毁前强制关闭账户(需本地配置AWS CLI且拥有organizations:CloseAccount权限):
resource "aws_organizations_account" "dev" { name = "example-dev" email = "validemailtest@testdomain.com" close_on_deletion = true iam_user_access_to_billing = "DENY" parent_id = aws_organizations_organizational_unit.dev.id # 销毁前强制关闭账户 provisioner "local-exec" { when = destroy command = "aws organizations close-account --account-id ${self.id}" } }
内容的提问来源于stack exchange,提问作者gklucard
相关产品推荐
相关产品推荐

