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

Terraform Cloud AWS动态提供商凭证及别名配置疑问

AWS Provider别名配置疑问(Terraform Cloud)

场景说明

我在两个不同AWS账户中有两个角色:

  • arn:aws:iam::123456789012:role/test-terraform-cloud-access
  • arn:aws:iam::123456789013:role/staging-terraform-cloud-access

已配置TFC环境变量:

  • TFC_AWS_PROVIDER_AUTH = true
  • TFC_AWS_RUN_ROLE_ARN = arn:aws:iam::123456789012:role/test-terraform-cloud-access

按照文档使用以下变量配置:

variable "tfc_aws_dynamic_credentials" {
  description = "Object containing AWS dynamic credentials configuration"
  type = object({
    default = object({
      shared_config_file = string
    })
    aliases = map(object({
      shared_config_file = string
    }))
  })
}

并通过如下方式指定别名:

provider "aws" {
  shared_config_files = [var.tfc_aws_dynamic_credentials.default.shared_config_file]
}

provider "aws" {
  alias = "ALIAS1"
  shared_config_files = [var.tfc_aws_dynamic_credentials.aliases["ALIAS1"].shared_config_file]
}

疑问

  1. shared_config_file在Terraform Cloud中何处配置?
  2. 如何为["STAGING"]这类别名指定对应的次要角色?
  3. 参考Vault示例,能否使用TFC_AWS_RUN_ROLE_ARN_STAGING这类变量?我尝试后未生效。

解答

1. shared_config_file的配置方式

这个参数不需要手动配置具体文件路径。当TFC启用TFC_AWS_PROVIDER_AUTH = true后,会在运行Terraform时自动生成包含临时凭证的AWS配置文件,你只需要在TFC工作区的变量页面,创建一个类型为对象(Object)的Terraform变量tfc_aws_dynamic_credentials,填入符合结构的JSON值即可,示例:

{
  "default": {
    "shared_config_file": "/tmp/aws_config"
  },
  "aliases": {
    "STAGING": {
      "shared_config_file": "/tmp/aws_config_staging"
    }
  }
}

实际运行时,TFC会自动替换这些路径为真实的临时配置文件路径,无需手动维护文件内容。

2. 为STAGING别名指定次要角色

需完成两步配置:

  • 添加TFC环境变量:在TFC工作区的环境变量中,新增TFC_AWS_RUN_ROLE_ARN_STAGING,值为staging角色ARN:arn:aws:iam::123456789013:role/staging-terraform-cloud-access
  • 调整Provider配置:修改AWS Provider别名配置,指向对应的shared_config_file:
provider "aws" {
  alias = "STAGING"
  shared_config_files = [var.tfc_aws_dynamic_credentials.aliases["STAGING"].shared_config_file]
}

3. TFC_AWS_RUN_ROLE_ARN_STAGING变量的使用问题

可以使用这类命名的变量,但需满足以下条件才能生效:

  • 变量命名严格匹配:环境变量名必须是TFC_AWS_RUN_ROLE_ARN_<ALIAS>,其中<ALIAS>要和Provider别名完全一致且为大写(比如别名是STAGING,变量名必须是TFC_AWS_RUN_ROLE_ARN_STAGING)
  • 权限配置正确:
    1. 默认角色(TFC_AWS_RUN_ROLE_ARN指定的角色)需有AssumeRole权限,允许扮演staging角色,在默认角色的IAM策略中添加:
      {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::123456789013:role/staging-terraform-cloud-access"
      }
      
    2. staging角色的信任策略必须允许默认角色ARN来assume它:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::123456789012:role/test-terraform-cloud-access"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      
  • 变量类型正确:确保在TFC中添加的是环境变量,而非Terraform变量。

内容的提问来源于stack exchange,提问作者Oli at cdcloudlogix.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:30:17