我正在使用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凭证更新它。我很失落如何解决这个错误。
答案 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 凭证即可解决。试试看。