Autenticar e autorizar o Serviço de Aplicativo para o Azure OpenAI usando o Microsoft Entra e o SDK do Kernel Semântico
Este artigo demonstra como usar identidades gerenciadas pelo Microsoft Entra, para autenticar e autorizar um aplicativo do Serviço de Aplicativo para um recurso do Azure OpenAI.
Este artigo também demonstra como usar o SDK do kernel semântico para implementar facilmente a autenticação do Microsoft Entra em seu aplicativo .NET.
Usando uma identidade gerenciada do Microsoft Entra, seu aplicativo do Serviço de Aplicativo pode acessar facilmente recursos protegidos do Azure OpenAI sem precisar provisionar ou girar manualmente quaisquer segredos.
Pré-requisitos
- Uma conta do Azure que tenha uma assinatura ativa. Crie uma conta gratuitamente.
- SDK do .NET
Microsoft.SemanticKernel
Pacote NuGetAzure.Identity
Pacote NuGet- Criar e implantar um recurso do Serviço OpenAI do Azure
- Criar e implantar um aplicativo .NET no Serviço de Aplicativo
Adicionar uma identidade gerenciada ao Serviço de Aplicativo
Pode conceder dois tipos de identidades à aplicação:
- Uma identidade atribuída pelo sistema está associada à aplicação e será eliminada se a aplicação for eliminada. Um aplicativo pode ter apenas uma identidade atribuída ao sistema.
- Uma identidade atribuída pelo utilizador é um recurso autónomo do Azure que pode ser atribuído à aplicação. Uma aplicação pode ter várias identidades atribuídas pelo utilizador.
Adicionar uma identidade atribuída ao sistema
- Navegue até a página do seu aplicativo no portal do Azure e role para baixo até o grupo Configurações.
- Selecione a Identidade.
- Na guia Sistema atribuído, alterne Status para Ativado e selecione Salvar.
Execute o comando para criar uma identidade atribuída ao az webapp identity assign
sistema:
az webapp identity assign --name <appName> --resource-group <groupName>
Adicionar uma identidade atribuída pelo usuário
Para adicionar uma identidade atribuída pelo usuário ao seu aplicativo, crie a identidade e adicione seu identificador de recurso à configuração do aplicativo.
Crie um recurso de identidade gerenciado atribuído pelo usuário seguindo estas instruções.
No painel de navegação esquerdo da página da sua aplicação, desloque-se para baixo até ao grupo Definições .
Selecione a Identidade.
Selecione Adicionar atribuído ao> usuário.
Localize a identidade que criou anteriormente, selecione-a e, em seguida, selecione Adicionar.
Importante
Depois de selecionar Adicionar, o aplicativo é reiniciado.
Crie uma identidade atribuída pelo usuário:
az identity create --resource-group <groupName> --name <identityName>
Atribua a identidade ao seu aplicativo:
az webapp identity assign --resource-group <groupName> --name <appName> --identities <identityId>
Adicionar uma função de usuário do Azure OpenAI à sua identidade gerenciada
- No Portal do Azure, navegue até o escopo ao qual você deseja conceder acesso ao Azure OpenAI . O escopo pode ser um grupo de gerenciamento, assinatura, grupo de recursos ou um recurso específico do Azure OpenAI .
- No painel de navegação esquerdo, selecione Controle de acesso (IAM).
- Selecione Adicionar e, em seguida, selecione Adicionar atribuição de função.
- Na guia Função, selecione a função Usuário do OpenAI dos Serviços Cognitivos.
- Na guia Membros, selecione a identidade gerenciada.
- No separador Rever + atribuir, selecione Rever + atribuir para atribuir a função.
Âmbito do recurso
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"
Âmbito do grupo de recursos
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
Âmbito da subscrição
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>"
Âmbito do grupo de gestão
az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupName>"
Implementar autenticação baseada em token usando o SDK do Kernel Semântico
Inicialize um
DefaultAzureCredential
objeto para assumir a identidade gerenciada do seu aplicativo:// Initialize a DefaultAzureCredential. // This credential type will try several authentication flows in order until one is available. // Will pickup Visual Studio or Azure CLI credentials in local environments. // Will pickup managed identity credentials in production deployments. TokenCredential credentials = new DefaultAzureCredential( new DefaultAzureCredentialOptions { // If using a user-assigned identity specify either: // ManagedIdentityClientId or ManagedIdentityResourceId. // e.g.: ManagedIdentityClientId = "myIdentityClientId". } );
Crie um
Kernel
objeto que inclua o Serviço de Conclusão de Chat do Azure OpenAI e use as credenciais criadas anteriormente:// Retrieve the endpoint and deployment obtained from the Azure OpenAI deployment. // Must use the deployment name not the underlying model name. IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]!; string deployment = config["AZURE_OPENAI_GPT_NAME"]!; // Build a Kernel that includes the Azure OpenAI Chat Completion Service. // Include the previously created token credential. Kernel kernel = Kernel .CreateBuilder() .AddAzureOpenAIChatCompletion(deployment, endpoint, credentials) .Build();
Use o objeto para invocar a conclusão de prompt por meio do
Kernel
Azure OpenAI:// Use the Kernel to invoke prompt completion through Azure OpenAI. // The Kernel response will be null if the model can't be reached. string? result = await kernel.InvokePromptAsync<string>("Please list three Azure services"); Console.WriteLine($"Output: {result}"); // Continue sending and receiving messages between the user and AI. // ...