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

Terraform AWS provider的assume_role{}在plan或apply阶段是否执行角色切换?

问题:Terraform AWS Provider的assume_role在plan阶段是否执行?

我已通过OIDC在Github Actions Runner中成功切换到AWS角色,随后在Terraform的AWS Provider中配置了assume_role块,指定的角色拥有管理AWS资源所需的全部IAM权限,且信任关系已允许Github Actions Runner角色切换至该角色。但执行terraform plan时失败,报错如下:

AWS Provider代码片段

provider "aws" {
  assume_role {
    role_arn = "arn:aws:iam::XXXXXXXXXXXX:role/deploy_role_XXXXXXXX"
  }
}

错误信息

An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:sts::***:assumed-role/github_runner/terraform-plan is not authorized to perform: secretsmanager:GetSecretValue on resource: x_secret because no identity-based policy allows the secretsmanager:GetSecretValue action

从报错可以看出assume_role未执行角色切换,想咨询:assume_role是在apply阶段还是plan阶段执行角色切换?


回答
  • Terraform AWS Provider的assume_role配置在plan和apply阶段都会执行角色切换,只要Provider完成初始化,所有与AWS的交互都会使用切换后的角色身份。

  • 你遇到的报错说明当前执行terraform plan的身份仍是Github Runner的角色(github_runner/terraform-plan),而非指定的deploy_role_XXXXXXXX,核心原因是assume_role配置未生效。

排查建议:

  1. 升级Terraform及AWS Provider版本:部分旧版本对assume_role的处理存在bug,建议更新至最新稳定版。
  2. 验证目标角色的信任策略:确保deploy_role_XXXXXXXX的信任策略中,允许Github Runner角色调用sts:AssumeRole动作。
  3. 检查凭证优先级:如果环境中存在AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等凭证变量,会覆盖assume_role配置,导致角色切换失败。
  4. 查看调试日志:执行terraform init -debug,通过初始化日志定位角色切换过程中的具体错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:52:42