如何在Powershell Azure Function 2.x中使用Get-AzKeyVaultSecret

时间:2019-05-18 07:20:45

标签: powershell azure-functions azure-keyvault

我正在设置需要来自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()

4 个答案:

答案 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