AWS CodeBuild执行Terraform init报错:S3后端无有效凭证
解决CodeBuild中Terraform S3后端凭证无效问题
问题场景
- 使用Terraform 1.2.7,AWS CodeBuild配置为扮演
devops角色(已配置CodeBuild信任关系,且角色拥有管理员权限) - 本地执行
terraform init/plan/apply完全正常 - CodeBuild中执行时先报
no valid credential sources for S3 Backend found.,移除Terraform后端及provider配置中的role_arn后问题依旧 - 手动在CodeBuild环境通过CLI获取
devops角色凭证,导出为环境变量后执行terraform init,仍提示InvalidClientTokenId: 安全令牌无效
原因分析
- 凭证冲突:CodeBuild会自动注入任务角色的临时凭证,手动获取并导出的凭证会和内置凭证冲突,导致Terraform读取到无效的凭证
- Terraform凭证优先级问题:即使移除配置中的
role_arn,Terraform可能优先读取缓存的旧凭证或错误的环境变量 - 手动获取凭证的上下文问题:手动执行
sts assume-role获取的凭证没有和CodeBuild的环境上下文正确关联,导致令牌无效
解决方案
1. 完全依赖CodeBuild内置凭证
不要手动在BuildSpec中执行aws sts assume-role来获取凭证,CodeBuild会自动将devops角色的临时凭证注入到环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN)。
示例BuildSpec配置:
version: 0.2 env: shell: bash phases: install: commands: # 安装指定版本的Terraform - wget https://releases.hashicorp.com/terraform/1.2.7/terraform_1.2.7_linux_amd64.zip - unzip terraform_1.2.7_linux_amd64.zip - mv terraform /usr/local/bin/ - terraform --version pre_build: commands: # 清理可能存在的旧凭证 - rm -rf ~/.aws/credentials ~/.aws/config - unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN # 验证当前凭证身份 - aws sts get-caller-identity build: commands: - terraform init -input=false - terraform plan -input=false - terraform apply -input=false -auto-approve
2. 简化Terraform配置
移除后端和provider配置中的role_arn,让Terraform自动使用环境变量中的凭证:
后端配置:
terraform { backend "s3" { bucket = "your-terraform-state-bucket" key = "infra/prod/state.tfstate" region = "cn-north-1" # 替换为你的区域 } }
AWS Provider配置:
provider "aws" { region = "cn-north-1" # 替换为你的区域 }
3. 确认角色信任关系
检查devops角色的信任策略,确保允许CodeBuild服务扮演该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 禁用CodeBuild缓存
如果之前有配置CodeBuild的缓存,可能会残留旧凭证数据,建议临时禁用缓存测试,或者在BuildSpec中添加清理缓存的步骤。
验证步骤
执行CodeBuild任务后,观察pre_build阶段的aws sts get-caller-identity输出,如果返回的是devops角色的ARN,说明凭证正常,Terraform后续的init操作应该能成功。
内容的提问来源于stack exchange,提问作者mariovalens
相关产品推荐
相关产品推荐

