我在Terraform中拥有现有的基础架构,并且已经使用了一段时间。最近,我交换了本地笔记本电脑的AWS凭据(凭据存储在中~/.aws/credentials
),直到我重新设置这些凭据后,它才停止工作。
问题是我在Terraform源代码中声明了凭据,但似乎根本没有使用它们。
terraform {
backend "s3" {
bucket = "example_tf_states"
key = "global/vpc/us_east_1/example_state.tfstate"
encrypt = true
region = "us-east-1"
}
}
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}
variable "access_key" {
default = "<hidden_for_stack_exchange_post>"
}
variable "secret_key" {
default = "<hidden_for_stack_exchange_post>"
}
variable "region" {
default = "us-east-1"
}
访问ID权限为100%良好。我在上述Terraform变量声明中所使用的aws configure
设置都使用了相同的帐户ID和密钥~/.aws/credentials
。
只要有~/.aws/credentials
资格,一切都可以正常工作,但是一旦操作系统级别的凭证消失(即rm ~/.aws/credentials
),在尝试运行Terraform操作时,我会得到以下信息terraform plan
:
Failed to load backend:
Error configuring the backend "s3": No valid credential sources found for AWS Provider.
Please see https://terraform.io/docs/providers/aws/index.html for more information on
providing credentials for the AWS Provider
Please update the configuration in your Terraform files to fix this error.
If you'd like to update the configuration interactively without storing
the values in your configuration, run "terraform init".
如果我~/.aws/credentials
通过运行重新填充,aws configure
它将再次正常运行。
我不理解- 如果我的provider
设置是明确声明要在Terraform源代码中使用的凭据,为什么OS级别的AWS配置根本不重要?
如何使Terraform仅使用Terraform配置中定义的凭据,而忽略OS用户配置文件中的内容?
编辑,是 Terraform v0.11.7
编辑:请注意,我正在尝试解决有关在提供程序声明中未使用静态声明的凭据的问题。不寻找替代方法或解决方法。谢谢。
AWS_PROFILE
或AWS_DEFAULT_PROFILE
环境变量,因为这是对AWS SDK的提示,它应在凭证文件中查找。