当使用 PowerShell 修补我的机密时,我包含此有效负载:
Payload: {
"path": "EncId",
"value": "MB34Changed"
}
对于此 URI:
https://ourvaulturi/v1/enginename/data/secretname
这是我的PS命令:
$response = Invoke-RestMethod -Headers $header -ContentType 'application/json' -Method PATCH -Uri $uri -Body $payload
(415) Unsupported Media Type error
我什至尝试了本页卷曲示例中使用的内容类型
application/merge-patch+json
:https://developer.hashicorp.com/vault/docs/commands/patch,这导致了错误:
(400) Bad Request
我不想使用 PUT,因为它会覆盖我的密钥中的所有值,而我只想更新单个值。
这里有什么想法或帮助吗?
更新。
运行 CLI,我能够使用此命令获得完整的补丁:
vault kv patch /enginename/secretname EncId=MB34Changed
如何将其转换为 PS Invoke-RestMethod 调用? 如果我将 URI 更改为
https://ourvaulturi/enginename/secretname
,
我收到 (404) 未找到。
看来,是的,URI 中需要 v1 和数据:
https://ourvaulturi/v1/enginename/data/secretname
需要在 header 中设置 Content-Type:
$header = @{
"X-Vault-Token"="$($env:VAULT_TOKEN)"
"X-Vault-Namespace"="$($env:VAULT_NAMESPACE)"
"Content-Type"="application/merge-patch+json"
}
有效负载需要格式化为:
$payload =
@{"data"=
@{"$($value)"="$($newvalue)"}
} | ConvertTo-Json
然后,Invoke-RestMethod 需要如下所示:
Invoke-RestMethod -Headers $header -Method PATCH -Uri $uri -Body $payload