Terraform初始化S3后端遇CredentialRequiresARNError问题:0.11.15正常,0.15.5及1.0.7报错
解决Terraform 0.15+/1.x版本初始化S3后端的CredentialRequiresARNError问题
这个问题我之前帮人排查过,本质是Terraform版本升级后,AWS认证的校验逻辑变严格了,结合你的报错信息,咱们一步步来解决:
问题根源
Terraform 0.13及以后版本(包括你用的0.15.5和1.0.7)依赖的AWS SDK和AWS Provider版本都做了升级,对AWS配置文件(~/.aws/config或C:\Users\<用户名>\.aws\config)的格式校验更严格。
你遇到的错误CredentialRequiresARNError: credential type source_profile requires role_arn, profile default明确指向:你的**默认AWS Profile(default)**配置中使用了source_profile字段,但没有配套指定role_arn参数。旧版本Terraform(0.11.15)用的AWS Provider 2.70.0对这种不规范配置容错性更高,所以没报错,但新版本会直接阻断认证流程。
解决方案
1. 修复AWS配置文件中的默认Profile
首先找到你的AWS配置文件,按以下两种情况调整:
- 如果default是直接使用访问密钥的Profile:
确保配置里没有source_profile,直接写访问密钥和区域:[profile default] aws_access_key_id = YOUR_ACCESS_KEY_ID aws_secret_access_key = YOUR_SECRET_ACCESS_KEY region = eu-west-1 - 如果default是需要切换角色的Profile:
必须同时指定role_arn和source_profile(source_profile是有权限调用该角色的另一个Profile):[profile default] role_arn = arn:aws:iam::123456789012:role/YourTargetRoleName source_profile = your-source-profile-name region = eu-west-1
2. 显式指定后端使用的合法Profile(可选)
如果你不想修改默认Profile,可以在后端配置中指定一个已经正确配置的Profile:
- 在
test-env.tfvars中添加一行:profile = "your-valid-profile-name" - 或者执行
terraform init时通过环境变量临时指定:AWS_PROFILE=your-valid-profile-name terraform init -backend-config=test-env.tfvars
3. 适配新版本Terraform的Provider配置(推荐)
Terraform 0.15+要求显式声明Provider的来源和版本,建议更新你的terraform.tf配置,避免版本兼容问题:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" # 适合Terraform 0.15/1.x的稳定版本 } } backend "s3" { } } provider "aws" { region = "eu-west-1" } resource "aws_s3_bucket" "this" { bucket = "test-bucket" acl = "private" }
验证修复
修改完成后,重新执行:
terraform init -backend-config=test-env.tfvars
如果配置正确,应该能成功初始化后端,之后正常执行terraform apply。
内容的提问来源于stack exchange,提问作者Sebastian Dusza
相关产品推荐
相关产品推荐

