尝试将我的状态文件存储在 s3 存储桶中,但在尝试“Terraform init”时出现此错误:
error configuring S3 Backend: error validating provider credentials:
error calling sts:GetCallerIdentity:
InvalidClientTokenId: The security token included in the request is invalid.
main.tf:
provider "aws" {
region = var.region
access_key = var.acc_key
secret_key = var.sec_key
}
terraform {
backend "s3" {
bucket = "mybucket-terra-prac"
key = "terraform.tfstate"
region = "eu-central-1"
}
}
resource "aws_instance" "web" {
ami = var.ami
instance_type = "t2.large"
associate_public_ip_address=true
key_name = var.public_key
tags = {
Name = var.ec2_name
}
}
variables.tf 文件中的变量(带有类型和默认值):
variable "acc_key" {}
variable "sec_key" {}
variable "public_key" {}
variable "ami" {}
尝试执行
aws sts get-caller-identity
命令并查看您使用的凭据是否正确。
就我而言,我可以通过删除
.terraform/
文件夹然后再次运行 terraform init
来解决问题。
我不完全确定,但我认为在
region
部分中指定 aws provider
时不能使用变量。我认为您需要将其硬编码到您所在的区域。同样也不完全确定,但在 secret
和 access
键中使用变量应该进行硬编码,而不是将其指向变量(这些参数旨在直接在 terraform 文件内指定值时使用)。
并且
terraform
部分应放置在文件开头的 aws provider
部分之前。
我遇到了类似的错误:
Error: error configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid.
status code: 403, request id: f07a9a38-ef21-44ee-a122-71800b865fea
with provider["registry.terraform.io/hashicorp/aws"],
on main.tf line 1, in provider "aws":
1: provider "aws" {
事实证明我工作的区域是未启用。仅供参考,启用一个区域需要几分钟时间。
就我而言,首先我需要在 AWS CLI(公司策略)上配置 MFA,然后编辑
~/.aws/credentials (vim ~/.aws/credentials)
添加正确的配置文件。
就我而言,它显示
[default]
。编辑后,我在 vs code 上仍然遇到错误。我在本地终端上尝试过,它成功了。
对我来说问题是。我在
~/.aws/config
中定义了一个现有的 aws 令牌
尝试检查一下,特别是如果您使用多个配置文件。
默认构造函数客户端使用系统环境变量中的默认凭证搜索凭证:AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。
所以取消设置它们。
然后执行
aws sts get-caller-identity
命令并查看您是否使用了正确的凭据。
在控制台上使用“aws configure”并添加新/旧凭据即可,因为之后我的工作正常
将 access_key 和 secret_key 添加到后端配置
backend "s3" {
bucket = "s3-demo-bucket-XXX"
key = "s3remotestate.tf.state"
region = "us-east-1"
access_key = "XX"
secret_key = "XX
}
您的 AWS 提供商似乎缺少“令牌”字段。 尝试将此字段添加到您的 AWS 提供商部分。 您的 AWS 提供商块应如下所示:
provider "aws" {
region = var.region
access_key = var.acc_key
secret_key = var.sec_key
token = var.token
}
另外不要忘记将这一行添加到您的文件variables.tf中:
变量“令牌”{}
terraform init
-backend-config="access_key=${{ secrets.AWS_ACCESS_KEY }}"
-backend-config="secret_key=${{ secrets.AWS_SECRET_ACCESS_KEY}}"