You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform Vault AWS登录时遇SignatureDoesNotMatch错误求助

问题:Terraform通过AWS认证Vault时出现SignatureDoesNotMatch错误

执行Terraform脚本部署FSx服务器,通过HashiCorp Vault的AWS认证方式获取密码时,出现如下错误:

URL: PUT https://hcvurl:8200/v1/auth/aws/login
Code: 400. Errors:

* error making upstream request: received error code 403 from STS: <ErrorResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  <Error>
    <Type>Sender</Type>
    <Code>SignatureDoesNotMatch</Code>
    <Message>Credential should be scoped to a valid region. </Message>
  </Error>
  <RequestId>24b37364-0771-4f9d-9b95-12345678</RequestId>
</ErrorResponse>

Terraform相关配置

AWS Provider配置

provider "aws" {
  alias   = "aws_alias"
  region  = var.aws_region
  version = ">= 3.8.0"
  assume_role {
    role_arn = var.role_arn
  }
}

Vault Provider配置

provider "vault" {
  address = "https://hcvUrl:8200"

  auth_login {
    path = "auth/aws/login"
    method = "aws"
    parameters = {
      role = "my-dev-role"
    }
  }
}

密钥获取与FSx配置

data "vault_generic_secret" "fsx_service_account" {
  provider = vault
  path = "path/to/the/secret"
}

self_managed_active_directory {
    username                               = var.fsx_service_account_username
    password                               = data.vault_generic_secret.fsx_service_account.data["password"]
    dns_ips                                = var.activedirectory_dc_ips
    domain_name                            = var.fsx_domain
    organizational_unit_distinguished_name = var.organizational_unit_distinguished_name
}

已尝试操作

  • 确认AWS Provider配置的区域与Vault实例运行区域一致
  • 验证my-dev-role具备必要权限,且Vault角色已配置允许使用STS令牌进行AWS认证

原因分析

该错误核心是Vault调用AWS STS服务时使用的凭证未关联正确区域,常见触发场景:

  1. Vault的AWS认证后端未配置默认STS区域,默认使用全局STS端点,但当前凭证要求区域化端点
  2. Terraform的Vault Provider未传递AWS区域参数,导致认证请求使用的STS端点与凭证的区域不匹配
  3. 假设的IAM角色var.role_arn的权限/信任策略限制了区域,而请求使用的STS端点不在允许范围内

解决方案

1. 为Vault Provider指定AWS区域

在Vault Provider的auth_login参数中添加区域配置,与AWS Provider保持一致:

provider "vault" {
  address = "https://hcvUrl:8200"

  auth_login {
    path = "auth/aws/login"
    method = "aws"
    parameters = {
      role = "my-dev-role"
      region = var.aws_region # 新增:指定与AWS Provider一致的区域
    }
  }
}

2. 配置Vault AWS认证后端的STS区域

登录Vault后,更新AWS认证后端的默认区域,确保使用对应区域的STS端点:

vault write auth/aws/config/client region=<你的AWS区域>

3. 验证IAM角色的区域权限

检查my-dev-role的权限策略,确保允许在指定区域调用STS服务:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetCallerIdentity",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": "<你的AWS区域>"
        }
      }
    }
  ]
}

同时确认角色的信任策略未限制区域范围。

4. 确保Terraform使用的凭证包含区域信息

若Terraform通过环境变量或共享凭证文件获取AWS凭证,需确保AWS_REGION环境变量已正确设置,或凭证文件中指定了对应区域。

内容的提问来源于stack exchange,提问作者Amila Fonseka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:32:14