【问题标题】:How can I fix error writing to Vault: Error making API request如何修复写入 Vault 的错误:发出 API 请求时出错
【发布时间】:2020-12-17 22:15:38
【问题描述】:

当我运行+ terraform apply --auto-approve 时,我可以看到以下错误:

Error: error writing to Vault: Error making API request.

URL: POST http://host.docker.internal:8200/v1/sys/auth/approle
Code: 400. Errors:

* path is already in use at approle/

  on main.tf line 3, in resource "vault_auth_backend" "approle":
   3: resource "vault_auth_backend" "approle" {

这是来自main.tf的sn-p:

provider "vault" {}

resource "vault_auth_backend" "approle" {
  type = "approle"
}

我该如何解决?在本地我可以在开发模式下运行保管库服务器时看到同样的问题,我刚刚重新启动了解决问题的开发服务器,但现在我可以在运行 docker run 时看到问题。

【问题讨论】:

    标签: terraform hashicorp-vault


    【解决方案1】:

    path is already in use at approle/ 是这里的关键

    使用POST http://host.docker.internal:8200/v1/sys/auth/approle,我们可以推断您的 Terraform 状态还不知道 approle 路径上已经挂载了一个身份验证方法,因此它尝试创建它,而 Vault 拒绝该请求,因为该路径是已经用过了。

    上下文: 在 Vault 中,您安装了一种身份验证方法,例如approle,指向路径,例如approle/(它允许您多次挂载相同的身份验证方法,例如 Kubernetes 或 JWT 或 OIDC 方法在不同路径上多次挂载,以便每个新挂载都有特定于给定身份提供者的设置。这就是您可以使用 OIDC 的方式AzureAD 和 Google,或不同的 kubernetes 集群)

    回到你的问题,有几种方法可以解决这个问题:

    解决方案 1. 将 Terraform 状态与世界当前状态同步以迎头赶上

    出现错误是因为 Terraform(还没有!)意识到 approle 已经安装在 approle/ 上。 terraform refresh 可能会解决这个问题,但您更有可能必须手动将现有资源与 Terraform 状态“链接”terraform import vault_auth_backend.approle approle(参见 Vault provider documentation

    解决方案 2. 从干净的状态开始

    如果您的 approle/ 路径由于之前的测试而已被使用,您可以简单地从 Vault 中卸载它,以便 Terraform 正确地赶上。 vault auth disable approle/ 将删除现有的 approle 身份验证。 警告,如果approle 已用于真实身份验证,则现有角色、角色 ID 和机密 ID 将立即被撤销。仅当任何服务不依赖现有的 approle auth 方法时才这样做

    【讨论】:

    • 感谢您的回答。我希望使用 s3 后端有助于避免这种情况,但不知何故并没有,而且问题似乎只发生在保险库资源上。
    猜你喜欢
    • 2021-12-17
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-04-03
    相关资源
    最近更新 更多