Introduzione al blocco predefinito di sicurezza Di Azure OpenAI
Questo articolo illustra come creare e usare l'esempio di blocco predefinito di sicurezza OpenAI di Azure. Lo scopo è illustrare il provisioning degli account OpenAI di Azure con il controllo degli accessi in base al ruolo per l'autenticazione senza chiave (Microsoft Entra ID) in Azure OpenAI. Questo esempio di app di chat include anche tutta l'infrastruttura e la configurazione necessarie per effettuare il provisioning delle risorse OpenAI di Azure e distribuire l'app in App Contenitore di Azure usando l'interfaccia della riga di comando per sviluppatori di Azure.
Seguendo le istruzioni riportate in questo articolo, potrai:
- Distribuire un'app di chat di Azure Container sicura.
- Usare l'identità gestita per l'accesso ad Azure OpenAI.
- Chattare con un modello di linguaggio Large Language Model (LLM) di Azure OpenAI usando la libreria OpenAI.
Dopo aver completato questo articolo, è possibile iniziare a modificare il nuovo progetto con il codice e i dati personalizzati.
Nota
Questo articolo usa uno o più modelli di app di intelligenza artificiale come base per gli esempi e le linee guida nell’articolo. I modelli di app di intelligenza artificiale offrono implementazioni di riferimento ben gestite e facili da distribuire per garantire un punto di partenza di alta qualità per le app di intelligenza artificiale.
Panoramica dell'architettura
Un'architettura semplice dell'app di chat è illustrata nel diagramma seguente:
L'app di chat viene eseguita come app contenitore di Azure. L'app usa l'identità gestita tramite Microsoft Entra ID per l'autenticazione con Azure OpenAI, anziché con una chiave API. L'app di chat usa Azure OpenAI per generare risposte ai messaggi utente.
L'architettura dell'applicazione si basa sui servizi e sui componenti seguenti:
- Azure OpenAI rappresenta il provider di intelligenza artificiale a cui si inviano le query dell'utente.
- App Azure Container è l'ambiente contenitore in cui è ospitata l'applicazione.
- L'identità gestita consente di garantire la sicurezza ottimale e di eliminare i requisiti per gli sviluppatori per gestire in modo sicuro un segreto.
- File Bicep per il provisioning delle risorse di Azure, tra cui Azure OpenAI, App Azure Container, Registro Azure Container, Azure Log Analytics e ruoli controllo degli accessi in base al ruolo.
- Microsoft AI Chat Protocol offre contratti API standardizzati tra soluzioni e linguaggi di intelligenza artificiale. L'app chat è conforme al protocollo Microsoft AI Chat Protocol, che consente l'esecuzione dell'app di valutazione su qualsiasi app di chat conforme al protocollo.
- Python Quart che usa il
openai
pacchetto per generare risposte ai messaggi utente. - Front-end HTML/JavaScript di base che trasmette le risposte dal back-end usando righe JSON su un flusso leggibile.
- Un'app Web Blazor che usa il pacchetto NuGet Azure.AI.OpenAI per generare risposte ai messaggi utente.
- Un'app Web TypeScript che usa il pacchetto npm openai per generare risposte ai messaggi utente.
Costo
Nel tentativo di mantenere i prezzi il più basso possibile in questo esempio, la maggior parte delle risorse usa un piano tariffario di base o a consumo. Modificare il livello in base alle esigenze in base all'utilizzo previsto. Per interrompere l'addebito degli addebiti, eliminare le risorse al termine dell'articolo.
Altre informazioni sui costi nel repository di esempio.
Altre informazioni sui costi nel repository di esempio.
Altre informazioni sui costi nel repository di esempio.
Prerequisiti
Per completare questo articolo è disponibile un ambiente contenitore di sviluppo con tutte le dipendenze necessarie. Puoi eseguire il contenitore di sviluppo in GitHub Codespaces (in un browser) o in locale usando Visual Studio Code.
Per usare questo articolo, è necessario soddisfare i prerequisiti seguenti:
Una sottoscrizione di Azure: creare un account gratuitamente
Autorizzazioni dell'account Azure: l'account Azure deve avere
Microsoft.Authorization/roleAssignments/write
autorizzazioni, ad esempio Amministratore accesso utenti o Proprietario.Account GitHub
Ambiente di sviluppo aperto
Usare le istruzioni seguenti per distribuire un ambiente di sviluppo preconfigurato contenente tutte le dipendenze necessarie per completare questo articolo.
GitHub Codespaces esegue un contenitore di sviluppo gestito da GitHub con Visual Studio Code per il Web come interfaccia utente. Per l'ambiente di sviluppo più semplice, usa GitHub Codespaces per avere gli strumenti di sviluppo e le dipendenze corretti preinstallati per completare questo articolo.
Importante
Tutti gli account GitHub possono usare Codespaces per un massimo di 60 ore gratuite ogni mese con 2 istanze di core. Per altre informazioni, vedere Spazio di archiviazione e ore core mensili inclusi in GitHub Codespaces.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel main
ramo del Azure-Samples/openai-chat-app-quickstart
repository GitHub.
Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio codici esaminare e quindi selezionare Crea nuovo spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedere ad Azure con l'interfaccia della riga di comando per sviluppatori di Azure nel terminale nella parte inferiore della schermata.
azd auth login
Copia il codice dal terminale e incollalo in un browser. Segui le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel main
ramo del Azure-Samples/openai-chat-app-quickstart-dotnet
repository GitHub.
Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio codici esaminare e quindi selezionare Crea spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedere ad Azure con l'interfaccia della riga di comando per sviluppatori di Azure nel terminale nella parte inferiore della schermata.
azd auth login
Copia il codice dal terminale e incollalo in un browser. Segui le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel main
ramo del Azure-Samples/openai-chat-app-quickstart-javascript
repository GitHub.
- Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio codici esaminare e quindi selezionare Crea nuovo spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedere ad Azure con l'interfaccia della riga di comando per sviluppatori di Azure nel terminale nella parte inferiore della schermata.
azd auth login
Copia il codice dal terminale e incollalo in un browser. Segui le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Distribuire ed eseguire
Il repository di esempio contiene tutti i file di codice e configurazione per la distribuzione di Azure dell'app chat. I passaggi seguenti illustrano il processo di distribuzione di Azure dell'app chat di esempio.
Distribuire l'app di chat in Azure
Importante
Le risorse di Azure create in questa sezione comportano costi immediati. Queste risorse possono accumulare costi anche se si interrompe il comando prima che venga eseguito completamente.
Eseguire il comando seguente dell'interfaccia della riga di comando per sviluppatori di Azure per il provisioning delle risorse di Azure e la distribuzione del codice sorgente:
azd up
Usare la tabella seguente per rispondere alle richieste:
Richiesta Risposta Nome ambiente Tienila breve e minuscola. Aggiungere il nome o l'alias. Ad esempio: secure-chat
. Viene usato come parte del nome del gruppo di risorse.Abbonamento Selezionare la sottoscrizione in cui creare le risorse. Località (per l'hosting) Selezionare una località vicina all'elenco. Percorso del modello OpenAI Selezionare una località vicina all'elenco. Se la stessa posizione è disponibile come prima posizione, selezionala. Attendi la distribuzione dell'app. Il completamento della distribuzione richiede in genere tra 5 e 10 minuti.
Usare l'app chat per porre domande al modello linguistico di grandi dimensioni
Il terminale visualizza un URL dopo la corretta distribuzione dell'applicazione.
Seleziona l'URL etichettato
Deploying service web
per aprire l'applicazione di chat in un browser.Nel browser immettere una domanda, ad esempio "Perché l'identità gestita è migliore delle chiavi?".
La risposta proviene da Azure OpenAI e il risultato viene visualizzato.
Esplorazione del codice di esempio
Mentre OpenAI e il servizio Azure OpenAI si basano su una libreria client Python comune, quando si usano gli endpoint OpenAI di Azure sono necessarie piccole modifiche al codice. Vediamo come questo esempio configura l'autenticazione senza chiave con l'ID Entra Di Microsoft e comunica con Azure OpenAI.
Configurare l'autenticazione con l'identità gestita
In questo esempio il src\quartapp\chat.py
file inizia con la configurazione dell'autenticazione senza chiave.
Il frammento di codice seguente usa il modulo azure.identity.aio per creare un flusso di autenticazione asincrono di Microsoft Entra.
Il frammento di codice seguente usa la AZURE_CLIENT_ID
azd
variabile di ambiente per creare un'istanza managedIdentityCredential in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Nota
Il provisioning delle azd
variabili di ambiente delle risorse viene effettuato durante la azd
distribuzione dell'app.
Il frammento di codice seguente usa la AZURE_TENANT_ID
azd
variabile di ambiente delle risorse per creare un'istanza di AzureDeveloperCliCredential in grado di eseguire l'autenticazione con il tenant Microsoft Entra corrente.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
La libreria client di Identità di Azure fornisce le credenziali, ovvero classi pubbliche che implementano il protocollo TokenCredential della libreria Core di Azure. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali si possono concatenare per formare una sequenza ordinata di meccanismi di autenticazione da tentare.
Il frammento di codice seguente crea un ChainedTokenCredential
oggetto utilizzando un ManagedIdentityCredential
e un AzureDeveloperCliCredential
:
- Viene
ManagedIdentityCredential
usato per Funzioni di Azure e app Azure Servizio. Un'identità gestita assegnata dall'utente è supportata passando aclient_id
ManagedIdentityCredential
. - Viene
AzureDeveloperCliCredential
utilizzato per lo sviluppo locale. È stato impostato in precedenza in base al tenant di Microsoft Entra da usare.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso Valido di Microsoft Entra. Per altre informazioni, vedere l'articolo ChainedTokenCredential Overview (Panoramica di ChainedTokenCredential).
Il frammento di codice seguente ottiene il provider di token OpenAI di Azure in base alle credenziali di Azure selezionate. Questo valore viene ottenuto chiamando il azure.identity.aio.get_bearer_token_provider con due argomenti:
azure_credential
ChainedTokenCredential
: istanza creata in precedenza per autenticare la richiesta.https://cognitiveservices.azure.com/.default
: obbligatorio uno o più ambiti di token di connessione. In questo caso, l'endpoint di Servizi cognitivi di Azure.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Le righe seguenti controllano le variabili di ambiente necessarie AZURE_OPENAI_ENDPOINT
e AZURE_OPENAI_CHATGPT_DEPLOYMENT
azd
di risorse di cui viene effettuato il provisioning durante azd
la distribuzione dell'app. Se un valore non è presente, viene generato un errore.
if not os.getenv("AZURE_OPENAI_ENDPOINT"):
raise ValueError("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI")
if not os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT"):
raise ValueError("AZURE_OPENAI_CHATGPT_DEPLOYMENT is required for Azure OpenAI")
Questo frammento di codice inizializza il client OpenAI di Azure, impostando i api_version
parametri , azure_endpoint
e azure_ad_token_provider
(client_args
):
bp.openai_client = AsyncAzureOpenAI(
api_version=os.getenv("AZURE_OPENAI_API_VERSION") or "2024-02-15-preview",
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
)
La riga seguente imposta il nome di distribuzione del modello OpenAI di Azure da usare nelle chiamate API:
bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")
Nota
OpenAI usa l'argomento della parola chiave model
per specificare il modello da usare. Azure OpenAI usa il concetto di distribuzioni di modelli univoci. Quando si usa Azure OpenAI, model
fare riferimento al nome della distribuzione sottostante scelto durante la distribuzione del modello OpenAI di Azure.
Al termine di questa funzione, il client è configurato correttamente e pronto per interagire con i servizi OpenAI di Azure.
Flusso di risposta con il client OpenAI e il modello
response_stream
Gestisce la chiamata di completamento della chat nella route. Il frammento di codice seguente mostra come openai_client
e model
vengono usati.
async def response_stream():
# This sends all messages, so API request may exceed token limits
all_messages = [
{"role": "system", "content": "You are a helpful assistant."},
] + request_messages
chat_coroutine = bp.openai_client.chat.completions.create(
# Azure Open AI takes the deployment name as the model name
model=bp.openai_model,
messages=all_messages,
stream=True,
)
Esplorare il codice di esempio
Le applicazioni .NET si basano sulla libreria client Azure.AI.OpenAI per comunicare con i servizi OpenAI di Azure, che dipendono dalla libreria OpenAI . L'app di esempio configura l'autenticazione senza chiave usando Microsoft Entra ID per comunicare con Azure OpenAI.
Configurare l'autenticazione e la registrazione del servizio
In questo esempio l'autenticazione senza chiave viene configurata nel program.cs
file . Il frammento di codice seguente usa la AZURE_CLIENT_ID
variabile di ambiente impostata da azd
per creare un'istanza managedIdentityCredential in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Nota
Il provisioning delle azd
variabili di ambiente delle risorse viene effettuato durante la azd
distribuzione dell'app.
Il frammento di codice seguente usa la AZURE_TENANT_ID
variabile di ambiente impostata da azd
per creare un'istanza di AzureDeveloperCliCredential in grado di autenticarsi localmente usando l'account connesso a azd
.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
La libreria client di Identità di Azure fornisce classi di credenziali che implementano il protocollo TokenCredential della libreria Core di Azure. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali possono essere concatenate usando ChainedTokenCredential
per formare una sequenza ordinata di meccanismi di autenticazione da tentare.
Il frammento di codice seguente registra per l'inserimento AzureOpenAIClient
delle dipendenze e crea un ChainedTokenCredential
oggetto usando un ManagedIdentityCredential
e un AzureDeveloperCliCredential
:
- Viene
ManagedIdentityCredential
usato per Funzioni di Azure e app Azure Servizio. Un'identità gestita assegnata dall'utente è supportata usando l'oggettoAZURE_CLIENT_ID
fornito aManagedIdentityCredential
. - Viene
AzureDeveloperCliCredential
utilizzato per lo sviluppo locale. È stato impostato in precedenza in base al tenant di Microsoft Entra da usare.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso Valido di Microsoft Entra. Per altre informazioni, vedere l'articolo ChainedTokenCredential Overview (Panoramica di ChainedTokenCredential).
Ottenere i completamenti della chat usando il client OpenAI di Azure
L'app Web Blazor inserisce l'oggetto registrato AzureOpenAIClient
nella parte superiore del Home.Razor
componente:
@inject AzureOpenAIClient azureOpenAIClient
Quando l'utente invia il modulo, invia AzureOpenAIClient
la richiesta al modello OpenAI di generare un completamento:
ChatClient chatClient = azureOpenAIClient.GetChatClient("gpt-4o-mini");
messages.Add(new UserChatMessage(model.UserMessage));
ChatCompletion completion = await chatClient.CompleteChatAsync(messages);
messages.Add(new SystemChatMessage(completion.Content[0].Text));
Esplorare il codice di esempio
Mentre OpenAI e il servizio Azure OpenAI si basano su una libreria client Openai (comune libreria client JavaScript), sono necessarie piccole modifiche al codice quando si usano gli endpoint OpenAI di Azure. Vediamo come questo esempio configura l'autenticazione senza chiave con l'ID Entra Di Microsoft e comunica con Azure OpenAI.
Autenticazione senza chiave per ogni ambiente
La libreria client di Identità di Azure fornisce classi di credenziali che implementano il protocollo TokenCredential della libreria Core di Azure. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali possono essere concatenate usando ChainedTokenCredential
per formare una sequenza ordinata di meccanismi di autenticazione da tentare. In questo modo è possibile distribuire lo stesso codice sia in ambienti di produzione che in ambienti di sviluppo locali.
Configurare l'autenticazione con l'identità gestita
In questo esempio, ./src/azure-authentication.ts
fornisce diverse funzioni per fornire l'autenticazione senza chiave ad Azure OpenAI.
La prima funzione, getChainedCredential()
, restituisce la prima credenziale di Azure valida trovata nella catena.
function getChainedCredential() {
return new ChainedTokenCredential(
new ManagedIdentityCredential(process.env.AZURE_CLIENT_ID!),
new AzureDeveloperCliCredential({
tenantId: process.env.AZURE_TENANT_ID! ? process.env.AZURE_TENANT_ID! : undefined
})
);
}
- ManagedIdentityCredential viene tentata per prima. Viene configurato con la variabile di ambiente AZURE_CLIENT_ID nel runtime di produzione ed è in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
-
Il tentativo di AzureDeveloperCliCredential è il secondo. Viene configurato quando uno sviluppo accede con l'interfaccia della riga di comando
az login
di Azure.
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso Valido di Microsoft Entra. Per altre informazioni, vedere l'articolo ChainedTokenCredential Overview (Panoramica di ChainedTokenCredential).
Ottenere il token di connessione per OpenAI
La seconda funzione in ./src/azure-authentication.ts
è getTokenProvider()
, che restituisce un callback che fornisce un token di connessione con ambito all'endpoint di Servizi cognitivi di Azure.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
Il frammento di codice precedente usa getBearerTokenProvider
per accettare le credenziali e l'ambito, quindi restituisce un callback che fornisce un token di connessione.
Creare un client Azure OpenAI autenticato
La terza funzione in ./src/azure-authentication.ts
è getOpenAiClient()
, che restituisce il client OpenAI di Azure.
export function getOpenAiClient(): AzureOpenAI | undefined{
try {
if (!process.env.AZURE_OPENAI_ENDPOINT) {
throw new Error("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI");
}
if (!process.env.AZURE_OPENAI_CHAT_DEPLOYMENT) {
throw new Error("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI");
}
const options = {
azureADTokenProvider: getTokenProvider(),
deployment: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT!,
apiVersion: process.env.AZURE_OPENAI_API_VERSION! || "2024-02-15-preview",
endpoint: process.env.AZURE_OPENAI_ENDPOINT!
}
// Create the Asynchronous Azure OpenAI client
return new AzureOpenAI (options);
} catch (error) {
console.error('Error getting Azure OpenAI client: ', error);
}
}
Questo codice accetta le opzioni, incluso il token con ambito corretto, e crea il AzureOpenAI
client
Rispondere alla chat di streaming con Azure OpenAI
Usare il gestore di route Fastify seguente in per ./src/openai-chat-api.ts
inviare un messaggio ad Azure OpenAI e trasmettere la risposta.
import { FastifyReply, FastifyRequest } from 'fastify';
import { AzureOpenAI } from "openai";
import { getOpenAiClient } from './azure-authentication.js';
import { ChatCompletionChunk, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
interface ChatRequestBody {
messages: ChatCompletionMessageParam [];
}
export async function chatRoute (request: FastifyRequest<{ Body: ChatRequestBody }>, reply: FastifyReply) {
const requestMessages: ChatCompletionMessageParam[] = request?.body?.messages;
const openaiClient: AzureOpenAI | undefined = getOpenAiClient();
if (!openaiClient) {
throw new Error("Azure OpenAI client is not configured");
}
const allMessages = [
{ role: "system", content: "You are a helpful assistant."},
...requestMessages
] as ChatCompletionMessageParam [];
const chatCompletionChunks = await openaiClient.chat.completions.create({
// Azure Open AI takes the deployment name as the model name
model: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT_MODEL || "gpt-4o-mini",
messages: allMessages,
stream: true
})
reply.raw.setHeader('Content-Type', 'text/html; charset=utf-8');
reply.raw.setHeader('Cache-Control', 'no-cache');
reply.raw.setHeader('Connection', 'keep-alive');
reply.raw.flushHeaders();
for await (const chunk of chatCompletionChunks as AsyncIterable<ChatCompletionChunk>) {
for (const choice of chunk.choices) {
reply.raw.write(JSON.stringify(choice) + "\n")
}
}
reply.raw.end()
}
La funzione ottiene la conversazione di chat, inclusi i messaggi precedenti e li invia ad Azure OpenAI. Man mano che i blocchi di flusso vengono restituiti da Azure OpenAI, vengono inviati al client.
Altre considerazioni sulla sicurezza
Questo articolo illustra come viene usato ChainedTokenCredential
l'esempio per l'autenticazione nel servizio OpenAI di Azure.
L'esempio include anche un'azione GitHub che analizza i file di infrastruttura come codice e genera un report contenente eventuali problemi rilevati. Per garantire procedure consigliate continue nel proprio repository, è consigliabile che chiunque crei soluzioni in base ai modelli garantisca che l'impostazione di analisi dei segreti gitHub sia abilitata.
Prendere in considerazione altre misure di sicurezza, ad esempio:
Limitare l'accesso al set appropriato di utenti di app usando Microsoft Entra.
Protezione dell'istanza di App Contenitore di Azure con un firewall e/o Rete virtuale.
Pulire le risorse
Pulire le risorse di Azure
Le risorse di Azure create in questo articolo vengono fatturate alla sottoscrizione di Azure. Se prevedi che queste risorse non ti servano in futuro, eliminale per evitare di incorrere in costi aggiuntivi.
Per eliminare le risorse di Azure e rimuovere il codice sorgente, eseguire il comando seguente dell'interfaccia della riga di comando per sviluppatori di Azure:
azd down --purge
Pulire GitHub Codespaces
L'eliminazione dell'ambiente GitHub Codespaces offre la possibilità di aumentare le ore gratuite per core a cui si ha diritto per l'account.
Importante
Per altre informazioni sui diritti dell'account GitHub, vedere Ore di archiviazione e di core mensili incluse in GitHub Codespaces.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub
Azure-Samples/openai-chat-app-quickstart
.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub
Azure-Samples/openai-chat-app-quickstart-dotnet
.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub
Azure-Samples/openai-chat-app-quickstart-javascript
.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Come ottenere assistenza
Se il problema non viene risolto, registralo nei Problemi del repository.
Passaggi successivi
Se il problema non viene risolto, registralo nei Problemi del repository.
Se il problema non viene risolto, registralo nei Problemi del repository.