如何配置Terraform AWS Provider实现assume_role会话到期自动刷新?
Terraform AWS Provider AssumeRole会话自动续订配置及凭证刷新机制说明
自动续订配置方法
该能力不需要额外配置特殊开关,默认对3.0.0及以上版本的AWS Provider生效,只要正确配置assume_role参数即可,参考配置示例如下:
terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 3.0.0" } } } provider "aws" { region = "你的目标区域" assume_role { role_arn = "arn:aws:iam::账号ID:role/目标角色名称" session_name = "terraform-deployment-session" # 可选配置:指定会话时长,不能超过角色本身设置的最大会话时长 duration_seconds = 3600 } }
凭证刷新机制工作原理
- Terraform AWS Provider本身没有单独实现凭证刷新逻辑,完全复用AWS官方Go SDK内置的凭证生命周期管理能力
- SDK会自动监控当前临时凭证的过期时间,默认在凭证过期前5分钟自动发起新的AssumeRole请求获取新凭证,替换旧凭证,整个过程对用户无感知
- 以下情况会导致自动刷新失败:
- 配置的
duration_seconds参数超过了目标IAM角色设置的「最大会话时长」限制,新的AssumeRole请求会被拒绝 - 执行Terraform操作的身份没有目标角色的
sts:AssumeRole权限 - 配置的
external_id、mfa_serial等校验参数和角色要求不匹配
- 配置的
- 如果需要验证刷新逻辑是否生效,可以设置环境变量
TF_LOG=DEBUG执行Terraform命令,搜索日志中AssumeRole相关的调用记录即可查看续期请求的执行情况
机制说明查询路径
该特性的相关说明没有放在Provider文档首页,你可以在Terraform AWS Provider官方文档的「Authentication and Configuration」分类下的「Assume Role」子章节找到相关描述,底层的凭证刷新逻辑可以查询AWS Go SDK官方文档的凭证Provider章节。
内容的提问来源于stack exchange,提问作者Jacek Kowalski
相关产品推荐
相关产品推荐

