Nano Hash - криптовалюты, майнинг, программирование

Объединение хранилища ключей Azure с конфигурацией приложения Azure

Я новичок в Azure и пытаюсь смоделировать реальную производственную среду. Итак, я развернул приложение .netcore 3.1 на ресурсе AppService. Это веб-приложение может получать конфигурацию от двух других сервисов - KeyVault и App Configuration. Я уже настроил удостоверение AppService.

  1. Я могу получить ключи от KeyVault, используя следующий код:

    var settings = config.Build();
    var web = settings["KeyVault:Name"];
    var clientId = settings["KeyVault:ClientId"];
    var clientSecret = settings["KeyVault:ClientSecret"];
    
    config.AddAzureKeyVault($"https://{web}.vault.azure.net/",
                            clientId,
                            clientSecret);
    
  2. Как я могу получить ключи из конфигурации приложения:

    var settings = config.Build();
    config.AddAzureAppConfiguration(settings["AppSettings:Endpoint"]);
    
  3. И я могу использовать их одновременно с помощью удостоверений и ключевой ссылки AppConfiguration.

    var settings = config.Build();
    config.AddAzureAppConfiguration(options =>
    {
        options
       .Connect(settings["AppSettings:Endpoint"])
       .ConfigureKeyVault(kv =>
       {
           kv.SetCredential(new DefaultAzureCredential());
       });
    });
    

Итак, мой вопрос касается фрагмента кода №3: ​​безопасно ли хранить значение AppSettings:Endpoint и appconfig.json в производственной среде? Для ясности я имею в виду это значение:

введите здесь описание изображения

Более того, я нашел здесь и объяснение того, как использовать эти две службы вместе. Но, во-первых, у меня это решение не работает - я получаю Azure.Identity.CredentialUnavailableException: 'ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.'. С другой стороны, он не понимает, где хранить значения AppSettings:AppConfiguration:Endpoint и AppSettings:Identity:ClientId, тогда это не отвечает на мой первый вопрос.

заранее спасибо


Ответы:


1

Краткий ответ - конечную точку https://[your_app_name].azconfig.io можно безопасно оставить где угодно. Он ничего не делает без других частей, составляющих строку подключения.

Длинный ответ - вы можете и, вероятно, должны хранить конфиденциальные части, строки подключения и их части, в Key Vault как секреты. Если вашему коду нужны эти значения, у вас есть варианты того, как получить эти значения. Рассмотрите возможность использования веб-конфигурации (это эквивалентно месту, которое обычно имеет секретные значения, но вместо этого помещает туда ссылки Key Vault. Ваш способ также работает. Имейте в виду, что ваш способ может потребовать изменения кода, если ваша конфигурация смещается с того, что вы закодировал.

Убедитесь, что ваша политика доступа на KV использует принципала службы вашего приложения. Повторяю, убедитесь, что ваша политика доступа на KV использует принципала службы вашего приложения. Скорее всего, ему потребуются только разрешения "список" и "получение" для секретов и НИЧЕГО ДРУГОГО.

Не храните секреты в своей веб-конфигурации или ее эквиваленте. Key Vault почти бесплатный, настолько дешевый. Я не развертываю приложения, пока они не получат собственное хранилище как часть решения.

Оставляйте комментарии, если это непонятно или нужны ссылки в Интернете.

05.06.2020
  • Ключ AppSettings: Endpoint относится к ConnectionString, выделенному на снимке экрана, который НЕ равен name.azconfig.io но это похоже на Endpoint = name.azconfig.io; Id = C. ..; Secret = 9 ... Я изменил свой код следующим образом, чтобы использовать обе службы: var client = new SecretClient(new Uri("https://name.vault.azure.net/"), new DefaultAzureCredential()); var a = client.GetSecret("AppSettings:Endpoint"); config.AddAzureAppConfiguration(a.Value); Источник 05.06.2020
  • Для тех, кто читает, приложение должно быть развернуто в Azure, поскольку оно использует удостоверения. 05.06.2020

  • 2

    Вы должны иметь возможность использовать удостоверение Azure Marange для подключения к конфигурации приложения. Используйте предварительную версию Azure.Identity.

    Пример c # https://github.com/nishanperera/Azure-App-Configuration-With-Key-Vault

    22.07.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..