Tutorial: Protección de la conexión de Cognitive Service desde Python App Service mediante Key Vault

Azure App Service puede usar identidades administradas para conectarse a servicios back-end sin una cadena de conexión. Este enfoque elimina los secretos de conexión para administrar y mantener la conectividad de back-end segura en un entorno de producción. Al finalizar, tienes una aplicación que realiza llamadas programáticas a Foundry Tools sin almacenar secretos de conexión en App Service.

En el caso de los servicios back-end que no admiten identidades administradas y que todavía requieren secretos de conexión, puede usar Azure Key Vault para administrar secretos de conexión. En este tutorial se usan Las herramientas de Foundry como ejemplo. Una vez que haya terminado, tiene una aplicación que realiza llamadas programáticas a Foundry Tools sin almacenar secretos de conexión dentro de App Service.

Sugerencia

Foundry Tools admite la autenticación a través de identidades administradas. En este tutorial se usa la autenticación de clave de suscripción para demostrar cómo puede conectarse a un servicio de Azure que no admite identidades administradas desde App Service.

Diagrama que muestra el usuario que se conecta a un servicio, que, a su vez, se conecta a un almacén de claves para acceder a Cognitive Services.

En esta arquitectura:

  • Las identidades administradas protegen la conectividad con la bóveda de claves.
  • App Service accede a los secretos mediante las referencias de Key Vault como configuración de la aplicación.
  • El acceso al almacén de claves está restringido a la aplicación. Los colaboradores de la aplicación, como los administradores, pueden tener un control completo de los recursos de App Service y, al mismo tiempo, no tienen acceso a los secretos de Key Vault.
  • Si el código de la aplicación ya tiene acceso a los secretos de conexión con la configuración de la aplicación, no se requiere ningún cambio.

En este tutorial, aprenderá:

  • Habilitar identidades administradas
  • Uso de identidades administradas para conectarse a Key Vault
  • Uso de referencias de Key Vault
  • Acceder a Foundry Tools

Requisitos previos

Prepare el entorno para el Azure CLI.

Creación de una aplicación con conectividad con Las herramientas de Foundry

  1. Cree un grupo de recursos que contenga todos los recursos:

    # Save the resource group name as a variable for convenience
    groupName=myKVResourceGroup
    region=canadacentral
    
    az group create --name $groupName --location $region
    
  2. Cree un recurso de Foundry Tools. Reemplace <cs-resource-name> por un nombre único.

    # 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
    

    Nota:

    --sku F0 crea un recurso de Herramientas de Foundry de nivel gratuito. Cada suscripción está limitada a una cuota de un recurso TextAnalytics gratuito. Si ya ha usado la cuota, use --sku S en su lugar.

Configuración de Python aplicación

Clone el repositorio de ejemplo localmente e implemente la aplicación de ejemplo en App Service. Reemplace <app-name> por un nombre de aplicación único.

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/python
zip -r default.zip .

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

az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region --is-linux
az webapp create --resource-group $groupName --plan $appName --name $appName --runtime "python:3.14"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deploy --resource-group $groupName --name $appName --src-path ./default.zip

Los comandos anteriores:

  • Creación de un plan de App Service de Linux
  • Creación de una aplicación web de Python
  • Configuración de la aplicación web para instalar los paquetes de Python en la implementación
  • Cargue el archivo ZIP e instale los paquetes de Python.

Configurar secretos como ajustes de la aplicación

  1. Configure los secretos de Foundry Tools como ajustes de la aplicación CS_ACCOUNT_NAME y 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. En un explorador, vaya a la aplicación implementada en <app-name>.azurewebsites.net. Pruebe el detector de idioma escribiendo cadenas en varios idiomas.

    Captura de pantalla que muestra la aplicación de detector de idioma implementada en App Service.

    Si observa el código de la aplicación, la salida de depuración de los resultados de detección podría estar en el mismo color de fuente que el fondo. Puede ver la salida resaltando el espacio en blanco directamente debajo del resultado.

Conectividad de back-end segura

Los secretos de conexión ahora se almacenan como configuración de la aplicación en la aplicación de App Service. Este enfoque ya protege los secretos de conexión del código base de la aplicación. Sin embargo, cualquier colaborador que pueda gestionar su aplicación también puede acceder a la configuración de la aplicación. En esta sección, moveá los secretos de conexión a un almacén de claves. Puede restringir el acceso de modo que solo usted pueda gestionarlo y solo la aplicación de App Service pueda leerlo mediante su identidad administrada.

  1. Cree un Key Vault. Reemplace <vault-name> por un nombre de aplicación único.

    # 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
    

    El parámetro --enable-rbac-authorizationestablece el control de acceso basado en roles (RBAC) de Azure como el modelo de permisos. Esta configuración invalida todos los permisos de directivas de acceso de forma predeterminada.

  2. Otórguese a sí mismo el rol RBAC de Agente de secretos de Key Vault para el almacén.

    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. Habilite la identidad administrada asignada por el sistema para la aplicación y asígnele el rol RBAC de usuario de secretos de Key Vault para el almacén.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Agregue el nombre del recurso de Foundry Tools y la clave de suscripción como secretos a la bóveda, y guarde sus IDs como variables de entorno para el siguiente paso.

    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. Anteriormente, estableciste los secretos como configuraciones de la aplicación CS_ACCOUNT_NAME y CS_ACCOUNT_KEY. Ahora, en su lugar, defínalos como referencias del almacén de claves.

    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. En un explorador, vaya a <app-name>.azurewebsites.net otra vez. Si obtiene de nuevo los resultados de la detección, se está conectando al punto de conexión de Foundry Tools mediante referencias del almacén de claves.

Enhorabuena, la aplicación ahora se conecta a Foundry Tools mediante secretos guardados en el almacén de claves y no ha realizado ningún cambio en el código de la aplicación.

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no espera necesitar estos recursos en el futuro, elimine el grupo de recursos ejecutando el comando siguiente en el Cloud Shell:

az group delete --name $groupName

Este comando puede tardar un par de minutos en ejecutarse.