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 plan
或 terraform 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 后端中的凭据加载。
我有一个简单的 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 plan
或 terraform 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 后端中的凭据加载。