运行 Terraform Plan/Apply 时出现 InvalidClientTokenID 错误

InvalidClientTokenID error when running Terraform Plan/Apply

我正在使用 Terraform 和用户数据在 AWS 中设置 HA 集群。我的 main.tf 看起来像这样:

provider "aws" {
access_key = "access_key"
secret_key = "secret_key"
}

resource "aws_instance" "etcd" {
ami = "${var.ami}" // coreOS 17508
instance_type = "${var.instance_type}"
key_name = "${var.key_name}"
key_path = "${var.key_path}"
count = "${var.count}"
region = "${var.aws_region}"
user_data = "${file("cloud-config.yml")}"

subnet_id = "${aws_subnet.k8s.id}"
private_ip = "${cidrhost("10.43.0.0/16", 10 + count.index)}"
associate_public_ip_address = true

vpc_security_group_ids = ["${aws_security_group.terraform_swarm.id}"]

tags {
name = "coreOS-master"
}
}

但是,当我 运行 terraform plan 我得到以下错误 provider.aws: InvalidClientTokenId: The security token included in the request is invalid. status code: 403, request id: 45099d1a-4d6a-11e8-891c-df22e6789996

我查看了一些建议,以清除我的 ~/.aws/credentials 文件或使用新的 aws IAM 凭证更新它。我对如何解决这个错误很迷茫。

这通常是由凭据中的某些特定字符(\ @ ! 等)引起的。它可以通过重新生成您的 aws 访问代码和密钥的凭据来修复。

确保您的访问密钥和密码正确无误。我使用了静态凭证并使用 variables.tf 替换变量。最新的错误也指向documentation。从使静态凭证起作用开始。

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

一些示例:

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 包含加号 + 或多个正斜杠 / 等字符时。在 here 中查看更多信息。
解决方案:删除凭据并生成新凭据。


3) 当您尝试在必须明确启用(但未启用)的区域内执行 Terraform 时。
(在我的例子中是 me-south-1 (Bahrain) - 在 here 中查看更多内容)。
解决方案:启用区域或移动到已启用的区域。


4) 如果您使用 Vault and don't supply valid AWS credentials to communicate with - See more in here.

等第三方工具


都会导致aws失败sts:GetCallerIdentity API.

我遇到了同样的问题并设法解决了。在我再次尝试之前我实际上改变了两件事,所以不确定哪一个解决了问题。

我成功创建了没有任何“特殊”字符(+/ 等)的新信用。

然后我在我的 .tf 文件中的“provider”下包含了一个共享凭证文件。

provider "aws" {
shared_credentials_file = "\wsl$\Debian\home\user\.aws\credentials"
region = var.region
}

当我运行terraform plan -out myplan.tfplan它完成了!

出现同样的错误,只需正确重新插入 AWS 凭据即可解决。试一试。