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

时间:2018-05-01 18:31:40

标签: amazon-ec2 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"
}
}

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

确保您的访问密钥和机密正确。我使用了静态凭据,并使用variables.tf替换了变量。最新的错误也指向documentation。首先要使静态凭据起作用。

答案 2 :(得分:0)

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

一些例子:

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之类的第三方工具,并且没有提供有效的AWS凭证进行通信-请在here中查看更多信息。


所有都会导致aws sts:GetCallerIdentity API失败。

答案 3 :(得分:0)

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

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

然后,我将.tf文件中的共享凭据文件包括在“提供商”下。

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

我运行terraform plan -out myplan.tfplan时就完成了!

答案 4 :(得分:0)

遇到相同的错误,只需正确重新插入 AWS 凭证即可解决。试试看。