Terraform Cloud AWS动态提供商凭证及别名配置疑问
AWS Provider别名配置疑问(Terraform Cloud)
场景说明
我在两个不同AWS账户中有两个角色:
arn:aws:iam::123456789012:role/test-terraform-cloud-accessarn:aws:iam::123456789013:role/staging-terraform-cloud-access
已配置TFC环境变量:
TFC_AWS_PROVIDER_AUTH = trueTFC_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] }
疑问
shared_config_file在Terraform Cloud中何处配置?- 如何为
["STAGING"]这类别名指定对应的次要角色? - 参考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) - 权限配置正确:
- 默认角色(
TFC_AWS_RUN_ROLE_ARN指定的角色)需有AssumeRole权限,允许扮演staging角色,在默认角色的IAM策略中添加:{ "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789013:role/staging-terraform-cloud-access" } - 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
相关产品推荐
相关产品推荐

