Azure OpenIA RBAC Entra ID

AzureKeyCredential

Wilson Santos
3 min readApr 15, 2024
wsopenia | Keys and Endpoint

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.

Código com a classe DefaultAzureCredential

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

  1. DefaultAzureCredential Class (Azure.Identity) — Azure for .NET Developers | Microsoft Learn
  2. Authenticate to Azure OpenAI the right way using Microsoft Entra ID (youtube.com)
  3. Azure Service Bus. visão geral, CLI , processo de… | by Wilson Santos | Medium
  4. Aumentando a segurança das suas aplicações no Azure com Managed Identities | by Wilson Santos | Medium

--

--

Wilson Santos
Wilson Santos

Written by Wilson Santos

Nos últimos 15 anos, venho desenvolvendo , aperfeiçoando e integrando sistemas, sou apaixonado por desenvolver e ensinar, nem tanto por escrever!.

No responses yet