Этот прохождение предназначен для разработчиков, так и для операционных инженеров, которые стремятся получить больше практики практики с Azure.
Следуйте и выучите пошаговые, как интегрировать ресурс хранилища ключа ASURE с ASP .NET Core Web App работает в Azure App Service.
Вот что я прикрываю в этом видео:
- Создать ключ ресурс хранилища
- Добавить секреты к ключу
- Предоставление веб-приложения инфраструктура
- Создать управляемую службу
- Построить ASP .NET Core Web App
- Разверните и проверьте веб-приложение
Я снял это видео для нашего сообщества пару месяцев назад. Итак, могут быть некоторые незначительные различия пользовательских интерфейсов, но в целом вы получите суть концепции.
Полная стенограмма
Майк Пфефер: Итак, первое, что мы хотим сделать здесь для этой лаборатории, построить ключ Resault Resource здесь в облаке Azure. Так что я сделаю, это пойти, чтобы создать новый ресурс в портале И я собираюсь искать ключевое хранилище. Теперь, очевидно, мы могли бы построить этот ресурс через код, но я хочу быть в состоянии объяснить некоторые основы винограда в ключ. И это легче сделать, когда вы можете увидеть, что происходит. Таким образом, первое, что нам нужно сделать, это поставить этот ключ ресурс хранилища в группе ресурсов. Так что я сделаю, я создам новую группу ресурсов, и мы собираемся дать это имя И мы скажем, это наш ключевой ресурс хранилища для среды развития, поэтому я буду использовать эту конвенцию именования здесь, ключевым хранилищем DEV RG, скажем, в порядке. И тогда нам нужно дать имя в хранилище имя, и вы заметите здесь на этой информационной иконе, что имя хранилища должно содержать буквенно-цифровые символы и тире, и он не может начать с номера.
Mike Pfeiffer: причина, по которой имя хранилища будет частью имени хранилища, имени хоста, общедоступное имя хоста DNS, чтобы мы могли работать с API отдыха для ключа хранилища, и что мы собираемся сделать здесь просто добрым следовать соблюдению именования. Я буду использовать CS вроде как показатель. Это моя компания, облакоскиллы, как рода первая часть этого И тогда мы скажем, это ключевой ресурс хранилища для нашей среды развития -001. Так что делает его совершенно уникальным с точки зрения глобальных DNS. А потом что я сделаю здесь, я просто поставлю этот ключ ресурс хранилища в непосредственной близости от того, где я нахожусь.
Mike Pfeiffer: Наконец, ценовой уровень стандартный. Это то, с чем мы собираемся идти. Премиум версия, конечно, вы платите больше денег. Это дает вам возможность использовать клавиши поддерживаемых HSM. HSM — это аппаратные модули безопасности, и поэтому идея, что это то, что вы зашифруете свои ключи и ваши секреты в хранилище, используя аппаратный модуль, чтобы сделать это шифрование. Мы просто собираемся пойти со стандартом, потому что это даст нам безопасность, которую нам нужны. И с точки зрения политики доступа, если мы нажмеемся здесь, мои аккаунты, владелец этой азазубежной учетной записи станут лицом, который имеет полный контроль на данный момент. Позже я покажу вам, как делегировать доступ к вашему приложению к этому ресурсу. Это все, что нам нужно сделать. Давайте пойдем вперед и рассмотрим и создаем [неразборчиво 00:01:46] нашу проверку, чтобы убедиться, что мы ничего не связывались. Выглядит хорошо. Давайте пойдем вперед и создам этот ресурс, и это займет всего секунду. Так что давайте дадим это время для бега.
Майк Пфефер: Хорошо, а около 60 секунд спустя у меня теперь есть ключевой ресурс хранилища, поэтому я собираюсь отправиться на этот ресурс, просто чтобы посмотреть, и все выглядит хорошо. Мы видим, что у нас здесь есть имя DNS. Это то, что мы используем в нашем коде, чтобы взаимодействовать с ключом ресурса Vault. Давайте перейдем к следующему видео, и я покажу вам, как добавить секрет в этот ключ. До сих пор мы получили нашу ключевую инфраструктуру хранилища и готовую к работе, и все, что нам нужно сделать, это начать добавлять секреты здесь, что мы могли бы работать в нашем приложении. Поэтому я собираюсь перейти к секретам на левой стороне. Я собираюсь генерировать или импортировать, и эта опция загрузки будет ручной. То, что мы собираемся сделать здесь, вручную предоставляют секретное имя и значение.
Mike Pfeiffer: Мы также можем поставить сертификаты здесь в ключевом хранилище, но давайте сделаем это и сделаем это. Допустим, это будет какой-то секрет, который мы собираемся использовать в нашем приложении. Это будет пароль. Итак, мы скажем, это мой пароль, это имя секрета, а затем стоимостью, конечно, будет какая-то супер-секретная стоимость. Я просто собираюсь ввести что-то вроде пароля 01. И поэтому, очевидно, это значение — это то, что мы хотим не ударить из простого текста нашего исходного кода. Мы не хотим, что этот пароль будет работать в управление версиями, и мы хотим иметь возможность изменить пароль без перекомнигирования нашего кода. Так что используя этот секрет от хранилищ, сделает все эти вещи для нас. Давайте пойдем вперед и создадим этот секрет. И тогда, что мы можем сделать, здесь программно доступа к этому тесту, и мы можем просто сделать это с облачной оболочки. Так что, если мы ударим значок здесь, он собирается поднять облачную оболочку.
Майк Pfeiffer: Мы собираемся максимизировать это, чтобы мы могли видеть, что здесь происходит. И тогда давайте убедитесь, что шрифт немного больше. И теперь, когда мы здесь, мы можем начать выдачу команд для работы с любым Azure Service. Итак, позвольте мне очистить экран и давайте запустим Vault Key AZ с минусом H, чтобы получить помощь. Таким образом, вы можете увидеть, что когда вы запускаете команду Vault Vault az, есть подкоманды, и здесь есть эти другие команды, как если бы мы хотели создать ключ в хранилище или удалять, что мы хотим работать с подгруппами, мы хотим работать с Секретный подкоманд здесь. Таким образом, использование флага справки или флага минус H дает нам возможность увидеть, как работать с инструментом командной строки здесь и как работать с конкретными командами, которые нам понадобится. И поскольку мы знаем, что там есть секретная подкоманда, подобная там, давайте попробуем это, давайте сделаем ясно, и мы будем вернуться назад, и мы скажем, давайте помогим на этом подкоманде.
Майк Пфефер: Поэтому, когда мы запускаем секрет хранилища AZ Key, какой синтаксис оттуда? Так что теперь мы можем видеть, что подкоманда секретов также имеет команды. Как мы могли бы сделать резервные копии, мы могли бы удалить, мы можем прочитать все, что там, и тогда мы могли бы показать указанные секреты из данного ключа. Так что это интересно. Давайте очистим экран. Давайте сделаем еще один взгляд здесь. Мы сделаем некоторую помощь в команде Show, которая сидит под секретным подкомандом. И тогда вы можете видеть, как аргументы, которые нам придется поставлять. Поэтому нам нужно предоставить идентификатор секрета, который мы ищем или именем, а затем нам нужно указать имя хранилища. Итак, это отличная часть о CLI, вы можете буквально просто шагнуть через все эти команды, чтобы выяснить синтаксис.
Майк Пфефер: Но читаю помощь здесь, я должен быть в состоянии сделать это. Я должен быть в состоянии вверх по стрелке в мою предыдущую команду. Давайте избавимся от минус ч, а затем мы сделаем черту, как будто они говорят здесь, в помощь, или название секрета, которое был моим паролем. И тогда имя хранилища, которое является CS-KV-DEV-001. Итак, давайте пойдем вперед и нажмите Enter в эту команду, и вы можете увидеть, что вернул ответ. И внизу здесь в свойство Value этого объекта JSON, вы можете увидеть, что у меня есть свой супер сложный и безопасный пароль, который был получен из хранилища. Поэтому опять же, классная вещь с этим, что я могу изменить этот пароль в хранилище, и мой код может просто выйти и попросить текущее значение моего пароля.
Майк Пфефер: Так что теперь, когда мы видели, как создать ключ Result Resource, мы понимаем, как немного работать с секретами, давайте перейдем к следующему видео. Нам нужно развернуть инфраструктуру веб-приложений, которую мы собираемся использовать тест все это. Давайте пойдем вперед и построим инфраструктуру веб-приложения, которую нам нужно будет поддерживать эту практическую лабораторию. Таким образом, в портале Azure давайте перейдем к App Services, и мы построим новую службу приложений. Таким образом, нам понадобится план сервиса приложений и ресурс веб-приложения, работающий сверху. И давайте пойдем вперед и поставим это в новую группу ресурсов. Поэтому мы разделим наши ключевые ресурсы хранилища из наших ресурсов веб-приложений. Поэтому для нашей группы ресурсов мы скажем это как дальние веб-приложения для разработки. И, как и с ключом, нам нужно указать уникальное имя хоста, в этом случае, в этом случае AzureWebsites.net. Таким образом, сама приложение нужно уникальное имя. Поэтому я собираюсь использовать свой код компании.
Майк Пфефер: Так что это будет WebApp-001 для среды разработки. И так что выглядит хорошо. И движется по списку здесь для стека времени выполнения, я собираюсь идти вперед и выбрать .NET Core 2.2, мы сделаем Windows здесь. А потом для региона я собираюсь ударить выпад, и я собираюсь забрать Запад США, чтобы остаться последовательным. А потом внизу здесь это собирается создать план обслуживания приложений для меня. Теперь обратите внимание, что это дает этому штукатую сумасшедшее имя. Позвольте мне нажать на это, создайте новый. И вот здесь я буду следовать тому же схемами именования. Так что я сделаю свой код компании. Это будет план службы приложений для разработки -001, и это выглядит хорошо. И, вероятно, то, что я хочу сделать здесь, следует за той же конвенцией.
Майк Пфефер: Я должен был сделать это, и это на самом деле не имеет значения. Я просто пытаюсь остаться последовательным. Таким образом, независимо от того, что вы делаете, просто убедитесь, что у вас есть последовательную конвенцию именования для ваших ресурсов в Azure Documentation. Они полностью рассказывают вам все, о чем вы должны подумать с точки зрения названия ваших ресурсов. Но за пределы этого, проверяя размер перекоса здесь для этого плана службы приложений, инфраструктуру, которая включает в себя наш код, вы можете увидеть стандартную S1, и это в основном минимальный тип плана службы приложений, который мы хотим для производственного приложения. Это, вероятно, немного жестко для этой лаборатории, но это даст нам возможности сделать некоторые интересные вещи. Так что давайте пойдем вперед и придерживайтесь этого. А затем ударяю дальше здесь, я просто собираюсь отключить мониторинг на данный момент. Итак, давайте пойдем вперед и рассмотрим и создам этот ресурс веб-приложения, поэтому создайте наше первое веб-приложение и план обслуживания приложений.
Майк Пфефер: Тогда, конечно, мы могли бы сложить больше веб-приложений в верхней части плана сервиса приложений, который собирается построить как часть этого процесса. Но это должно занимать минутку или около того. Итак, давайте позвольте этому запуску, а затем мы проверим еще одну вещь, прежде чем перейдем к следующему шагу. Хорошо, и через пару секунд здесь вы можете увидеть, как развертывание удалось и давайте отправимся на этот ресурс веб-приложений. И мы должны видеть здесь наверху справа в конце концов, там есть, мы видим URL для веб-приложения. Таким образом, мы можем нажать на этот URL, выйдите, посмотрите. Все работает так далеко. Таким образом, у нас есть инфраструктура нашей веб-приложений, у нас есть наша ключевая инфраструктура хранилища. Следующим шагом в этой лаборатории — убедиться, что служба приложений может фактически поговорить с ключевой инфраструктурой хранилища. Давайте перейдем к следующему видео, и мы настроим это.
Mike Pfeiffer: Итак, давайте посмотрим на ресурсы, которые мы развернули до сих пор. Таким образом, глядя в моих ресурсных группах, эта оригинальная ресурсная группа была только для облачной оболочки. Этот здесь, конечно, для моей ключевой инфраструктуры хранилища. Если мы посмотрим здесь, вы можете увидеть, что у нас есть один ресурс, это ключ. И затем возвращаясь, посмотрите на группу ресурсов веб-приложений, у нас есть план службы приложений, а затем ресурс веб-приложений, который работает сверху этого плана обслуживания приложений. Таким образом, большой вопрос, как мы добиваемся в разрешения на сервис приложений, чтобы поговорить с ключом? И один из самых простых способов сделать это … На самом деле есть пара разных способов, которыми мы могли бы сделать это, но один из самых простых способов — войти в свойства веб-приложения и настроить то, что называется управляемой идентификацией службы.
Майк Пфефер: Поэтому вы увидите это в настройках здесь в своих свойствах веб-приложения. Итак, здесь обратите внимание, что он говорит, что назначенная система управляемая идентичность позволяет Azure Resource для аутентификации облачных сервисов, таких как ключ, не хранищая учетные данные в коде. Так что это даст нам по существу, как учетная запись услуг. Итак, мы включим это, нажмите «Сохранить» и скажи да И тогда мы можем делегировать разрешения на эту управляемую идентичность для доступа к ключу. Затем наше приложение может работать в этом контексте безопасности. И снова у нас нет ничего жесткого в курсе в нашем приложении. Так что теперь, когда это создал ресурс, управляемый идентификационный ресурс, который сейчас зарегистрирован с Azure AD, мы могли бы пойти к ключу. Давайте вернемся к группам ресурсов, отправляйтесь в ключ, и внутри ключевого хранилища мы можем перейти к политикам доступа в настройках. Так что именно здесь мы создадим разрешения.
Майк Пфефер: Так что прямо сейчас как владелец аккаунта, я единственный человек, который может работать с ключом. Итак, давайте добавим политику доступа. Мы пойдем вперед и настроем из шаблона, и все, что мы хотим сделать, это работать с секретами. Мы хотим иметь возможность вытащить секретные ценности из ключевого хранилища. Мы не работаем с ключами шифрования или что-то подобное, просто секреты. А потом посмотрите здесь, когда вы используете шаблон секретного управления, он собирается включить все эти варианты. Теперь одна из вещей, которые мы хотим сделать в облаке, и на самом деле в этом угодно, реализуют принцип наименее привилегии. Таким образом, если мое приложение просто нужно иметь возможность получить секрет и его значение, мне не нужно включать все эти другие вещи, такие как изменение его, удаление значения или удаление сама ключ, выполняя эти резервные копии. Мы просто хотим получить и список. Это все приложение должно сделать в этом сценарии.
Mike Pfeiffer: Теперь последняя часть этой политики доступа выбирает принцип безопасности, который будет иметь доступ. Поэтому, если мы придем здесь и начнем смотреть вокруг, мы могли просмотреть это, но я также могу ввести первую пару персонажей. Помните, что я позвонил My Web App CS Web App dev 001. Таким образом, это управляемая идентичность, в основном, учетная запись службы, которая была сгенерирована для веб-приложения, когда мы создали идентификатор управляемой службы. И это будет способ, которым мы добавляем возможности и разрешения к этому приложению для доступа к ключу. Итак, последняя критическая часть к этому шагу здесь, обратите внимание, вы должны нажать кнопку Сохранить. Кажется очевидным, но иногда это легко пропустить и все хорошо. Так что теперь, когда вся наша инфраструктура на месте, у нас есть все, что нам нужно.
Mike Pfeiffer: давайте перейдем на следующий шаг, и мы настроим приложение, которое мы можем в конечном итоге развернуть здесь в Azure. Давайте посмотрим на это .NET Основное веб-приложение, которое мы собираемся использовать для проверки интеграции ключа Vault с ядром ASP.NET. Итак, здесь, в Github под аккаунтами Azure образцы, есть этот репозиторий, называемый ключом-Vault-dotnet-Core-quepStart. Там будет ссылка на это чуть ниже этого видео на странице, где вы смотрите это видео. Но если вы хотите, вы всегда можете просто Google для этого. Это публичный репозиторий, и это выборки с открытым исходным кодом, созданным Microsoft. Таким образом, мы собираемся использовать этот код, и что мы собираемся сделать здесь, — это нажмите кнопку загрузки Cloner. Мы собираемся получить URL-адрес клона для работы с этим хранилищем.
Майк Пфефер: Так что на моем Mac, теперь, когда у меня это есть, я собираюсь отправиться сюда к терминалу. Я собираюсь начать в пустой папке, и я собираюсь сделать, чтобы получить клон на этом репозитории. Поэтому после того, как мы клонируем это, мы посмотрим. Мы можем переключиться в папку ключа здесь и внутри этой папки вы можете увидеть, что у нас есть решение с парой различных проектов. Здесь есть один, это в основном консольная приложение. Это проект веб-приложений. Так что давайте пойдем вперед и переключайтесь в ключевую папку хранилища там, а затем мы очистим экран, чтобы мы могли видеть, что мы работаем здесь. Итак, мы делаем список. Это просто веб-приложение ass.net Core Razor Pages. И давайте откроем это в Visual Studio Code. Итак, я нахожу код, а затем пространство, а затем период для текущей папки. И тогда, когда это придет, он просит нас восстановить наши зависимости и все наши необходимые активы. Итак, давайте нажмем это, чтобы восстановить.
Mike Pfeiffer: Теперь, когда мы получили это настроен, давайте пойдем вперед и закроем это и давайте посмотрим на этот файл запуска для этого приложения. Итак, здесь в Startup.cs Все выглядит довольно нормально. У нас есть наш метод Configure, ничего не происходит здесь. У нас есть поддержки NVC. Но если мы посмотрим на Program.cs и посмотрите на статический метод веб-хоста Static Build здесь, вы можете увидеть, что, поскольку мы настраиваем приложение, мы в основном впрыскиваем конфигурацию для хранилища ключа Azure. И поэтому одна из вещей, которые нам сначала нужно сделать для этого кода, и я буду немного поговорить об этом здесь, нам нужно подключить его в ключевом URL хранилища или имени хоста здесь, чтобы этот ресурс Vault получил. Итак, чтобы обновить свою память, возвращаясь по порталу, помните, что я позвонил Mine CS-KV-DEV-001. И снова навигации по ресурсу и глядя на DNS [день и 00:13:38] Это действительно то, что мы ищем здесь, и это будет очевидно, сообщите приложению, как работать с нашим ключевым ресурсом Vault.
Майк Пфефер: Так что я просто собираюсь обновить это. И тогда, конечно, это статит статический метод, который собирается вернуть ключевой URL-адрес хранилища, и это на самом деле используется здесь, так как мы настраиваем хост для приложения здесь. Теперь ключ к выполнению этой работы, когда вы используете метод Vault Key Vault Ad Azure, мы проходим в входящем, поэтому URL, а затем экземпляр клиента ключа Vault. Как вы можете увидеть здесь, что мы создаем новый ключ клиента Vault, мы настраиваем этот обратный вызов, и это будет в основном мощности и будет способ, которым идентификация управляемой службы способна аутентифицироваться на ключ. Как правило, когда вы делаете Ad Azure Key Hapale здесь, вы предоставляете входящие. И если вы использовали обратный вызов, как это, и управляемая идентификация службы, вы также укажете имя пользователя и пароль в качестве параметров.
Майк Пфефер: Но нам не понадобится, потому что мы выполняем управляемую службу идентичности. Так что выглядит хорошо. Так что я собираюсь спасти это. И тогда я собираюсь пойти на страницы и посмотреть на то, что о виду. И вы заметите здесь, что они оказывают некоторую информацию, когда кто-то отправляется на страницу о. Если мы посмотрим на код для этого, мы видим, что мы используем конфигурацию ядра ASP.NET, чтобы получить секрет в строке 23 здесь из ключа. Так что мой секрет был на самом деле назвал моим паролем. Так что я собираюсь обновить это здесь. И это одно из вещей, которые безумно круто о .Net Ядро, потому что при работе с конфигурацией ядра ASP.NET вы можете получить значения из настроек приложений в Azure App Service. И в этом случае, очевидно, мы собираемся работать с ключевыми значениями хранилища. Так что это безумно круто. Так что это выглядит хорошо, все сохранено, все было обновлено, и теперь, что мы могли бы сделать, это развернуть это приложение в Azure, и мы посмотрим на этот шаг в следующем видео в этой лаборатории.
Майк Пфефер: Поэтому, когда дело доходит до развертывания этого образца приложения, если вы используете Visual Studio, вы можете просто опубликовать прямо из визуальной студии. Я собираюсь опубликовать здесь внутри Visual Studio Code. На левой стороне вы можете увидеть, что у нас здесь есть значок Azure. У меня все установлены расширения приложений Service, я вписался на Azure, вы могли видеть здесь. Если вы устанавливаете все это впервые, вы можете перейти в палитру команд, а затем вы могли бы на самом деле ввести здесь Azure, войти в облако Azure. В основном, что произойдет, это браузер откроется, вам нужно будет ввести код для аутентификации, а затем вы будете подключены. Поэтому я уже сделал это, и вы можете увидеть, что теперь, когда я нахожусь на этом значке Azure, у меня есть расширение приложений, и я мог бы просто развернуть это приложение.
Майк Пфефер: Поэтому, когда я нажимаю на развертывание, я могу выбрать папку, в которой я или я могу также просматривать. Это была кодовая папка, с которой мы работаем, так что выглядит хорошо. Давайте нажмем на выбор. Перейдите и нажмите «Добавить конфигурацию здесь». А потом что мы собираемся сделать, мы собираемся развернуть в существующее веб-приложение. Итак, тот, который я построил пару шагов назад, CS Web App dev 001. Итак, мы пойдем вперед и скажем, да, мы собираемся развернуть, мы собираемся перезаписать все, что там, а потом мы просто пойдем вперед и скажу код студий, «да, мы всегда будем всегда развертывание этого ресурса. Итак, давайте давайте сделаем это секунду, чтобы развернуть, а затем посмотрим, что происходит дальше.
Майк Пфефер: Хорошо, и через минуту или около того, вы могли видеть вниз по правам на дно, он говорит, что развертывание было завершено, и теперь мы можем просмотреть сайт. Итак, давайте нажмем на обзор, откройте эту ссылку и здесь мы видим этот базовый интерфейс веб-приложений. И помните, если мы перейдем к странице, мы должны увидеть ценность, и там мы идем. На самом деле мы видим пароль 2001, и, конечно, приложение смогло сделать это, поскольку управляемая идентификация службы использовалась конфигурацией Core ASP.NET, чтобы выйти и получить это значение из ключа. Теперь это не единственный способ для вас интегрировать ядро ASP.NET с хранилищем ключа Azure. На самом деле есть что-то называемое ссылками на хранилище, сервис приложений, которая может быть использована, и это в предварительном просмотре И мы посмотрим на это в более поздней лаборатории. Давайте перейдем к последнему клипу в этой ручной лаборатории, и мы очистим окружающую среду.
Mike Pfeiffer: Теперь, когда мы завершили лабораторию, последнее, что нам нужно сделать, это войти и очистить все ресурсы. Поэтому, если вы используете облачную оболочку, вы можете не захотеть удалить вашу группу ресурсов, которая содержит хранилище для вашей облачной оболочки, так как вам может понадобиться. Но мы собираемся идти вперед и удалить как группы ресурсов. Итак, мы удалим один для хранилища ключей. И тогда что мы сделаем, это удалить один для веб-приложений. Итак, это все, что там, что там, веб-приложения, план обслуживания приложений, все такое такое вещество. Так что это выглядит хорошо. И теперь у нас есть удаление обстрела от тех, и теперь мы убрали окружающую среду. Так что это приведет нас к концу этой практической лаборатории интеграции веб-приложения ASP.NET Core с помощью хранилища ключа Azure.
Это было первоначально опубликовано: https://cloudskills.io/blog/aspnet-core-azurelkey-vault
Оригинал: «https://dev.to/cloudskills/integrate-an-asp-net-core-web-app-with-azure-key-vault-57l4»