Я пытаюсь следовать этому https://azure.microsoft.com/en-us/blog/simplifying-security-for-serverless-and-web-apps-with-azure-functions-and-app-service/, чтобы безопасно получить секрет из моего хранилища ключей при использовании функций Azure.
В моем хранилище ключей есть политика доступа, которая позволяет получать секреты SYSTEM MANAGED IDENTITY
приложения функций.
Вот соответствующие настройки приложения, как показано в расширенном редакторе (не имеет значения, истинно или ложно slotSetting, уже пробовал. Не уверен, что он делает, кстати)
{
"name": "ultrasecret",
"value": "@Microsoft.KeyVault(SecretUri=https://<vault-name>.vault.azure.net/secrets/<secret-name>/<version>)",
"slotSetting": true
}
Вот шаблонная версия моей единственной функции. Взгляните на блок IF ниже, чтобы увидеть, как я запрашиваю хранилище ключей косвенно через переменную среды, которая раскрывает секрет хранилища ключей.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
$name = $Request.Body.Name
}
if ($name) {
$status = [HttpStatusCode]::OK
$secret = $env:ultrasecret
$body = "Hello $name $secret"
}
else {
$status = [HttpStatusCode]::BadRequest
$body = "Please pass a name on the query string or in the request body."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = $status
Body = $body
})
Когда я делаю запрос GET на
https://<function-app-name>.azurewebsites.net/api/HttpTrigger1?name=john
это то, что возвращается
Hello john @Microsoft.KeyVault(SecretUri=https://<vault-name>.vault.azure.net/secrets/<secret-name>/<version>)
По сути, я возвращаю буквальное значение параметра вместо секрета. Это потому, что предварительная версия поддерживает Powershell? У кого-нибудь еще это работает?
Любая помощь приветствуется.