代码之家  ›  专栏  ›  技术社区  ›  SanthiRam

从Azure Powershell函数应用程序检索密钥vault机密时出错

  •  1
  • SanthiRam  · 技术社区  · 6 年前

    我正在尝试使用以下步骤从计时器触发的Powershell Azure函数应用程序访问密钥保管库机密。

    1. 已创建TimerTrigger Powershell函数应用程序。
    2. 已注册功能应用程序,广告应用程序处于快速模式。
    3. 已在功能应用中启用托管服务标识。
    4. 在同一资源组中创建了KeyVault,并在KeyVault AccessPolicys下添加了function app。
    5. 在keyvault secrets下创建了新机密。
    6. 以下代码用于访问function app中的keyvault。

      $NewTestSecret = Get-AzureKeyVaultSecret -VaultName FunctionAppTestKeyVault -Name TestSecret
      
      $NewTestSecretVaule = $NewTestSecret.SecretValueText
      
      Write-Output $NewTestSecretVaule
      

    获取以下错误。不确定我遗漏了哪些其他步骤。 非常感谢您的回复。

    类别信息:无效操作:(:)

    [获取AzureKeyVaultSecret],PSInvalidOperationException

    FullyQualifiedErrorId:InvalidOperation,Microsoft。蔚蓝色的命令。KeyVault。GetAzureKeyVaultSecret 2018-04-14T17:45:00.709[错误]执行函数时出现异常: 功能。TimerTriggerTestPowershell1。微软蔚蓝色的WebJobs。脚本: PowerShell脚本错误。 微软蔚蓝色的命令。ResourceManager。公用:运行 登录AzurerAccount以登录。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tom Sun    6 年前

    我正在尝试使用以下步骤从计时器触发的Powershell Azure函数应用程序访问密钥保管库机密。

    如果要使用Get-AzureKeyVaultSecret命令,则需要先登录AzureRmAccount。

    默认情况下,登录AzurerAccount执行 互动的 登录,这在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
    

    enter image description here

        2
  •  1
  •   SanthiRam    6 年前

    谢谢大家的回复。在函数应用程序中实现MSI的同时,我使用以下代码使用指纹证书从Powershell函数应用程序中获取keyvault机密。

    Add-AzureRmAccount -CertificateThumbprint "***********" -Tenant "*********" 
    -ServicePrincipal -ApplicationId "**********"
    
    $secret = Get-AzureKeyVaultSecret -VaultName "testkeyvault" -Name 
             "testSecret"
    

    写入输出$机密。SecretValue文本

    而且 网站\u加载\u证书 为了将证书加载到函数app中,必须在应用程序设置下添加appsetting。