AzApi资源ID与类型不匹配及密钥版本编辑问题求助
解决AzApi禁用Key Vault密钥版本的问题
问题分析
你遇到的两个错误核心原因如下:
- 第一个配置不匹配错误:ARM管理API不将密钥版本作为独立ARM资源管理,因此包含版本ID的
resource_id与指定的type无法匹配 - 第二个404错误:你使用了ARM管理端点(
management.azure.com)执行密钥版本操作,但这类操作需要直接调用Key Vault的专用端点({vault-name}.vault.azure.net)
Azure Key Vault的密钥版本状态修改,需通过Key Vault专用API而非ARM管理API完成。
正确配置示例
以下是调整后的azapi_resource_action配置,可在销毁阶段禁用指定密钥版本:
resource "azapi_resource_action" "disable_secret_version_on_destroy" { for_each = local.secrets # 指定Key Vault密钥资源类型,无需包含版本ID type = "Microsoft.KeyVault/vaults/secrets@2023-02-01" # resource_id格式:密钥基础路径(不含版本)+ 版本查询参数 resource_id = "${var.kv_id}/secrets/${each.value.secret_name}?api-version=7.4&version=${each.value.version}" method = "PATCH" when = "destroy" # 关键配置:禁用ARM管理端点,直接调用Key Vault专用API use_mgmt_endpoint = false body = jsonencode({ attributes = { enabled = false } }) }
关键说明
use_mgmt_endpoint = false:必须设置该参数,让AzApi直接调用Key Vault专用API,而非ARM管理APIresource_id格式:使用密钥的基础路径(不含版本),通过查询参数version指定要修改的版本,同时指定Key Vault API版本(如7.4)- 权限要求:执行操作的服务主体需拥有Key Vault的
Secret Permissions中的Set权限 body格式:用jsonencode确保格式合规,直接设置enabled = false即可禁用目标密钥版本
补充验证
你可通过以下格式在Postman中验证请求有效性:
- 请求URL:
https://{vault-name}.vault.azure.net/secrets/{secret-name}?api-version=7.4&version={version-id} - 请求方法:
PATCH - 请求体:
{"attributes": {"enabled": false}} - 认证方式:Azure AD OAuth2,需持有对应密钥操作权限
内容的提问来源于stack exchange,提问作者michasaucer
相关产品推荐
相关产品推荐

