Как автоматически отобразить секреты функций Azure из хранилища ключей - PullRequest
0 голосов
/ 05 октября 2018

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

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

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

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

Ответы [ 5 ]

0 голосов
/ 30 мая 2019

Я уже дал свой ответ выше, этот ответ предназначен для комментария @Matt Sanders, я просто хочу объяснить, как MSI работает в среде Azure,

" У меня 2 назначенных пользователя, 1 имеет разрешения для KeyVault, а другой - нет. Как указать правильного пользователя, которому назначена идентификационная информация для использования при извлечении секрета? Я предполагаю, что это невозможно, и назначенные пользователем идентификаторы не поддерживаются, даже если они перечислены вваш ответ. - Мэтт Сандерс"

, если вы хотите использовать Azure Manage Identity Service, ваше приложение должно зарегистрироваться в Azure AD, например, скажем, несколько пользователей получают доступ к вашему веб-приложению и, в пределахваше веб-приложение, вы пытаетесь получить доступ к секретам vVault. В этом случае хранилище не заботится о пользователях, которые используют ваше приложение, оно заботится о приложении,

, пожалуйста, укажите ниже изображение,

enter image description here

Я, как показано на рисунке, только функция Azureдобавленные в качестве идентификатора в хранилище, другие приложения - нет,

, поэтому любой, кто использует функцию Azure, может получить доступ к секретам хранилища, в соответствии с этим примером только A и B могут получить доступ к секретам,

0 голосов
/ 22 марта 2019

Параметры приложения Sourcing из Key Vault Функция ссылок Key Vault позволяет вашему приложению работать так, как если бы оно использовало параметры приложения в том виде, в котором они были, то есть никаких изменений кода не требуется.Вы можете получить все подробности из нашей справочной документации по Key Vault, но я изложу основы здесь.

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

Затем вам нужно будет настроить политику доступа к вашему хранилищу ключей, которая предоставляет ваше приложение.ПОЛУЧИТЬ разрешение на секреты.Узнайте, как настроить политику доступа.

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

@Microsoft.KeyVault (SecretUri = secret_uri_with_version)

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

enter image description here

Вот и все!Никаких изменений в вашем коде не требуется!

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

Назначенные пользователем управляемые удостоверения (общедоступный предварительный просмотр) Наша существующая поддержка управляемых удостоверений называется назначением системы.Идея заключается в том, что удостоверение создается платформой для конкретного приложения и привязано к жизненному циклу приложения.Если вы удаляете приложение, удостоверение немедленно удаляется из Azure Active Directory.

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

enter image description here

подробнеепроверить это

0 голосов
/ 03 декабря 2018

Это было только что выпущено как Предварительный просмотр пару дней назад.

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

Затем вам нужно будет настроить политику доступа к вашему хранилищу ключей, которая предоставляет ваше приложение.ПОЛУЧИТЬ разрешение на секреты.Узнайте, как настроить политику доступа.

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

@Microsoft.KeyVault (SecretUri = secret_uri_with_version)

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

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

0 голосов
/ 18 декабря 2018

Я только что реализовал это в 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 голосов
/ 05 октября 2018

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

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

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

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

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

Используется:

  • 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

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

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

Я добавил этот пакет 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

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

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

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:

Azure Key Vault - Secrets

...