Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Key Vault предоставляет способ хранения учетных данных и других секретов с повышенным безопасностью. Код должен пройти аутентификацию в Key Vault, чтобы получить их. Управляемые удостоверения для ресурсов Azure решают эту проблему, предоставляя службам Azure автоматически управляемое удостоверение в Microsoft Entra ID. Ваш код использует эту идентичность для аутентификации в любой службе, которая поддерживает аутентификацию Microsoft Entra, включая Key Vault, не встраивая учетные данные в код.
В этом руководстве описано, как создать и развернуть веб-приложение Azure для Служба приложений Azure, а затем использовать управляемое удостоверение для проверки подлинности приложения в хранилище ключей с помощью клиентской библиотеки секретов Azure Key Vault для .NET и Azure CLI. Те же принципы применяются, если вы используете другой язык, Azure PowerShell или портал Azure.
Дополнительные сведения о веб-приложениях и развертывании службы приложений см. в следующем разделе:
- Обзор службы приложений
- Создайте веб-приложение ASP.NET Core в Служба приложений Azure
- Развертывание файлов в Службу приложений
Предпосылки
Чтобы завершить работу с этим руководством, вам потребуется:
- Подписка Azure. Создайте ее бесплатно.
- Пакет SDK .NET 8.0 или более поздней версии.
- Azure CLI или Azure PowerShell.
- Azure Key Vault. Хранилище ключей можно создать с помощью портала Azure, Azure CLI или Azure PowerShell.
- Хранилище ключей секрет. Секрет можно создать с помощью портала Azure, PowerShell или Azure CLI.
Если у вас уже есть веб-приложение, развернутое в Служба приложений Azure, перейдите к разделу "Настройка веб-приложения для подключения к Key Vault" и "Изменение приложения для доступа к key vault".
Создание приложения .NET Core
На этом шаге настройте локальный проект .NET.
В окне терминала создайте каталог с именем akvwebapp и переключитесь на него:
mkdir akvwebapp
cd akvwebapp
Создайте веб-приложение .NET с помощью команды dotnet new web:
dotnet new web
Запустите приложение локально, чтобы узнать, как он выглядит, прежде чем развертывать его в Azure:
dotnet run
Откройте приложение http://localhost:5000в веб-браузере. В примере приложения отображается сообщение "Hello World!".
Дополнительные сведения о создании веб-приложений см. в разделе "Создание веб-приложения ASP.NET Core" в Служба приложений Azure.
Развертывание приложения в Azure
На этом шаге разверните приложение .NET для Служба приложений Azure с помощью ZIP-развертывания. Zip-развертывание — это рекомендуемый механизм развертывания на основе пакетов для службы приложений. Для непрерывной доставки из системы контроля версий используйте вместо этого GitHub Actions или Azure DevOps Pipelines.
Создайте группу ресурсов
Создайте группу ресурсов для хранения хранилища ключей и веб-приложения с помощью az group create:
az group create --name "<resource-group>" --location "EastUS"
Создание плана службы приложений
Создайте план службы приложений с помощью az appservice plan create. В следующем примере создается план с именем myAppServicePlan в бесплатном (FREE) уровне:
az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE
Создание веб-приложения
Создайте веб-приложение Azure в myAppServicePlan плане.
Это важно
Как и в хранилище ключей, веб-приложение Azure должно иметь глобально уникальное имя. Замените <webapp-name> именем веб-приложения.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>"
Перейдите к новому приложению, чтобы подтвердить его выполнение:
https://<webapp-name>.azurewebsites.net
Вы увидите страницу по умолчанию для нового веб-приложения Azure.
Разверните локальное приложение с помощью zip-развертывания
В каталоге akvwebapp проекта создайте проект и создайте ZIP-файл развертывания:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
Tip
В Windows без zip используйте PowerShell: Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip
Разверните ZIP-файл в веб-приложении с помощью az webapp deploy:
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Обновите развернутое приложение в веб-браузере:
https://<webapp-name>.azurewebsites.net
Вы видите то же самое сообщение "Hello World!", которое вы видели в http://localhost:5000.
Настройка веб-приложения для подключения к Key Vault
В этом разделе описано, как разрешить веб-приложению получать доступ к Key Vault и обновлять код приложения для получения секрета.
Создание и назначение доступа к управляемому удостоверению
Используйте управляемое удостоверение для проверки подлинности веб-приложения для Key Vault. Управляемое удостоверение устраняет необходимость управлять учетными данными в коде.
Создайте удостоверение для приложения с помощью az webapp identity assign:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
Команда возвращает фрагмент JSON, аналогичный следующему:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Чтобы получить разрешения для хранилища ключей через Role-Based контроль доступа (RBAC), назначьте роль вашему "User Principal Name" (UPN) с помощью команды Azure CLI az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Замените <upn>, <subscription-id>а <vault-name> также фактическими значениями. Если вы использовали другое имя группы ресурсов, замените myResourceGroup. Ваше Уникальное Имя Пользователя (UPN) обычно имеет формат адреса электронной почты (например, username@domain.com).
Изменение приложения для доступа к хранилищу ключей
В этом руководстве используется клиентская библиотека секретов Azure Key Vault. Вы также можете использовать клиентскую библиотеку для сертификатов Azure Key Vault или клиентскую библиотеку для ключей Azure Key Vault.
Установка пакетов
В окне терминала установите клиентскую библиотеку для секретов Azure Key Vault и клиентскую библиотеку Azure Identity:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Обновление кода
Откройте Program.cs в вашем проекте akvwebapp.
Добавьте эти using директивы в начало файла:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Добавьте следующие строки перед вызовом app.MapGet, заменив <vault-name> на имя своего хранилища ключей. Этот код использует DefaultAzureCredential для аутентификации в Key Vault через управляемую идентичность веб-приложения. Дополнительные сведения см. в руководстве разработчика. Код также настраивает экспоненциальную задержку между повторными попытками на случай, если Key Vault начнёт ограничивать запросы. Дополнительные сведения об ограничениях транзакций см. в Azure Key Vault руководстве по регулированию.
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(), options);
KeyVaultSecret secret = client.GetSecret("<secret-name>");
string secretValue = secret.Value;
Обновите строку app.MapGet("/", () => "Hello World!"); следующим способом:
app.MapGet("/", () => secretValue);
Сохраните свои изменения.
Повторное развертывание веб-приложения
Пересоберите пакет развертывания и повторно разверните:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Переход на страницу готового веб-приложения
https://<webapp-name>.azurewebsites.net
Там, где раньше вы видели "Hello World!", теперь вы видите значение вашего секрета.