我正在设置需要来自Azure KeyVault的密钥的Powershell Azure功能。可以使用@ Microsoft.KeyVault(SecretUri ='MySecretUriWithVersion')方法来检索大多数密钥。
其中一个键经常更改。因此,不能使用SecretUri。
所有按键都存储在同一个KeyVault中,并且该功能具有一个MSI,可以读取,列出和更改所有按键。
我正在使用需要更新的刷新令牌。每当我的代码运行并且需要在密钥库中更新时,此值都会更新
Connect-AzAccount -Identity
#Works
Get-AzKeyVault -VaultName $VaultName -ResourceGroupName $rgName
#Not working
Get-AzKeyVaultSecret -VaultName $VaultName -Name $KeyName
预期的输出:代码检索密钥。
实际输出:错误:操作返回了无效的状态码 '未经授权'Microsoft.Azure.WebJobs.Script.Rpc.RpcException: 结果:错误:操作返回了无效的状态码 “未经授权”异常:操作返回了无效的状态码 “未经授权”堆栈:位于 Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessagesAsync(String vaultBaseUrl,字符串secretName,字符串secretVersion,字典2 customHeaders,CancelationToken cancelToken) dlet.ProcessRecord()
答案 0 :(得分:2)
来自Microsoft:https://docs.microsoft.com/en-us/azure/key-vault/quick-create-powershell
在检索这些键时您是否尝试过点符号?
(Get-AzKeyVaultSecret -vaultName $VaultName -name $KeyName).SecretValueText
如果这不起作用,您可以查看有关ManagedAppServices的github问题:https://github.com/Azure/azure-powershell/issues/8983
似乎与您遇到的问题相同。
答案 1 :(得分:0)
此外,如果由于弃用secretValueText
而遇到任何问题,请参考此link。
答案 2 :(得分:0)
现在有一种新方法。
$secret = Get-AzKeyVaultSecret -VaultName "<your-unique-keyvault-name>" -Name "ExamplePassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText
参考:https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-powershell
答案 3 :(得分:0)
原始错误现已在 Azure Functions 中修复。
仍然需要检索密钥保管库中经常更新的密钥。为此,我使用了这个:
(Get-AzKeyVaultSecret MyVaultName -Name MySecretName).secretvalue | ConvertFrom-SecureString -AsPlainText