You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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组织控制台操作:
    1. 找到目标成员账户,点击关闭账户
    2. 等待账户状态变为已关闭(通常需数分钟)
    3. 再次执行terraform destroy
  • 若需自动化操作,可通过local-exec provisioner在销毁前强制关闭账户(需本地配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:17:28