PowerShell:我如何判断用户是否有权从Azure密钥库读取机密



我正在编写一个脚本,需要确定密钥库中是否存在秘密。剧本的很多逻辑都与这个事实有关。

我遇到的问题是,我的脚本无法区分不存在的秘密和用户无法读取的秘密

我用来获取秘密的代码如下:

$secret = Get-AzKeyVaultSecret -VaultName $vaultName -Name $secretName

Get-AzKeyVaultSecret命令集:

  1. 如果机密存在并且可以读取,则返回机密
  2. 如果密钥不存在,但允许用户从密钥库中读取,则返回$null
  3. 如果不允许用户从密钥库中读取,则返回$null并写入控制台的错误文本

问题是我(在代码中(无法区分后两者。commandlet没有抛出异常,错误文本似乎也没有写入标准流,在那里我可以使用Out-String或类似的方法重定向它。

有人能推荐我如何区分上述条件2(和3(吗?

只需用ErrorActionStop 将其包裹在try-catch中

try{
$secret = Get-AzKeyVaultSecret -VaultName $vaultName -Name $secretName -ErrorAction Stop
}
catch
{
write-host "Cannot read secrets!"
}

关于条件2,我在$secret.count -eq 0时抛出异常。条件3的状态码是"0";403〃;,所以我用$exception.Response.StatusCode.value__来捕捉它。

$vaultName=""
$secretName=""
try{
$secret = Get-AzKeyVaultSecret -VaultName $vaultName -Name $secretName -ErrorAction Stop
if($secret.count -eq 0){
throw [Microsoft.Azure.KeyVault.Models.KeyVaultErrorException] "$secretName secret not found."
}
}
catch
{
$exception = $_.Exception
while ($exception.GetType().FullName -eq "Microsoft.Azure.KeyVault.Models.KeyVaultErrorException") {
if($exception.Response.StatusCode.value__ -eq "403") {
write-output "user is not allowed."
} else {
write-output "secret not found."
}
break
}  
}

最新更新