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

How can I fix error writing to Vault: Error making API request

当我 运行 + 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 的片段:

provider "vault" {}

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

我该如何解决?在本地,当 运行ning vault 服务器处于开发模式时,我可以看到同样的问题,我刚刚重新启动了解决问题的开发服务器,但现在我可以看到 运行ning [=15= 时的问题] 相反。

这里的 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 可能会解决这个问题,但您更有可能必须手动“link”具有 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 方法不被任何服务依赖时才执行此操作.