it-roy-ru.com

Как автоматически сопоставить секреты функций Azure из хранилища ключей

Мне было интересно, можно ли инициализировать триггер очереди или даже триггер BLOB-объекта со строки подключения, считываемой из хранилища Azure. 

Прямо сейчас мы должны установить соединение для передачи данных через настройки среды через свойства блейда. Однако я хотел просто использовать субъект-службу для получения токена для хранилища ключей Azure, чтобы получить все эти строки подключения.

Я пытаюсь понять, как заставить это работать на Java.

Спасибо, Дерек

4
darewreck

Эта функция отслеживается и выполняется здесь:

РЕДАКТИРОВАТЬ 28/11/2018: он в настоящее время в предварительном просмотре

Прежний ответ 07/10/2018 Это решение не будет работать для триггеров, использующих план потребления.

В то же время я провел некоторое исследование вашей проблемы, и вы можете прочитать конфигурацию из хранилища ключей, если вы используете функцию Azure v2.

Я создал функции Azure v2 (.NET Standard) из Visual Studio.

Оно использует:

  • NETStandard.Library v2.0.3
  • Microsoft.NET.Sdk.Functions v1.0.22
  • Microsoft.Azure.WebJobs v3.0.0
  • Microsoft.Azure.WebJobs.Extensions.Storage v3.0.0

Поскольку Azure Functions v2 использует ядро ​​ASP.NET, я смог сослаться на эту ссылку, чтобы настроить приложение функций для использования хранилища ключей Azure:

поставщик конфигурации хранилища ключей Azure в ASP.NET Core

  1. Я добавил этот пакет Nuget:

Я настроил свое приложение для использования этого пакета nuget:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;

[Assembly: WebJobsStartup(typeof(FunctionApp1.WebJobsExtensionStartup), "A Web Jobs Extension Sample")]
namespace FunctionApp1
{
    public class WebJobsExtensionStartup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            // Gets the default configuration
            var serviceConfig = builder.Services.FirstOrDefault(s => s.ServiceType.Equals(typeof(IConfiguration)));
            var rootConfig = (IConfiguration)serviceConfig.ImplementationInstance;

            // Creates a new config based on the default one and adds the keyvault configuration builder
            var keyvaultName = rootConfig["keyVaultName"];
            var config = new ConfigurationBuilder()
                .AddConfiguration(rootConfig).AddAzureKeyVault($"https://{keyvaultName}.vault.Azure.net/").Build();

            // Replace the existing config
            builder.Services.AddSingleton<IConfiguration>(config);
        }
    }
}

Мои функции Azure используют MSI:

 Azure Functions - Managed Service Identity

Я предоставил разрешения на чтение/список секретов приложению-функции в моем хранилище ключей:

У меня есть небольшая функция, вызванная очередью:

public static class Function2
{
    [FunctionName("Function2")]
    public static void Run([QueueTrigger("%queueName%", Connection = "queueConnectionString")]string myQueueItem, ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    }
}

queueName определяется в файле local.settings.json (блейд параметров приложения после развертывания):

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "keyVaultName": "thomastestkv",
    "queueName": "myqueue"
  }
}

queueConnectionString настроен в моем keyvault:

 Azure Key Vault - Secrets

8
Thomas

Я только что реализовал это в Java, следуя ниже двум ссылкам.

  1. https://docs.Microsoft.com/en-us/Azure/app-service/app-service-key-vault-references

  2. https://medium.com/statuscode/getting-key-vault-secrets-in-Azure-functions-37620fd20a0b

в Java используйте System.getenv ("SECRET_KEY"), чтобы прочитать значения из настроек вашего приложения.

Рад помочь, если вам нужна дополнительная помощь.

0
T D

Это было выпущено как preview пару дней назад.

Для этой функции требуется назначенная системой управляемая идентификация для вашего приложения. Позже в этом посте я буду говорить о пользовательских назначениях, но пока мы держим эти предварительные просмотры отдельно.

Затем вам нужно будет настроить политику доступа к вашему хранилищу ключей, которая дает вашему приложению разрешение GET для секретов. Узнайте, как настроить политику доступа.

Наконец, установите значение любого параметра приложения на ссылку следующего формата:

@ Microsoft.KeyVault (SecretUri = secret_uri_with_version)

Где secret_uri_with_version - полный URI для секрета в хранилище ключей. Например, это будет примерно так: https://myvault.vault.Azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931

Использование интеграции Keyvault во время выполнения функции

0
MrBrooks