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

如何通过Terraform将AWS Transit Gateway共享至整个组织?

Terraform共享Transit Gateway至AWS整个组织的解决方案

问题根源

  • aws_ram_principal_association资源不支持直接传入组织ID(如o-nb1000a1),该字段默认仅识别12位AWS账号ID,因此直接传入组织ID会触发格式错误。
  • 仅指定父账号ID只能将TGW共享至该单个账号,无法覆盖整个组织架构。

正确实现方案

1. 先确保RAM与AWS Organizations集成

需要将RAM设为组织的委托管理员(若未配置),确保管理账号有权限将资源共享至整个组织:

resource "aws_organizations_delegated_administrator" "ram" {
  account_id        = var.management_account_id # 替换为你的组织管理账号ID
  service_principal = "ram.amazonaws.com"
}

2. 修改Terraform代码实现组织级共享

核心是使用组织ARN作为RAM共享的主体,而非纯组织ID,调整后的代码如下:

# 获取当前AWS组织的信息
data "aws_organizations_organization" "default" {
  count = var.ram_resource_share_enabled && !local.ram_principals_provided ? 1 : 0
}

# 本地变量:自动生成组织ARN作为共享主体,或使用用户指定的主体
locals {
  ram_principals_provided = length(var.provided_ram_principals) > 0
  ram_principals = var.ram_resource_share_enabled && !local.ram_principals_provided ?
    [data.aws_organizations_organization.default[0].arn] :
    var.provided_ram_principals
}

# 创建RAM资源共享
resource "aws_ram_resource_share" "default" {
  count                     = var.ram_resource_share_enabled ? 1 : 0
  name                      = var.resource_share_name
  allow_external_principals = false # 组织内共享无需允许外部主体

  # 绑定TGW的全访问权限
  permission_arns = ["arn:aws:ram::aws:permission/AWSTransitGatewayFullAccess"]
}

# 将TGW关联到RAM共享
resource "aws_ram_resource_association" "default" {
  count              = var.ram_resource_share_enabled ? 1 : 0
  resource_arn       = aws_ec2_transit_gateway.tgw.arn
  resource_share_arn = aws_ram_resource_share.default[0].id
}

# 将组织ARN关联到RAM共享,实现全组织共享
resource "aws_ram_principal_association" "default" {
  for_each           = toset(local.ram_principals)
  principal          = each.value
  resource_share_arn = aws_ram_resource_share.default[0].id
}

关键说明

  • 组织ARN格式:AWS RAM接受格式为arn:aws:organizations::<管理账号ID>:organization/o-xxxxxx的ARN作为共享主体,这样就能把TGW共享给整个组织内的所有账号。
  • 权限配置:添加AWSTransitGatewayFullAccess权限ARN,确保组织内账号能正常使用共享的TGW资源。
  • 参数校验:allow_external_principals需设为false,因为组织内共享属于AWS内部主体共享,无需开放外部访问。

排查要点

  • 执行Terraform的账号必须是组织管理账号,或已被配置为RAM的委托管理员。
  • 确认组织已启用所有必要的RAM集成功能(可在AWS控制台RAM页面查看)。

内容的提问来源于stack exchange,提问作者e-on

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:13:19