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配置未生效。
排查建议:
- 升级Terraform及AWS Provider版本:部分旧版本对
assume_role的处理存在bug,建议更新至最新稳定版。 - 验证目标角色的信任策略:确保
deploy_role_XXXXXXXX的信任策略中,允许Github Runner角色调用sts:AssumeRole动作。 - 检查凭证优先级:如果环境中存在
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等凭证变量,会覆盖assume_role配置,导致角色切换失败。 - 查看调试日志:执行
terraform init -debug,通过初始化日志定位角色切换过程中的具体错误。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

