运行 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 凭据即可解决。试一试。
我正在使用 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 凭据即可解决。试一试。