Руководство по безопасному подключению средств foundry из службы приложений .NET с помощью Key Vault

Служба приложений Azure может использовать управляемые удостоверения для подключения к бэкенд-сервисам без строки подключения. Этот подход устраняет необходимость управления секретами подключения и поддерживает безопасность соединений бэкэнда в рабочей среде. По завершении у вас есть приложение, которое выполняет программные вызовы средств Foundry, не сохраняя секреты подключения в службе приложений.

Для внутренних служб, которые не поддерживают управляемые удостоверения и по-прежнему требуют секретов подключения, можно использовать Azure Key Vault для управления секретами подключения. В этом руководстве в качестве примера используются средства Foundry. По завершении у вас есть приложение, которое выполняет программные обращения к Foundry Tools, не сохраняя секреты подключения в App Service.

Совет

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

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

При использовании этой архитектуры:

  • Управляемые удостоверения обеспечивают безопасное подключение к хранилищу ключей.
  • Служба App Service получает доступ к секретам, используя ссылки на Key Vault в качестве настроек приложения.
  • Доступ к хранилищу ключей открыт только приложению. Участники приложений, такие как администраторы, могут иметь полный контроль над ресурсами службы приложений и в то же время не имеют доступа к секретам Key Vault.
  • Если код приложения уже обращается к секретам подключения с использованием параметров приложения, никакое изменение не требуется.

Из этого руководства вы узнаете:

  • Включение управляемых идентификаций
  • Использование управляемых удостоверений для подключения к Key Vault
  • Использование ссылок на Key Vault
  • Доступ к инструментам литейного производства

Предварительные условия

Подготовьте среду для Azure CLI.

Создание приложения с подключением к средствам Foundry

  1. Создайте группу ресурсов для хранения всех ресурсов:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Создайте ресурс средств Foundry. Замените <cs-resource-name> уникальным именем.

    # Save the resource name as a variable for convenience. 
    csResourceName=<cs-resource-name>
    
    az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
    

    Примечание.

    --sku F0 создает ресурс Foundry Tools на бесплатном уровне. Для каждой подписки установлена квота на один ресурс уровня бесплатного тарифа TextAnalytics. Если вы уже использовали квоту, используйте --sku S вместо этого.

Настройка приложения .NET

Клонируйте пример репозитория локально и разверните пример приложения в Службе приложений. Замените <app-name> уникальным именем.

# Save the app name as a variable for convenience
appName=<app-name>

# Clone the sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/dotnet

az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region

Настройка секретов в качестве параметров приложения

  1. Настройте секреты средств Foundry как параметры приложения CS_ACCOUNT_NAME и CS_ACCOUNT_KEY.

    # Get the subscription key for the Foundry Tools resource
    csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv)
    
    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
    
  2. В браузере перейдите к развернутому приложению по адресу <app-name>.azurewebsites.net. Попробуйте детектор языка, введя строки на различных языках.

    Снимок экрана приложения детектора языка, развернутого в Службе приложений.

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

Защита внутреннего подключения

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

  1. Создайте хранилище ключей. Замените текст <vault-name> уникальным именем.

    # Save the key vault name as a variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    Параметр --enable-rbac-authorizationзадает управление доступом в Azure на основе ролей (RBAC) как модель разрешений. Этот параметр запрещает все разрешения политик доступа по умолчанию.

  2. Предоставьте себе роль Офицер по секретам Key Vault RBAC для хранилища.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query id --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Включите управляемое удостоверение, назначаемое системой для вашего приложения, и предоставьте ему роль RBAC Пользователь секретов Key Vault для хранилища ключей.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Добавьте имя ресурса Foundry Tools и ключ подписки в качестве секретов в хранилище и сохраните их идентификаторы в качестве переменных среды для следующего шага.

    csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv)
    csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
    
  5. Ранее секреты были заданы как параметры приложения CS_ACCOUNT_NAME и CS_ACCOUNT_KEY в приложении. Теперь их нужно задать в качестве ссылок на хранилище ключей.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    
  6. В браузере снова перейдите на <app-name>.azurewebsites.net. Если вы получите результаты обнаружения обратно, вы подключаетесь к конечной точке Foundry Tools с помощью ссылок на хранилище ключей.

Поздравляем, ваше приложение теперь подключается к средствам Foundry с помощью секретов, хранимых в хранилище ключей, и вы не внесите никаких изменений в код приложения.

Очистка ресурсов

На предыдущих этапах вы создали ресурсы Azure в группе ресурсов. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name $groupName

Эта команда может занять минуту на выполнение.