3

我在 AWS 区域 us-west-2(俄勒冈)的私有 VPC 中运行 Terraform。因此,我使用VPC 端点来公开STS API并在 Terraform 中覆盖此端点,如下所示:

provider "aws" {
  endpoints {
    sts = "https://sts.us-west-2.amazonaws.com/"
  }
}

不幸的是,这给出了以下错误:

provider.aws: error validating provider credentials: error calling sts:GetCallerIdentity: SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

什么可能导致此问题?在公共 VPC 中应用相同的 Terraform 代码而没有端点覆盖按预期工作。

我检查过的事情:

  • 正在运行 Terraform 的实例正在显示正确的时间 (UTC)
  • AWS_REGION 和 AWS_DEFAULT_REGION 环境变量设置为 us-west-2
  • 我用来进行身份验证的 AWS_SECRET_ACCESS_KEY 环境变量(连同 AWS_ACCESS_KEY_ID)仅包含字母数字字符

版本:

  • terraform version: Terraform v0.11.13
  • terraform-provider-aws: v2.17.0
4

1 回答 1

1

似乎 terraform 在将 URL 发送到 AWS 之前并未对其进行清理:

provider "aws" {
  endpoints {
    sts = "https://sts.us-west-2.amazonaws.com" # No trailing slash
  }
}

对我来说效果很好,而使用斜杠会导致您的错误

于 2019-07-03T07:48:21.233 回答