如何修复写入 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 方法不被任何服务依赖时才执行此操作.
当我 运行 + 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 方法不被任何服务依赖时才执行此操作.