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

基于同一Terraform脚本的AWS跨账号部署案例咨询及配置问题求助

AWS跨账号Terraform部署案例与问题排查

优质跨账号部署架构示例

我分享一个AWS组织内跨账号部署的典型最佳实践模式,核心是通过IAM角色切换实现安全的跨账号操作,避免直接使用子账号长期凭证:

核心架构逻辑

  • 组织主账号(Master)下的授权用户/角色,通过STS服务Assume子账号(比如Dev)的专用部署角色
  • 子账号提前配置信任策略,允许主账号的特定身份切换到该角色
  • Terraform基于切换后的子账号角色身份完成资源部署,资源归属自然是子账号

具体配置示例

  1. 子账号(Dev)的IAM角色配置(用Terraform定义)
resource "aws_iam_role" "terraform_deployer" {
  name = "terraform-deployer"

  # 信任主账号的指定IAM用户能切换到此角色
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          AWS = "arn:aws:iam::[主账号ID]:user/[你的主账号IAM用户名]"
        }
      }
    ]
  })
}

# 给角色附加部署所需的最小权限(生产环境避免用管理员权限)
resource "aws_iam_role_policy_attachment" "deploy_perms" {
  role       = aws_iam_role.terraform_deployer.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess" # 示例权限,按需调整
}
  1. 本地AWS配置文件(~/.aws/config)
[profile master-admin]
aws_access_key_id = [主账号Access Key]
aws_secret_access_key = [主账号Secret Key]
region = us-east-1

[profile dev-deploy]
role_arn = arn:aws:iam::[Dev子账号ID]:role/terraform-deployer
source_profile = master-admin
region = us-east-1
  1. Terraform Provider配置
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  profile = "dev-deploy"
  region  = "us-east-1"
}

# 示例:在Dev账号创建S3桶
resource "aws_s3_bucket" "dev_data_bucket" {
  bucket = "dev-project-data-bucket-123" # 桶名需全局唯一
}

部署时直接执行terraform apply(或指定AWS_PROFILE=dev-deploy),Terraform会自动完成角色切换,资源所有者会显示为Dev子账号ID。


针对你的问题排查

你遇到的资源所有者仍显示主账号问题,大概率是dev_admin这个profile的配置存在问题,常见原因和排查步骤如下:

  • Profile实际使用主账号凭证:检查~/.aws/credentials里的dev_admin条目,是不是误填了主账号的Access Key/Secret Key?如果是,部署时自然会用主账号身份创建资源。
  • 角色切换配置错误:如果dev_admin是基于角色切换的profile,检查~/.aws/config里的role_arn是否为子账号的角色ARN?source_profile是否指向主账号的有效profile?同时确认子账号角色的信任策略是否正确允许主账号身份Assume它。
  • Provider配置未生效:确保Terraform的provider块里的profile参数确实指向dev_admin,并且没有优先级更高的环境变量(比如AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY会覆盖profile配置)。

快速验证身份的命令

执行以下命令,查看当前profile对应的身份:

AWS_PROFILE=dev_admin aws sts get-caller-identity

如果返回的Account是主账号ID,说明profile配置有问题;如果是子账号ID,尝试执行terraform init -reconfigure刷新provider缓存,再重新部署。

内容的提问来源于stack exchange,提问作者d8aninja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:37:45