InvalidClientTokenId:请求中包含的安全令牌无效。状态码:403

问题描述 投票:0回答:7

我正在使用 terraform 和 kubectl 来部署基础设施和应用程序。

自从我更改了 aws 配置:

terraform init

terraform apply

我总是得到:

terraform apply

Error: error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid.
    status code: 403, request id: 5ba38c31-d39a-11e9-a642-21e0b5cf5c0e

  on providers.tf line 1, in provider "aws":
   1: provider "aws" {

你能给建议吗?欣赏 !

amazon-web-services kubernetes terraform kubectl amazon-eks
7个回答
28
投票

这里

这是一个常见错误,可能由多种原因引起。

一些例子:

1) 作为环境变量或在

~/.aws/credentials
中传递的无效凭据。

解决方案:删除旧的配置文件/凭据并清理所有环境变量

for var in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SECURITY_TOKEN ; do eval unset $var ; done


2) 当您的

aws_secret_access_key
包含加号
+
或多个正斜杠
/
等字符时。请参阅此处了解更多信息。
解决方案:删除凭证并生成新凭证。


3) 当您尝试在必须显式启用(但实际上并未启用)的区域内执行 Terraform 时。
(就我而言,它是

me-south-1 (Bahrain)
- 请参阅此处了解更多信息)。
解决方案:启用区域或移至已启用的区域。


4) 如果您使用 Vault 等第三方工具且未提供有效的 AWS 凭证进行通信 - 请参阅此处了解更多信息。


所有这些都会导致 aws

sts:GetCallerIdentity
API 失败。


5
投票

就我而言,事实证明我设置了环境变量

AWS_ACCESS_KEY_ID
AWS_DEFAULT_REGION
AWS_SECRET_ACCESS_KEY
。这绕过了我的
~/.aws/credentials
文件。只需取消设置这些环境变量就对我有用!


5
投票

添加 S3 Terraform 后端后,我遇到了相同的无效令牌错误。

这是因为我在新后端上缺少一个

profile
属性。

这是我收到无效令牌错误时的设置:

# ~/.aws/credentials

[default]
aws_access_key_id=OJA6...
aws_secret_access_key=r2a7...

[my_profile_name]
aws_access_key_id=RX9T...
aws_secret_access_key=oaQy...
// main.tf

terraform {
  backend "s3" {
    bucket         = "terraform-state"
    encrypt        = true
    key            = "terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-state-locks"
  }
}

这是有效的修复(显示差异,我在开头添加了带有“+”的行):

  // main.tf

  terraform {
    backend "s3" {
      bucket         = "terraform-state"
      // ...
+     profile        = "my_profile_name"
    }
  }

我阅读或观看的指南或视频都不包含

profile
属性。但它在 Terraform 文档中进行了解释:

https://www.terraform.io/language/settings/backends/s3


0
投票

我的问题与 VS Code 调试控制台有关:未加载

AWS_PROFILE
AWS_REGION
环境变量。为了解决这个问题,我关闭了 vscode 并使用命令
code <project-folder>
通过 CLI 重新打开。


0
投票

我使用了 aws configure 并提供了我的密钥,如下所示

查看我收到的错误图片

1

但我仍然收到无效令牌错误。

回答

我已经清理了 ~/.aws/credentials 中的所有内容,然后再次运行 aws configure 并提供了我的密钥。

这对我有用。你也试试吧


0
投票

这可能有两个问题

  1. AWS 凭证(访问密钥 ID 和密钥)可能需要重新配置 因此,请使用 aws configure 来更新凭证。

  2. 在 aws 门户中,如果您的信用长时间未使用,它们可能会处于非活动状态。请继续激活它们并重试。


0
投票

即使我的凭据有效并且有效,我仍然收到此错误。事实证明,这是因为我上传的 cloudformation 堆栈正在创建 IAM 角色,而 AWS 要求您使用 MFA 才能创建 IAM 角色。因此,添加 MFA 并使用

--serial-number
--token-code
获取我的安全令牌解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.