Azure OpenIA RBAC Entra ID
AzureKeyCredential
Essas chaves são usadas para acessar a API dos serviços de IA do Azure. Não compartilhe suas chaves. Armazene-os com segurança — por exemplo, usando o Azure Key Vault, ou opte por identidades gerenciadas.
using Azure.AI.OpenAI;
using Azure;
using static System.Net.Mime.MediaTypeNames;
var text = "Eu tenho muintos poblemas com portuges";
var prompt = $"Realize a revisão ortográfica, para o seguinte texto: '{text}', e sumarize quais correções você fez";
Console.WriteLine(prompt);
var endpoint = new Uri("https://wsopenia.openai.azure.com/");
var credential = new AzureKeyCredential("...");
var client = new OpenAIClient(endpoint, credential);
var responseWithoutStream = await
client.GetChatCompletionsAsync(
new ChatCompletionsOptions()
{
DeploymentName = "gpt-35-turbo",
Messages = {
new ChatRequestSystemMessage(text)
},
Temperature = (float)0.3,
MaxTokens = 800,
NucleusSamplingFactor = (float)0.95,
FrequencyPenalty = 0,
PresencePenalty = 0,
});
ChatCompletions response = responseWithoutStream.Value;
var result = string.Join("\n", response.Choices.Select(_ => _.Message.Content));
Console.WriteLine($"## Text: {prompt} \n\n\n ## Result: {result} \n\n\n");
usando DefaultAzureCredential
Primeiro vamos instalar o pacote
install-packge Azure.Identity
A classe DefaultAzureCredential vai utilizar as identidades gerenciadas de aplicativos que serão implantados no Azure, no caso dos testes locais ele utilizara a identidade do usuário logado no Visual Studio. Mas quando estamos usando um AppService ele utilizaria a identidade gerenciada atribuída para aplicação. Esse mecanismo elimina necessidade de gerenciamento de credencias e chaves no código, Alem de permitir maior controle das Funções (roles) que serão atribuídas para a identidade.
Normalmente o gerenciamento de identidade gerenciada e feito em um menu de identidade do recurso e pode ser usado como System assigned ou seja tem o mesmo ciclo de vida do recurso e é único para o mesmo e User assigned tem um ciclo de vida independente e pode ser reaproveitado por outros recursos.
Para que isso possa funcionar adequadamente precisamos dar permissão ao recurso de openIA no menu IAM usando os controles de RBAC
Entidades gerenciadas podem ser usadas em Web apps, Functions, APIM, VMS etc. Caso não pertenta colocar a aplicação em nenhum desses recursos ainda assim pode usar a classe cliente ClientSecretCredential para experimentar as funções RBAC
using Azure.AI.OpenAI;
using Azure;
using static System.Net.Mime.MediaTypeNames;
using Azure.Identity;
var text = "Eu tenho muintos poblemas com portuges";
var prompt = $"Realize a revisão ortográfica, para o seguinte texto: '{text}', e sumarize quais correções você fez";
Console.WriteLine(prompt);
var endpoint = new Uri("https://wsopenia.openai.azure.com/");
//var credential = new DefaultAzureCredential();
var tenantId = "16b3c013-d300-468d...";
var clientId = "fde73550-0f60-4486-9c40-b4d982984f93";
var clientSecret = "...";
var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var client = new OpenAIClient(endpoint, credential);
var responseWithoutStream = await
client.GetChatCompletionsAsync(
new ChatCompletionsOptions()
{
DeploymentName = "gpt-35-turbo",
Messages = {
new ChatRequestSystemMessage(prompt)
},
Temperature = (float)0.7,
MaxTokens = 800,
NucleusSamplingFactor = (float)0.95,
FrequencyPenalty = 0,
PresencePenalty = 0,
});
ChatCompletions response = responseWithoutStream.Value;
var result = string.Join("\n", response.Choices.Select(_ => _.Message.Content));
Console.WriteLine($"## Text: {prompt} \n\n\n ## Result: {result} \n\n\n");
Referencias
- DefaultAzureCredential Class (Azure.Identity) — Azure for .NET Developers | Microsoft Learn
- Authenticate to Azure OpenAI the right way using Microsoft Entra ID (youtube.com)
- Azure Service Bus. visão geral, CLI , processo de… | by Wilson Santos | Medium
- Aumentando a segurança das suas aplicações no Azure com Managed Identities | by Wilson Santos | Medium