Я настраиваю функцию Powershell Azure, которой нужны ключи из Azure KeyVault. Большинство ключей можно получить с помощью метода @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
Ожидаемый результат: код извлекает ключ.
Actual output: ERROR: Operation returned an invalid status code 'Unauthorized' Microsoft.Azure.WebJobs.Script.Rpc.RpcException : Result: ERROR: Operation returned an invalid status code 'Unauthorized' Exception: Operation returned an invalid status code 'Unauthorized' Stack: at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretWithHttpMessagesAsync(String vaultBaseUrl, String secretName, String secretVersion, Dictionary`2 customHeaders, CancellationToken cancellationToken) dlet.ProcessRecord()
Взято из Microsoft: https://docs.microsoft.com/en-us/azure/key-vault/quick-create-powershell
Вы пробовали точечную нотацию при извлечении этих ключей?
(Get-AzKeyVaultSecret -vaultName $VaultName -name $KeyName).SecretValueText
Если это не сработает, вы можете просмотреть эту проблему github, касающуюся ManagedAppServices: https://github.com/Azure/azure-powershell/issues/8983.
Похоже, у вас та же проблема.
Кроме того, обратитесь к этому связь, если у вас возникнут проблемы из-за того, что secretValueText
устарел.
Теперь для этого есть новый метод.
$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
Исходная ошибка теперь исправлена в Функциях Azure.
По-прежнему необходимо извлекать ключи, которые часто обновляются в хранилище ключей. Для этого я использую это:
(Get-AzKeyVaultSecret MyVaultName -Name MySecretName).secretvalue | ConvertFrom-SecureString -AsPlainText
«ConvertFrom-SecureString: не удается найти параметр, соответствующий имени параметра AsPlainText».
Какая у вас версия? docs.microsoft.com/en-us/powershell/module/…
Версия Powershell: 5.1.19041.906
да. Это проблема, с которой я столкнулся. Спасибо, что указали мне на правильную ошибку :-)