我在 Powershell 中编写了一个程序,该程序在 Azure Functions 应用程序中按计划运行。为了避免硬编码凭据,我创建了一个 Azure Key Vault 来存储机密。我在 Azure Function 中创建了一个托管标识,在 Azure Key Vault 中创建了机密,然后在 Azure Function 中创建了应用程序设置,使用 URL 指向 Azure Key Vault 中的机密。该程序引用应用程序机密 (APPSETTING) 并按预期运行:
$uSecret = $ENV:APPSETTING_SecretUsername
$pSecret = $ENV:APPSETTING_SecretPassword
$sasSecret = $ENV:APPSETTING_SecretSAS
$securePassword = ConvertTo-SecureString -String $pSecret -AsPlainText -Force
$UserCredential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $uSecret, $securePassword
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Run Code Online (Sandbox Code Playgroud)
但是我注意到,如果我通过 Windows Powershell(以管理员身份运行)在我的本地计算机上运行相同的程序,并按如下方式修改上述行,程序运行良好 - 这意味着它可以访问 Office 365 和数据湖存储:
$uSecret = (Get-AzKeyVaultSecret -VaultName 'auditkeyvault' -Name 'SecretUsername').SecretValueText
$pSecret …Run Code Online (Sandbox Code Playgroud)