从ADO管道复制Azure Key Vault禁用密钥时出错的技术求助
解决ADO管道复制Azure Key Vault禁用密钥的问题
核心问题
默认情况下,Get-AzKeyVaultSecret在ADO管道使用的服务主体身份下,不会返回已禁用的密钥——这就是你在本地门户登录能正常获取,但在管道中报错的原因,因为命令找不到禁用的密钥条目。
修复步骤
1. 修改脚本,显式获取所有状态的密钥
在调用Get-AzKeyVaultSecret时添加-IncludeDisabled参数,确保能读取到禁用的密钥,同时同步密钥的启用/禁用状态到目标库:
# 获取源库所有密钥(含禁用)的名称 $secretNames = (Get-AzKeyVaultSecret -VaultName $sourceKvName -IncludeDisabled).Name $secretNames.foreach{ Write-Host Processing Secret Name $_ # 获取单个密钥(含禁用)的完整信息 $sourceSecret = Get-AzKeyVaultSecret -VaultName $sourceKvName -Name $_ -IncludeDisabled # 复制密钥并保留原状态 Set-AzKeyVaultSecret -VaultName $newKvName -Name $_ -SecretValue $sourceSecret.SecretValue -Enabled $sourceSecret.Enabled }
2. 验证服务主体权限(可选)
虽然你提到ADO项目已有完全访问权限,但可以确认服务主体拥有Key Vault Secrets User或更高权限(如Key Vault Contributor),确保权限覆盖了读取禁用密钥的操作。不过添加-IncludeDisabled是解决问题的关键,因为即使权限足够,默认命令也不会返回禁用密钥。
内容的提问来源于stack exchange,提问作者Dmitriy Ryabin
相关产品推荐
相关产品推荐

