Лучший способ внедрить Azure KeyVault в ASP. NET веб-сайт? - PullRequest
0 голосов
/ 29 апреля 2020

Я унаследовал старый пре-проектный стиль ASP. NET Веб-сайт (где вы просто открываете папку, а файл решения нет). Мне удалось преобразовать его в чуть более новый шаблон веб-сайта ASP. NET, так что теперь у меня есть файл решения. (После этого я пытался преобразовать его в веб-приложение, но оно прошло ужасно плохо - кажется, что потребуется перезапись, если я не испорчу, что всегда возможно).

Мы переносим это приложение, чтобы развернут через Azure DevOps Pipelines, и я немного застрял в том, как обрабатывать секреты (в частности, строки подключения). У нас уже есть хранилища ключей, настроенные для других приложений, и все это работает хорошо, но шаблон веб-сайта не имеет хорошей интеграции, как шаблон веб-приложения.

Теперь я мог бы просто поместить заполнители в веб-конфигурацию и использовать конвейер для замены значений на Key Vault, который будет работать просто отлично, но тогда локальная разработка не будет очень простой (им придется копировать / вставлять локальную веб-конфигурацию, я полагаю, каждый раз).

Кто-нибудь успешно делал это с веб-сайтом, или я просто пытаюсь заставить что-то работать со старой технологией, которая никогда не предназначалась для этого?

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

Хотя метод замены токенов очень удобен и прост в использовании в Azure devops конвейере, как вы упомянули, он доставляет много хлопот другим разработчикам (особенно для локальной разработки).

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


Позвольте мне взять один пример , чтобы объяснить это, ниже приведен простой web.config пример файла:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="apiConfig" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <apiConfig>
    <add key="ClientBasetUrl" value="http://localhost:4200" />
  </apiConfig>
  <system.web>
    <compilation debug="true" targetFramework="4.6.2">
      <assemblies>
        <add assembly="System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.6.1" maxRequestLength="20480" />
  </system.web>
</configuration>

Теперь мне нужно заменить значение ClientBasetUrl: http://localhost:4200 на http://localhost:8080.

1) Так как вас интересует, объедините Azure Key Vault с Asp. net веб-приложением, просто go и создайте один секрет ClientBasetUrl в Azure ключ Vault, и его значение составляет http://localhost:8080.

enter image description here

2) Подключение Azure хранилище ключей в azure Devops трубопровод.

3) Вот ключевой шаг: выполните настройку File Transform task.

steps:

- task: FileTransform@2

  displayName: 'File Transform with Variable: '

  inputs:

    folderPath: '$(System.DefaultWorkingDirectory)'

    xmlTargetFiles: MonoApp.config //Here put your config file name that relative to the root folder

Затем вы увидите, что замена успешно завершена после завершения этой задачи.

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

Кроме того, это может сделать меня go очень гладко на моей местной работе по разработке.

...