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

Las*_*eek 4 amazon-ec2 amazon-web-services terraform

我正在使用 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"
}
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时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 凭证更新它。我对如何解决这个错误很迷茫。

小智 8

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


Rtm*_*tmY 6

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

一些例子:

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
Run Code Online (Sandbox Code Playgroud)


2) 当您aws_secret_access_key包含诸如加号+或多个正斜杠之类的字符时/。在此处查看更多信息
解决方案:删除凭据并生成新凭据。


3) 当您尝试在必须显式启用(并且没有)的区域内执行 Terraform 时。
(就我而言,它是me-south-1 (Bahrain)- 在此处查看更多信息)。
解决方案:启用区域或移动到启用的区域。


4) 如果您使用Vault等3rd 方工具并且不提供有效的 AWS 凭证进行通信 - 请在此处查看更多信息


所有这些都会导致 aws sts:GetCallerIdentityAPI失败。