将AWS访问密钥存储到环境变量中,并解决Terraform无法读取时的应对方法:错误:验证提供程序凭据:从STS中检索调用者身份
挑战
我是Terraform的新手,每次访问AWS时,我习惯直接在源代码中写入这样的内容。
variable "region" {
default = "ap-northeast-1"
}
variable "access_key" {
default = "自分のaccess_key"
}
variable "secret_key" {
default = "自分のsecret_key"
}
# AWS プロバイダの設定
provider "aws" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
}
最近我们从部门内收到了有关在源代码中写入导致易泄露的意见,因此我们正在研究将其存储在Windows环境变量中并加载到Terraform的方法。
这次我尝试了这篇文章的方法,但是没有成功。。。
方式,从文章中摘录↓↓↓
provider "aws" { }
$ export AWS_ACCESS_KEY_ID="自分のkey"
$ export AWS_SECRET_ACCESS_KEY="自分のkey"
$ export AWS_DEFAULT_REGION="ap-northeast-1"
$ terraform plan
最后,就我个人而言,只执行这个操作的话,会出现以下错误…
Planning failed. Terraform encountered an error while generating this plan.
╷
│ Error: validating provider credentials: retrieving caller identity from STS: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: fdef4df2-5afd-4e07-aa6e-be3039c0fc03, api error InvalidClientTokenId: The security token included
in the request is invalid.
│
│ with provider["registry.terraform.io/hashicorp/aws"],
│ on main.tf line 2, in provider "aws":
│ 2: provider "aws" {
假设
・已经安装了AWS-CLI
・已经生成了有效的AWS用户访问密钥
・已经设置了环境变量
$ export AWS_ACCESS_KEY_ID="自分のkey"
$ export AWS_SECRET_ACCESS_KEY="自分のkey"
$ export AWS_DEFAULT_REGION="ap-northeast-1"


已验证可通过AWS-CLI访问AWS
已安装了Terraform
处理办法
我进行了各种调查,不知道什么是最好的,但通过查看以下的网站,问题解决了!
如果想要在Terraform中读取Windows的环境变量,似乎必须在变量名前面加上TF_VAR,否则Terraform无法正确读取。

如果以这种方式编写Terraform的源代码
variable "region" {
default = "ap-northeast-1"
}
variable "access_key " {
}
variable "secret_key " {
}
# AWS プロバイダの設定
provider "aws" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
}
最后,终于可以顺利加载啦!
※附带说明
这是我在一篇英文文章中看到的观点,
“作为Terraform变量读取的优先级,Windows环境变量是最后一个,所以容易出错(很容易读取失败,很容易被中途覆盖),
现在不推荐使用Windows环境变量…要么将其作为terraform的var写入,要么存储在tfvar文件中更好”。
也许,AWS_ACCESS_KEY_ID在我的Windows环境下无法成功读取到Terraform只是我个人遇到的问题吧。
这是我在一篇英文文章中看到的观点,
“作为Terraform变量读取的优先级,Windows环境变量是最后一个,所以容易出错(很容易读取失败,很容易被中途覆盖),
现在不推荐使用Windows环境变量…要么将其作为terraform的var写入,要么存储在tfvar文件中更好”。
也许,AWS_ACCESS_KEY_ID在我的Windows环境下无法成功读取到Terraform只是我个人遇到的问题吧。
结束
我了解了关于AWS访问的不同方法!
最终可能不那么适合使用Windows环境变量进行管理,更好的方法可能是将其写入terraform的var中或存储在tfvar文件中。
然而,考虑到PJ的安全限制,有时候在Terraform文件内写就不行了吧。。。
视情况而定,我们可能需要考虑哪一个是最佳选择…
这次我们使用了TF_VAR来解决,但如果有机会的话,我也想考虑其他的方法!