AWS_PROFILE env var 设置的 AWS DefaultCredentialProvider 不适用于 terraform 远程状态

AWS DefaultCredentialProvider set by AWS_PROFILE env var not working for terraform remote state

我有一个简单的 Terraform 根,可以配置一些 AWS 资源。它最初是用默认的本地状态设置的。我使用 AWS 配置文件指定目标环境:

$ export AWS_PROFILE="some-aws-profile"
$ aws sts get-caller-identity
{
    "UserId": "REDACTED:REDACTED",
    "Account": "account_id",
    "Arn": "arn:aws:sts::account:assumed-role/somerolename/someusername"
}

我可以 运行 terraform planterraform apply - 在目标帐户中创建资源。 provider "aws" 仅配置了区域参数,所有其他详细信息/凭据都通过 AWS_PROFILE 环境变量控制。

现在我希望通过 S3 后端将状态移动到远程。

terraform {
  backend "s3" {
    bucket = "my-bucket-name"
    key    = "some/path/to/terraform.tfstate"
    region = "eu-west-1"
  }
}

当我用 运行 terraform init 时,会抛出一个错误: Error: error configuring S3 Backend: no valid credential sources for S3 Backend found. 我也试过将 profile = "some-aws-profile" 添加到 s3 后端块中,但还是一样失败。

terraform/后端块是否使用不同的凭证提供者链?此后端配置无法从环境变量中隐式使用 AWS_PROFILE,甚至在添加 profile 时无法使用的任何原因?

我没有任何用于身份验证的 .credentials 文件 - 在我的本地环境中,我使用 aws sso login 通过 ~/ 中的 /cache/ 子目录自动管理凭据.aws/sso 或 ~/.aws/cli - 这是与后端不兼容的部分吗?

编辑 添加来自 ~/.aws/config

的片段

这是我的个人资料:

[profile some-aws-profile]
sso_start_url = https://myhostname.awsapps.com/start/#/
sso_region = eu-west-1
sso_account_id = <actual_account_id>
sso_role_name = somerolename
region = eu-west-1
output = json

要设置身份验证,我会在设置 AWS_PROFILE 后使用 aws sso login,并且我会在 CLI 存储临时凭证的任何地方授权请求。

这在 0.13.6 中不适用于最新版本的 terraform provider aws (4.15.1)。

升级到 TF 1.2.0 解决了这个问题 - SSO 配置文件用于 S3 后端中的凭据加载。