【问题标题】:InvalidClientTokenID error when running Terraform Plan/Apply运行 Terraform 计划/应用时出现 InvalidClientTokenID 错误
【发布时间】:2018-10-11 19:25:50
【问题描述】:

我正在使用 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 凭证更新它。我对如何解决这个错误非常迷茫。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      一些例子:

      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】:

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

        【讨论】:

          【解决方案4】:

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

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

          然后,我在“提供者”下的 .tf 文件中包含了一个共享凭据文件。

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

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

          【讨论】:

          • 请尽量准确地回复您的回复。您的回答看起来更像是猜测而不是问题的解决方案。如果您无法确定真正解决问题的方法,那么您就是在胡乱猜测,这在编程和开发中是绝对的(不,不)。
          • 感谢您的建议!我将其缩小到共享凭据文件 - 即使我的密码中有特殊字符,它仍然在之后完成。
          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2020-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-16
            • 1970-01-01
            • 2021-10-28
            相关资源
            最近更新 更多