我正尝试使用以下步骤从Timer Triggered Powershell Azure功能应用访问密钥保管库密码。
在代码下方用于访问功能应用程序中的keyvault。
$NewTestSecret = Get-AzureKeyVaultSecret -VaultName FunctionAppTestKeyVault -Name TestSecret
$NewTestSecretVaule = $NewTestSecret.SecretValueText
Write-Output $NewTestSecretVaule
获取以下错误。不确定我缺少哪些额外步骤。 任何回复都非常感谢。
CategoryInfo:InvalidOperation :(:)
[Get-AzureKeyVaultSecret],PSInvalidOperationException
FullyQualifiedErrorId:InvalidOperation,Microsoft.Azure.Commands.KeyVault.GetAzureKeyVaultSecret 2018-04-14T17:45:00.709 [错误]执行函数时异常: Functions.TimerTriggerTestPowershell1。 Microsoft.Azure.WebJobs.Script: PowerShell脚本错误。 Microsoft.Azure.Commands.ResourceManager.Common:运行 登录AzureRmAccount登录。
答案 0 :(得分:1)
谢谢大家的回应。除了在功能应用程序中实现MSI之外,我使用下面的代码使用指纹证书从Powershell功能应用程序获取密钥保密。
Add-AzureRmAccount -CertificateThumbprint "***********" -Tenant "*********"
-ServicePrincipal -ApplicationId "**********"
$secret = Get-AzureKeyVaultSecret -VaultName "testkeyvault" -Name
"testSecret"
写输出$ secret.SecretValueText
还必须在应用程序设置下添加 WEBSITE_LOAD_CERTIFICATES appsetting才能将证书加载到功能应用程序中。
答案 1 :(得分:0)
我正尝试使用以下步骤从Timer Triggered Powershell Azure功能应用访问密钥保管库密码。
如果要使用Get-AzureKeyVaultSecret命令,则需要先登录Azure-AzureRmAccount。
默认情况下,Login-AzureRmAccount执行交互式登录,该登录无法在Azure功能中运行。相反,您需要使用服务主体登录,例如
Connect-AzureRmAccount -ServicePrincipal -ApplicationId "http://my-app" -Credential $pscredential -TenantId $tenantid
您可以从here获取更多信息。您还需要authorize the application to use the key or secret。
另一种方式:
您也可以使用MSI功能来执行此操作。我们可以从此document获取访问代码。您还需要添加权限以让azure函数访问keyvault。有关更多详细信息,请参阅此guide。
演示代码:
$vaultName = "Your key vault name"
$vaultSecretName = "your scecretname "
$tokenAuthURI = $Env:MSI_ENDPOINT + "?resource=https://vault.azure.net&api-version=2017-09-01"
$tokenResponse = Invoke-RestMethod -Method Get -Headers @{"Secret"="$env:MSI_SECRET"} -Uri $tokenAuthURI
$accessToken = $tokenResponse.access_token
$headers = @{ 'Authorization' = "Bearer $accessToken" }
$queryUrl = "https://$vaultName.vault.azure.net/secrets/" +$vaultSecretName + "?api-version=2016-10-01"
$keyResponse = Invoke-RestMethod -Method GET -Uri $queryUrl -Headers $headers