如何禁用Azure KeyVault中密钥的旧版本仅保留最新版本启用
禁用Azure KeyVault密钥旧版本的实现方案
可以实现该需求,核心逻辑为遍历KeyVault下所有密钥,拉取单密钥全量版本后排除最新版本,将剩余旧版本批量修改为禁用状态即可,以下是三种工具的可落地实现方案:
PowerShell 实现
需提前安装Az.KeyVault模块,操作脚本如下:
# 替换为实际KeyVault名称 $keyVaultName = "<你的KeyVault名称>" # 拉取当前KeyVault下所有密钥 $allKeys = Get-AzKeyVaultKey -VaultName $keyVaultName foreach ($key in $allKeys) { # 拉取当前密钥所有版本,按创建时间降序排序 $keyVersions = Get-AzKeyVaultKey -VaultName $keyVaultName -Name $key.Name -IncludeVersions | Sort-Object Created -Descending # 跳过最新版本,禁用其余所有旧版本 for ($i = 1; $i -lt $keyVersions.Count; $i++) { Update-AzKeyVaultKey -VaultName $keyVaultName -Name $key.Name -Version $keyVersions[$i].Version -Enable $false } }
提示:正式执行前可将
Update-AzKeyVaultKey行替换为Write-Output $keyVersions[$i].Version,确认待禁用版本无误后再执行实际操作。
Azure CLI 实现
操作脚本如下:
# 替换为实际KeyVault名称 KEY_VAULT_NAME="<你的KeyVault名称>" # 拉取KeyVault下所有密钥名称 keys=$(az keyvault key list --vault-name $KEY_VAULT_NAME --query "[].name" -o tsv) for key in $keys; do # 拉取当前密钥所有版本,按创建时间降序排序后跳过第一个(最新)版本,提取剩余版本ID old_versions=$(az keyvault key list-versions --vault-name $KEY_VAULT_NAME --name $key --query "sort_by([], &created) | reverse() | [1:].kid" -o tsv) for version_kid in $old_versions; do # 从版本ID中提取版本号 version=$(echo $version_kid | awk -F '/' '{print $NF}') # 禁用旧版本 az keyvault key set-attributes --vault-name $KEY_VAULT_NAME --name $key --version $version --enabled false done done
Terraform 实现
仅适用于已通过Terraform管控的密钥,未纳入Terraform状态管理的存量密钥不建议使用该方式,避免状态不一致问题。
可通过配置密钥旋转策略限定仅保留最新版本启用,批量配置示例如下:
# 声明需要管理的密钥列表 variable "key_list" { type = list(string) default = ["key1", "key2", "key3"] } # 批量创建/管理密钥 resource "azurerm_key_vault_key" "batch_keys" { for_each = toset(var.key_list) name = each.value key_vault_id = azurerm_key_vault.your_kv.id key_type = "RSA" key_size = 2048 key_opts = ["decrypt", "encrypt", "sign", "unwrapKey", "verify", "wrapKey"] # 配置旋转策略,自动禁用旧版本 rotation_policy { automatic { time_before_expiry = "P30D" } expire_after = "P90D" retain_in_days = 7 notify_before_expiry = "P29D" } lifecycle { create_before_destroy = true } }
配置应用后,Terraform会自动将对应密钥的旧版本调整为禁用状态,仅保留最新版本可用。
注意事项
- 操作前建议对KeyVault完成全量备份,避免误操作导致业务受影响
- 如有业务系统明确依赖旧版本密钥,需先完成业务切流至新版本后再执行禁用操作
- 操作完成后可抽查部分密钥的版本状态,确认操作符合预期
内容的提问来源于stack exchange,提问作者Mukteswar Patnaik
相关产品推荐
相关产品推荐

