AWS Terraform:│错误:配置Terraform AWS提供程序时出错:验证提供程序凭据时出错:调用sts:GetCallerIdentity时出错。

6

错误:配置Terraform AWS提供程序时出错:

验证提供程序凭据时出错:调用sts:GetCallerIdentity时出现错误:操作错误STS:GetCallerIdentity,https响应错误状态码:403,RequestID:95e52463-8cd7-038-b924-3a5d4ad6ef03,api错误InvalidClientTokenId:请求中包含的安全令牌无效。使用provider["registry.terraform.io/hashicorp/aws"],在provider.tf的第1行上,在提供程序"aws"中:1:提供程序"aws" {

我只有两个文件。

  1. instance.tf
resource "aws_instance" "web" {
  ami           = "ami-068257025f72f470d"
  instance_type = "t2.micro"
    
  tags = {
    Name = "instance_using_terraform"
  }
}
  1. provider.tf
provider "aws" {
  region = "ap-east-1"
  access_key = "xxxx"
  secret_key = "xxxx/xxx+xxx"
}

error image is here


1
你的TF代码产生了什么错误? - Marcin
有没有可能是这个问题,已经检查了AWS区域、秘钥和访问密钥。 - RAVINDRA PUROHIT
1
如果出现错误,要如何成功规划呢?如果没有您用来配置提供程序的代码,我们很难提供任何帮助。 - Marko E
instance.tf:资源"aws_instance" "web" { ami = "ami-068257025f72f470d" instance_type = "t2.micro" tags = { Name = "instance_using_terraform" } } - RAVINDRA PUROHIT
@MarkoE 谢谢你的帮助!不,我没有声明任何类型的提供者,只有提供者.tf文件。现在,程序运行良好。 - RAVINDRA PUROHIT
显示剩余3条评论
10个回答

5

可能您传递给 AWS 的配置区域与 Terraform 提供程序的区域不同,例如:AWS 配置中为 us-east-1,而 Terraform 提供程序区域为 us-east-1a

请将这些区域更改为相同的区域。


天啊,谢谢!在我的情况下就是这样。这是一个令人惊讶的模糊错误,对于一个相当简单的错误来说。在我的情况下,是因为我使用了us-west-3而不是eu-west-3。所以只有两个字符(其中一个是相同的)导致了这个问题。 - Lars

3

在我的情况下,这个问题是因为您的系统日期/时间不正确。

通过以下命令为我的CentOS8操作系统设置时间

timedatectl status timedatectl set-time HH:MM:SS

如果您已经在机器上设置了NTP服务,则会抛出错误,提示“无法设置时间:NTP单元处于活动状态”

sudo timedatectl set-local-rtc true sudo timedatectl set-ntp false sudo timedatectl set-time "yyyy-MM-dd hh:mm:ss" timedatectl list-timezones sudo timedatectl set-timezone Europe/Zagreb sudo timedatectl set-ntp yes


2
在我的测试环境中,我使用了root用户的访问密钥和秘密访问密钥,但是无法正常工作。创建一个专用用户后,错误就不会再发生了。
具体来说,我执行了以下步骤:
1. 创建了一个名为terraform的用户 2. 通过向导创建了一个附加了管理员访问权限的新组Administrators。 3. 将访问密钥和秘密访问密钥复制到~/.aws/credentials中 aws access key=xxx aws secret access key=xxx 4. 创建了~/.aws/config文件 [default] region=us-west-2

1
检查.aws文件夹(配置文件)。 尝试这个。
aws sts get-caller-identity

{
    "UserId": "AIDAYMYFUCQM7K2RD9DDD",
    "Account": "111147549871",
    "Arn": "arn:aws:iam::111147549871:user/myself"
}

请向我们展示您的main.tf文件以及您如何定义访问权限的位置和方式。

我不太明白...在providers.tf文件或其他文件中需要更改顶部。 - RAVINDRA PUROHIT
尝试从命令行界面运行此命令。 - Richard Rublev
谢谢你的帮助,我找到了解决方案。 - RAVINDRA PUROHIT

1
在声明区域的地方我犯了错误,输入了错误的区域名称代码和访问密钥 - 密钥中的 '+' 和 '/' 由于一些符号而导致错误,您只需要尝试新密钥,直到访问密钥仅包含字母字符串即可(符号真是麻烦)。

1

请确保使用为您的AWS IAM帐户指定的默认区域

provider "aws" {
  region     = "eu-north-1" # < --- here 
  access_key = "**************"
  secret_key = "**************"
}

0
如果有人遇到这个问题,我发现我正在工作的工作区在Terraform Cloud中设置了AWS凭证的环境变量。这些环境变量优先于我的本地凭证,并且需要刷新。

0
对我来说,我不得不更新我的提供者版本。我尝试了这里的所有建议,但都没有起作用。我的required_providers版本是4.67.0,但是将其更新为5.0需要我更新锁定的依赖项选择,以匹配通过运行"terraform init -upgrade"命令更改的配置。这对我起了作用。

0
在我的情况下,错误是因为我没有默认配置声明。当我创建了它后,一切都正常工作了。

0
对于可能遇到这个错误的任何人
Error: configuring Terraform AWS Provider: validating provider credentials: retrieving caller identity from STS: operation error STS: GetCallerIdentity, https response error StatusCode: 400 ... api error IncompleteSignature: ....  not a valid key=value pair  

检查一下你的凭证文件是否包含任何尾随空格,比如在行尾。AWS很高兴地去掉这些空格并且正常工作,但是Terraform不行!我花了很长时间才找到这个问题的根源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接