Tutorial: Proteger a ligação do Serviço Cognitivo a partir do .NET Serviço de Aplicações com Key Vault
Serviço de Aplicações do Azure pode utilizar identidades geridas para ligar a serviços de back-end sem uma cadeia de ligação, o que elimina segredos de ligação para gerir e mantém a conectividade de back-end segura num ambiente de produção. Para serviços de back-end que não suportam identidades geridas e ainda necessitam de segredos de ligação, pode utilizar Key Vault para gerir segredos de ligação. Este tutorial utiliza os serviços de IA do Azure como exemplo para lhe mostrar como é feito na prática. Quando terminar, tem uma aplicação que faz chamadas programáticas para os serviços de IA do Azure, sem armazenar segredos de ligação dentro de Serviço de Aplicações.
Dica
Os serviços de IA do Azure suportam a autenticação através de identidades geridas, mas este tutorial utiliza a autenticação da chave de subscrição para demonstrar como se pode ligar a um serviço do Azure que não suporta identidades geridas a partir dos Serviços de Aplicações.
Com esta arquitetura:
- A conectividade ao Key Vault é protegida por identidades geridas
- Serviço de Aplicações acede aos segredos com referências Key Vault como definições de aplicações.
- O acesso ao cofre de chaves está restrito à aplicação. Os contribuidores de aplicações, como os administradores, podem ter controlo total dos recursos Serviço de Aplicações e, ao mesmo tempo, não têm acesso aos segredos Key Vault.
- Se o código da aplicação já aceder a segredos de ligação com as definições da aplicação, não é necessária qualquer alteração.
O que irá aprender:
- Ativar identidades geridas
- Utilizar identidades geridas para ligar a Key Vault
- Utilizar as referências do Key Vault
- Aceder aos serviços de IA do Azure
Pré-requisitos
Prepare o seu ambiente para a CLI do Azure.
Utilize o ambiente bash no Azure Cloud Shell. Para obter mais informações, veja Início Rápido do 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, veja Como executar a CLI do Azure num contentor 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 início de sessão, veja Iniciar sessão com a CLI do Azure.
Quando lhe for pedido, 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 uma aplicação com conectividade aos serviços de IA do Azure
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
Criar um recurso dos serviços de IA do Azure. Substitua <cs-resource-name> por um nome exclusivo à 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 escalão gratuito. Cada subscrição está limitada a uma quota de um recurso de escalãoTextAnalytics
livre. Se já tiver ultrapassado a quota, utilize--sku S
em alternativa.
Configurar a aplicação .NET
Clone o repositório de exemplo localmente e implemente a aplicação de exemplo para Serviço de Aplicações. 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
Configure os segredos dos serviços de IA do Azure como definições de aplicações
CS_ACCOUNT_NAME
eCS_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"
No browser, navegue para a sua aplicação de implementação em
<app-name>.azurewebsites.net
e experimente o detetor de idiomas com cadeias em vários idiomas.Se observar o código da aplicação, poderá reparar na saída de depuração dos resultados da deteção na mesma cor do tipo de letra que o fundo. Pode vê-lo ao tentar realçar o espaço em branco diretamente abaixo do resultado.
Conectividade de back-end segura
De momento, os segredos de ligação são armazenados como definições da aplicação na sua aplicação Serviço de Aplicações. Esta abordagem já está a proteger segredos de ligação da base de código da aplicação. No entanto, qualquer contribuidor que possa gerir a sua aplicação também pode ver as definições da aplicação. Neste passo, vai mover os segredos de ligação para um cofre de chaves e bloquear o acesso para que apenas possa geri-lo e apenas a aplicação Serviço de Aplicações pode lê-lo com a respetiva identidade gerida.
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 controlo de acesso baseado em funções (RBAC) do Azure como o modelo de permissão. Por predefinição, esta definição invalida todas as permissões de políticas de acesso.Atribua a si mesmo a função RBAC Key Vault Secrets Officer 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
Ative a identidade gerida atribuída pelo sistema para a sua aplicação e atribua-lhe a função RBAC de Utilizador Key Vault Segredos para o cofre.
az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role "Key Vault Secrets User"
Adicione o nome de recurso e a chave de subscrição dos serviços de IA do Azure como segredos ao cofre e guarde os respetivos IDs como variáveis de ambiente para o próximo passo.
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)
Anteriormente, definia os segredos como definições
CS_ACCOUNT_NAME
da aplicação eCS_ACCOUNT_KEY
na sua aplicação. Agora, defina-as como referências do 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)"
No browser, navegue para
<app-name>.azurewebsites.net
novamente. Se receber resultados de deteção novamente, está a ligar-se ao ponto final dos serviços de IA do Azure com referências do cofre de chaves.
Parabéns, a sua aplicação está agora a ligar-se aos serviços de IA do Azure através de segredos mantidos no cofre de chaves, sem quaisquer alterações ao código da aplicação.
Limpar os 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.
Passos seguintes
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários