Tutorial: Conexão segura do Serviço Cognitivo do Serviço de Aplicativo .NET usando o Cofre da Chave

O Serviço de Aplicativo do Azure pode usar identidades gerenciadas para se conectar a serviços back-end sem uma cadeia de conexão, o que elimina segredos de conexão para gerenciar e mantém sua conectividade back-end segura em um ambiente de produção. Para serviços back-end que não suportam identidades gerenciadas e ainda exigem segredos de conexão, você pode usar o Cofre da Chave para gerenciar segredos de conexão. Este tutorial usa os serviços de IA do Azure como um exemplo para mostrar como isso é feito na prática. Quando terminar, você terá um aplicativo que faz chamadas programáticas para os serviços de IA do Azure, sem armazenar nenhum segredo de conexão dentro do Serviço de Aplicativo.

Gorjeta

Os serviços de IA do Azure dão suporte à autenticação por meio de identidades gerenciadas, mas este tutorial usa a autenticação de chave de assinatura para demonstrar como você pode se conectar a um serviço do Azure que não oferece suporte a identidades gerenciadas dos Serviços de Aplicativo.

Diagrama de arquitetura para cenário tutorial.

Com esta arquitetura:

  • A conectividade com o Cofre da Chave é protegida por identidades gerenciadas
  • O Serviço de Aplicativo acessa os segredos usando referências do Cofre de Chaves como configurações do aplicativo.
  • O acesso ao cofre de chaves é restrito ao aplicativo. Os colaboradores de aplicativos, como administradores, podem ter controle total dos recursos do Serviço de Aplicativo e, ao mesmo tempo, não ter acesso aos segredos do Cofre da Chave.
  • Se o código do seu aplicativo já acessar segredos de conexão com as configurações do aplicativo, nenhuma alteração será necessária.

O que você vai aprender:

  • Ativar identidades geridas
  • Usar identidades gerenciadas para se conectar ao Cofre da Chave
  • Utilizar as referências do Key Vault
  • Acessar os serviços de IA do Azure

Pré-requisitos

Prepare seu ambiente para a CLI do Azure.

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Criar aplicativo com conectividade com serviços de IA do Azure

  1. Crie um grupo de recursos para conter todos os seus recursos:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Crie um recurso de serviços de IA do Azure. Substitua <cs-resource-name> por um nome exclusivo de sua escolha.

    # Save resource name as 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 cria um recurso de serviços de IA do Azure de camada gratuita. Cada assinatura é limitada a uma cota de um recurso de nível TextAnalytics gratuito. Se você já tiver ultrapassado a cota, use --sku S em vez disso.

Configurar o aplicativo .NET

Clone o repositório de exemplo localmente e implante o aplicativo de exemplo no Serviço de Aplicativo. Substitua <app-name> por um nome exclusivo.

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

# Clone 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

Configurar segredos como definições da aplicação

  1. Configure os segredos dos serviços de IA do Azure como configurações CS_ACCOUNT_NAME do aplicativo e CS_ACCOUNT_KEY.

    # Get subscription key for Cognitive Services 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. No navegador, navegue até o aplicativo de implantação em <app-name>.azurewebsites.net e experimente o detetor de idiomas com cadeias de caracteres em vários idiomas.

    Captura de tela que mostra o aplicativo detetor de idioma implantado no Serviço de Aplicativo.

    Se você olhar para o código do aplicativo, você pode notar a saída de depuração para os resultados de deteção na mesma cor de fonte que o plano de fundo. Você pode vê-lo tentando destacar o espaço em branco diretamente abaixo do resultado.

Conectividade de back-end segura

No momento, os segredos de conexão são armazenados como configurações do aplicativo no seu aplicativo do Serviço de Aplicativo. Essa abordagem já está protegendo segredos de conexão da base de código do seu aplicativo. No entanto, qualquer colaborador que possa gerenciar seu aplicativo também poderá ver as configurações do aplicativo. Nesta etapa, você move os segredos de conexão para um cofre de chaves e bloqueia o acesso para que apenas você possa gerenciá-lo e somente o aplicativo do Serviço de Aplicativo possa lê-lo usando sua identidade gerenciada.

  1. Criar um cofre de chaves. Substitua <vault-name> por um nome exclusivo.

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

    O --enable-rbac-authorization parâmetro define o RBAC (controle de acesso baseado em função) do Azure como o modelo de permissão. Essa configuração, por padrão, invalida todas as permissões de políticas de acesso.

  2. Dê a si mesmo a função RBAC de Oficial de Segredos do Cofre de Chaves para o cofre.

    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 a identidade gerenciada atribuída ao sistema para seu aplicativo e atribua-lhe a função RBAC do Usuário de Segredos do Cofre de Chaves para o cofre.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Adicione o nome do recurso dos serviços de IA do Azure e a chave de assinatura como segredos ao cofre e salve suas IDs como variáveis de ambiente para a próxima etapa.

    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, você definia os segredos como configurações CS_ACCOUNT_NAME do aplicativo e CS_ACCOUNT_KEY no seu aplicativo. Agora, defina-os como referências de cofre de chaves.

    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. No navegador, navegue até <app-name>.azurewebsites.net novamente. Se você receber os resultados da deteção de volta, estará se conectando ao ponto de extremidade dos serviços de IA do Azure com referências de cofre de chaves.

Parabéns, seu aplicativo agora está se conectando aos serviços de IA do Azure usando segredos mantidos em seu cofre de chaves, sem nenhuma alteração no código do aplicativo.

Clean up resources (Limpar recursos)

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se achar que não vai precisar destes recursos no futuro, execute o seguinte comando no Cloud Shell para eliminar o grupo de recursos:

az group delete --name $groupName

Este comando pode demorar alguns minutos a ser executado.

Próximos passos