创建 Vault Terraform 提供者令牌的权限被拒绝

问题描述 投票:0回答:3

我在 Terraform IaC 代码中使用 Vault 提供程序,如下所示:

provider "vault" {
  address = var.vault_address

  auth_login {
    path = "auth/approle/login"

    parameters = {
      role_id   = var.role_id
      secret_id = var.secret_id
    }
  }
}

我传递一个地址,例如:https://www.vault.organization.com并更正role_idsecret_id。当我通过 HTTP 请求请求令牌时它可以工作,但在这种提供程序情况下我收到 403 权限被拒绝错误,如下所示:

│ Error: failed to create limited child token: Error making API request.
│ 
│ URL: POST https://vault.organization.com/v1/auth/token/create
│ Code: 403. Errors:
│ 
│ * 1 error occurred:
│   * permission denied
│ 
│ 
│ 
│   with provider["registry.terraform.io/hashicorp/vault"],
│   on providers.tf line 23, in provider "vault":
│   23: provider "vault" {

我的配置有什么问题吗?

Terraform version ">= 0.13"
Vault provider version "3.7.0"
terraform hashicorp-vault vault hashicorp
3个回答
4
投票

此问题源于 Vault 提供程序需要创建中间/子令牌,由于 Terraform 提供程序中的策略设置方式,该令牌没有权限,因此它始终会失败。

在最新版本中,他们引入了

skip_child_token
选项来解决这个问题。 (https://github.com/hashicorp/terraform-provider-vault/issues/29#issuecomment-988121638

此外,似乎有一个未记录的要求将命名空间放置在

provider
auth_login
块中,如果我不将它们都添加,我会收到 403 错误。

provider "vault" {
  address = var.vault_address
  namespace = "admin"
  skip_child_token = true

  auth_login {
    path = "auth/approle/login"
    namespace = "admin"

    parameters = {
      role_id   = var.cms_vault_role_id
      secret_id = var.cms_vault_secret_id
    }
  }
}

1
投票

403错误不是来自路径

auth/approle/login
,而是来自
auth/token/create

Terraform 将尝试在环境中找到现有令牌时创建子令牌。我认为您的脚本正在获取旧令牌,并且在到达您的代码之前就失败了。

尝试这个(适应您的环境):

  1. 从令牌助手中删除令牌 (
    rm -v ~/.vault-token
    )
  2. 清除token环境变量(
    unset VAULT_TOKEN
    )
  3. 使用
    vault print token
  4. 调试您的配置

0
投票

需要更新与给定身份验证关联的策略,以便它可以创建子令牌。将策略与您的 appRole 相关联。

路径“auth/token/create”{
功能= [“创建”,“更新”,“sudo”]
}

不鼓励使用

skip_child_token
,应将其作为最后的手段。

© www.soinside.com 2019 - 2024. All rights reserved.