如何修复写入 Vault 时出现的错误:发出 API 请求时出错

Ser*_* Vu 3 terraform hashicorp-vault

当我运行时,+ 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" {
Run Code Online (Sandbox Code Playgroud)

这是来自的片段main.tf

provider "vault" {}

resource "vault_auth_backend" "approle" {
  type = "approle"
}
Run Code Online (Sandbox Code Playgroud)

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

小智 6

path is already in use at approle/是关键

\n

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

\n

上下文:\n在 Vault 中,您将身份验证方法(例如)挂载approle到路径approle/(例如,它允许您多次挂载相同的身份验证方法,例如 Kubernetes 或 JWT 或 OIDC 方法在不同路径上挂载多次,以便每个新挂载具有特定于给定身份提供商的设置。这\xe2\x80\x99s 如何为 AzureAD 和 Google 或不同的 kubernetes 集群提供 OIDC)

\n

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

\n

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

\n

出现错误是因为 Terraform 还没有意识到它approle已经安装在approle/. Aterraform refresh可能会解决这个问题,但您更有可能必须手动将现有资源与 Terraform 状态“链接” terraform import vault_auth_backend.approle approle(请参阅​​ Vault 提供程序文档

\n

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

\n

如果您的approle/路径由于之前的测试而已被使用,您只需从 Vault 中卸载它,以便 Terraform 正确地跟上。vault auth disable approle/ 将删除现有的 approle 身份验证。\n警告,如果approle已用于真实身份验证,则现有角色、角色 ID 和秘密 ID 将立即撤销。仅当任何服务不依赖现有的 approle 身份验证方法\xe2\x80\x99 时才执行此操作

\n