如何清理Azure Key Vault中的旧版本过期密钥
清理Azure Key Vault中过期的动态令牌版本
手动清理(适合少量过期版本)
- 登录Azure Portal,找到目标Key Vault
- 进入对应存储令牌的页面:如果令牌存在「机密」中就选「机密」,存在「密钥」中就选「密钥」
- 点击目标令牌的名称,切换到「版本」标签页
- 勾选所有已过期且确认不再使用的版本,点击页面上方的「删除」按钮
- 若要彻底清除(跳过软删除保留期),需进入Key Vault的「已删除的机密/密钥」页面,找到对应版本后再次删除
Azure CLI批量清理(适合大量过期版本)
先列出所有过期的令牌版本(以机密为例):
az keyvault secret list-versions --vault-name <你的Vault名称> --query "[?attributes.expires < now()].{id:id, expires:attributes.expires}"
确认列表无误后,用脚本批量删除:
VAULT_NAME="你的Vault名称" # 导出所有过期机密版本的ID EXPIRED_SECRETS=$(az keyvault secret list-versions --vault-name $VAULT_NAME --query "[?attributes.expires < now()].id" -o tsv) # 循环删除每个过期版本 for SECRET_ID in $EXPIRED_SECRETS do az keyvault secret delete --id $SECRET_ID done
如果需要彻底清除软删除的版本,执行:
# 导出所有已删除的机密版本ID DELETED_SECRETS=$(az keyvault secret list-deleted --vault-name $VAULT_NAME --query "[].id" -o tsv) for SECRET_ID in $DELETED_SECRETS do az keyvault secret purge --id $SECRET_ID done
如果令牌存储在「密钥」中,将命令里的secret替换为key即可
PowerShell批量清理
$vaultName = "你的Vault名称" # 获取所有已过期的机密版本 $expiredSecrets = Get-AzKeyVaultSecret -VaultName $vaultName -IncludeVersions | Where-Object { $_.Attributes.Expires -lt (Get-Date) } # 批量删除过期版本 foreach ($secret in $expiredSecrets) { Remove-AzKeyVaultSecret -VaultName $vaultName -Name $secret.Name -Version $secret.Version } # 彻底清除软删除的版本(可选) $deletedSecrets = Get-AzKeyVaultSecret -VaultName $vaultName -InRemovedState foreach ($secret in $deletedSecrets) { Remove-AzKeyVaultSecret -VaultName $vaultName -Name $secret.Name -Version $secret.Version -InRemovedState -Force }
自动清理(长期解决方案)
- 创建Azure函数,设置定时触发规则(比如每日执行一次)
- 在函数中编写逻辑:调用Azure SDK或上述CLI/PowerShell脚本,自动检测并删除过期的令牌版本
- 为Azure函数分配Key Vault的「机密删除」「机密清除」(若需要彻底清除)权限
注意事项
- 操作前务必确认所有待删除的过期版本不会再被业务逻辑调用,删除后无法恢复(彻底清除后永久丢失)
- Key Vault默认软删除保留期为90天,若不需要可在Vault设置中缩短,但建议保留一定时长以防误删
内容的提问来源于stack exchange,提问作者Deepak Shaw
相关产品推荐
相关产品推荐

