Uso di Azure OpenAI per i dati in modo sicuro
Nota
A partire da giugno 2024, il modulo dell'applicazione per l'endpoint privato gestito da Microsoft relativamente a Azure AI Search non è più necessario.
L'endpoint privato gestito verrà eliminato dalla rete virtuale gestita da Microsoft nel luglio 2025. Se è già stato effettuato il provisioning di un endpoint privato gestito tramite il processo dell'applicazione prima di giugno 2024, abilitare il servizio attendibile di Azure AI Search il prima possibile per evitare interruzioni del servizio.
Usare questo articolo per informazioni su come usare Azure OpenAI per i dati in modo sicuro proteggendo i dati e le risorse con il controllo degli accessi in base al ruolo, le reti virtuali e gli endpoint privati di Microsoft Entra ID.
Questo articolo riguarda solo l’uso di Azure OpenAI per i dati con testo. Non riguarda Azure OpenAI per i dati con immagini.
Architettura di inserimento dati
Quando si usa Azure OpenAI per i dati per inserire dati dall'archiviazione BLOB di Azure, file locali o URL in Azure AI Search, per elaborare i dati viene usato il processo seguente.
- I passaggi 1 e 2 vengono usati solo per il caricamento di file.
- Il download degli URL nell'archiviazione BLOB non è illustrato in questo diagramma. Dopo che le pagine Web vengono scaricate da Internet e caricate nell'archiviazione BLOB, i passaggi successivi al passaggio 3 sono identici.
- Vengono creati due indicizzatori, due indici, due origini dati e una competenza personalizzata nella risorsa Azure AI Search.
- Il contenitore di blocchi viene creato nell'archiviazione BLOB.
- Se la pianificazione attiva l'inserimento, il processo di inserimento inizia dal passaggio 7.
- L'API
preprocessing-jobs
di Azure OpenAI implementa il protocollo API Web competenza cliente di Azure AI Searched elabora i documenti in una coda. - Azure OpenAI:
- Usa internamente il primo indicizzatore creato in precedenza per il cracking dei documenti.
- Usa un algoritmo euristico per eseguire la suddivisione in blocchi. Rispetta i layout di tabella e altri elementi di formattazione nel limite del blocco per garantire la migliore qualità della suddivisione in blocchi.
- Se si sceglie di abilitare la ricerca vettoriale, Azure OpenAI usa l’impostazione di incorporamento selezionata per vettorializzare i blocchi.
- Quando vengono elaborati tutti i dati monitorati dal servizio, Azure OpenAI attiva il secondo indicizzatore.
- L'indicizzatore memorizza i dati elaborati in un servizio Azure AI Search.
Per le identità gestite usate nelle chiamate al servizio, sono supportate solo le identità gestite assegnate dal sistema. Le identità gestite assegnate dall'utente non sono supportate.
Architettura dell'inferenza
Quando si inviano chiamate API per chattare con un modello OpenAI di Azure sui dati, il servizio deve recuperare i campi dell'indice durante l'inferenza per eseguire il mapping dei campi. Il servizio, quindi, richiede che l'identità di Azure OpenAI abbia il ruolo Search Service Contributor
per il servizio di ricerca anche durante l'inferenza.
Se viene fornita una dipendenza di incorporamento nella richiesta di inferenza, Azure OpenAI eseguirà la vettorializzazione della query riscritta e sia la query che il vettore vengono inviati a Azure AI Search per la ricerca vettoriale.
Controllo di accesso a livello di documento
Nota
Il controllo di accesso a livello di documento è supportato solo per Azure AI Search.
Azure OpenAI per i dati consente di limitare i documenti che possono essere usati nelle risposte per utenti diversi con filtri di sicurezza di Azure AI Search. Quando si abilita l'accesso a livello di documento, Ricerca intelligenza artificiale di Azure taglia i risultati della ricerca in base all'appartenenza al gruppo Microsoft Entra dell'utente specificato nel filtro. È possibile abilitare l'accesso a livello di documento solo su indici di Azure AI Search esistenti. Per abilitare l’accesso a livello di documento:
Seguire la procedura descritta nella Documentazione di Azure AI Search per registrare l'applicazione e creare utenti e gruppi.
Indicizzare i documenti con i relativi gruppi consentiti. Accertarsi che i nuovi campi di sicurezza abbiano lo schema seguente:
{"name": "group_ids", "type": "Collection(Edm.String)", "filterable": true }
group_ids
è il nome campo predefinito. Se si usa un nome campo diverso, ad esempiomy_group_ids
, è possibile eseguire il mapping del campo in Mapping campi indice.Assicurarsi che ogni documento sensibile nell'indice abbia questo valore del campo di sicurezza impostato sui gruppi consentiti del documento.
In Azure OpenAI Studio, aggiungere l’origine dati. Nella sezione Mapping campi indice, è possibile eseguire il mapping del valore zero o uno al campo Gruppi consentiti, purché lo schema sia compatibile. Se il campo Gruppi consentiti non è mappato, l'accesso a livello di documento è disabilitato.
Azure OpenAI Studio
Dopo aver connesso l'indice di Azure AI Search, le risposte in Studio avranno accesso ai documenti in base alle autorizzazioni di Microsoft Entra dell'utente connesso.
Applicazione Web
Se si usa un’app Web pubblicata, è necessario ridistribuirla per eseguire l'aggiornamento all’ultima versione. La versione più recente dell'app Web include la possibilità di recuperare i gruppi dell'account Microsoft Entra dell'utente connesso, memorizzarlo nella cache e includere gli ID gruppo in ogni richiesta dell’API.
API
Quando si usa l'API, passare il parametro filter
in ogni richiesta dell’API. Ad esempio:
Importante
L'elemento seguente è solo di esempio. Se si usa una chiave API, archiviarla in modo sicuro in un'altra posizione, ad esempio in Azure Key Vault. Non includere la chiave API direttamente nel codice e non esporla mai pubblicamente.
Per altre informazioni sulla sicurezza dei servizi di intelligenza artificiale, vedere Autenticare le richieste a Servizi di Azure AI.
{
"messages": [
{
"role": "user",
"content": "who is my manager?"
}
],
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": "<AZURE_AI_SEARCH_ENDPOINT>",
"key": "<AZURE_AI_SEARCH_API_KEY>",
"index_name": "<AZURE_AI_SEARCH_INDEX>",
"filter": "my_group_ids/any(g:search.in(g, 'group_id1, group_id2'))"
}
}
]
}
my_group_ids
è il nome campo selezionato per Gruppi consentiti durante il mapping dei campi.group_id1, group_id2
sono gruppi attribuiti all'utente connesso. L'applicazione client può recuperare e memorizzare nella cache i gruppi di utenti.
Configurazione delle risorse
Usare le sezioni seguenti per configurare le risorse per un utilizzo sicuro ottimale. Anche se si prevede di proteggere solo una parte delle risorse, è comunque necessario seguire tutti i passaggi.
Questo articolo descrive le impostazioni di rete correlate alla disabilitazione della rete pubblica per le risorse di Azure OpenAI, le risorse di Azure AI Search e gli account di archiviazione. L'uso di reti selezionate con regole IP non è supportato perché gli indirizzi IP dei servizi sono dinamici.
Crea gruppo di risorse
Creare un gruppo di risorse in modo da poter organizzare tutte le risorse pertinenti. Le risorse nel gruppo di risorse includono, ad esempio:
- Una rete virtuale
- Tre servizi chiave: un'istanza di Azure OpenAI, un’istanza di Azure AI Search e un account di archiviazione
- Tre endpoint privati, ognuno collegato a un servizio chiave
- Tre interfacce di rete, ognuna associata a un endpoint privato
- Un gateway di rete virtuale per l'accesso da computer client locali
- Un’app Web con rete virtuale integrata
- Una zona DNS privato, in modo che l'app Web trovi l'IP dell'istanza di Azure OpenAI
Creare una rete virtuale
La rete virtuale ha tre subnet.
- La prima subnet viene usata per il gateway di rete virtuale.
- La seconda subnet viene usata per gli endpoint privati per i tre servizi chiave.
- La terza subnet è vuota e viene usata per l'integrazione della rete virtuale in uscita dell'app Web.
Configurare Azure OpenAI
Sottodominio personalizzato abilitato
Il sottodominio personalizzato è necessario per l'autenticazione basata su Microsoft Entra ID e per la zona DNS privato. Se la risorsa Azure OpenAI viene creata usando il modello di Resource Manager, il sottodominio personalizzato deve essere specificato in modo esplicito.
Abilitare l'identità gestita
Per consentire ad Azure AI Search e all'account di archiviazione di riconoscere il servizio Azure OpenAI tramite l'autenticazione di Microsoft Entra ID, è necessario assegnare un'identità gestita per il servizio Azure OpenAI. Il modo più semplice consiste nell'attivazione dell'identità gestita assegnata dal sistema nel portale di Azure.
Per impostare le identità gestite tramite l'API di gestione, vedere la documentazione di riferimento dell'API di gestione.
"identity": {
"principalId": "<YOUR-PRINCIPAL-ID>",
"tenantId": "<YOUR-TENNANT-ID>",
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<YOUR-SUBSCIRPTION-ID>/resourceGroups/my-resource-group",
"principalId": "<YOUR-PRINCIPAL-ID>",
"clientId": "<YOUR-CLIENT-ID>"
}
}
Abilitare il servizio attendibile
Per consentire ad Azure AI Search di chiamare preprocessing-jobs
come API Web di competenza personalizzata, mentre Azure OpenAI non ha accesso alla rete pubblica, è necessario configurare Azure OpenAI per ignorare Azure AI Search come servizio attendibile basato sull'identità gestita. Azure OpenAI identifica il traffico proveniente da Azure AI Search verificando le attestazioni nel token JSON Web (JWT). Azure AI Search deve usare l'autenticazione dell'identità gestita assegnata dal sistema per chiamare l'API Web di competenza personalizzata.
Impostare networkAcls.bypass
come AzureServices
dall’API di gestione. Per altre informazioni, vedere l’articolo sulle reti virtuali.
Questo passaggio può essere ignorato solo se esiste un collegamento privato condiviso per la risorsa di Azure AI Search.
Disabilitare l'accesso alla rete pubblica
È possibile disabilitare l'accesso alla rete pubblica della risorsa di Azure OpenAI nel portale di Azure.
Per consentire l'accesso al servizio Azure OpenAI dai computer client, ad esempio con Azure OpenAI Studio, è necessario creare connessioni endpoint private che si connettono alla risorsa di Azure OpenAI.
Configurare Azure AI Search
È possibile usare il piano tariffario basic e superiore per la risorsa di ricerca. Non è necessario, ma se si usa il piano tariffario S2, sono disponibili opzioni avanzate.
Abilitare l'identità gestita
Per consentire ad altre risorse il riconoscimento di Azure AI Search tramite l'autenticazione di Microsoft Entra ID, è necessario assegnare un'identità gestita per Azure AI Search. Il modo più semplice consiste nell'attivazione dell'identità gestita assegnata dal sistema nel portale di Azure.
Abilitare il controllo degli accessi in base al ruolo
Poiché Azure OpenAI usa l'identità gestita per accedere ad Azure AI Search, è necessario abilitare il controllo degli accessi in base al ruolo in Azure AI Search. Per eseguire questa operazione nel portale di Azure, selezionare Entrambi o Controllo degli accessi in base al ruolo nella scheda Chiavi del portale di Azure.
Per altre informazioni, vedere l’articolo sul controllo degli accessi in base al ruolo (RBAC) di Azure AI Search.
Disabilitare l'accesso alla rete pubblica
È possibile disabilitare l'accesso alla rete pubblica della risorsa di Azure AI Search nel portale di Azure.
Per consentire l'accesso al servizio Azure AI Search dai computer client, ad esempio con Azure OpenAI Studio, è necessario creare connessioni endpoint private che si connettono alla risorsa di Azure AI Search.
Abilitare il servizio attendibile
È possibile abilitare il servizio attendibile della risorsa di ricerca dal portale di Azure.
Passare alla scheda di rete della risorsa di ricerca. Con l'accesso alla rete pubblica impostato su disabilitato, selezionare Consenti ai servizi di Azure nell'elenco dei servizi attendibili di accedere a questo servizio di ricerca.
È anche possibile usare l'API REST per abilitare il servizio attendibile. Questo esempio usa l'interfaccia della riga di comando di Azure e lo strumento jq
.
rid=/subscriptions/<YOUR-SUBSCRIPTION-ID>/resourceGroups/<YOUR-RESOURCE-GROUP>/providers/Microsoft.Search/searchServices/<YOUR-RESOURCE-NAME>
apiVersion=2024-03-01-Preview
#store the resource properties in a variable
az rest --uri "https://management.azure.com$rid?api-version=$apiVersion" > search.json
#replace bypass with AzureServices using jq
jq '.properties.networkRuleSet.bypass = "AzureServices"' search.json > search_updated.json
#apply the updated properties to the resource
az rest --uri "https://management.azure.com$rid?api-version=$apiVersion" \
--method PUT \
--body @search_updated.json
Creare un collegamento privato condiviso
Suggerimento
Se si usa un piano tariffario base o standard o se è la prima volta che si configurano tutte le risorse in modo sicuro, ignorare questo argomento avanzato.
Questa sezione riguarda solo la risorsa di ricerca del piano tariffario S2, perché richiede supporto dell'endpoint privato per gli indicizzatori con un set di competenze.
Per creare un collegamento privato condiviso dalla risorsa di ricerca che si connette alla risorsa di Azure OpenAI, vedere la documentazione sulla ricerca. Per Tipo di risorsa selezionare Microsoft.CognitiveServices/accounts
e per ID gruppo selezionare openai_account
.
Con il collegamento privato condiviso, il passaggio 8 del diagramma dell'architettura di inserimento dati viene modificato da ignora servizio attendibile a endpoint privato condiviso.
Configurare l'account di archiviazione
Abilitare il servizio attendibile
Per consentire l'accesso all'account di archiviazione da Azure OpenAI e Azure AI Search, è necessario configurare l'account di archiviazione per ignorare Azure OpenAI e Azure AI Search come servizi attendibili in base all'identità gestita.
Nel portale di Azure, passare alla scheda della rete dell'account di archiviazione, scegliere "Reti selezionate", selezionare Consenti ai servizi di Azure nell’elenco dei servizi attendibili di accedere a questo account di archiviazione e fare clic su Salva.
Disabilitare l'accesso alla rete pubblica
È possibile disabilitare l'accesso alla rete pubblica della risorsa di archiviazione nel portale di Azure.
Per consentire l'accesso al proprio account di archiviazione dai computer client, ad esempio con Azure OpenAI Studio, è necessario creare connessioni endpoint private che si connettono alla propria archiviazione BLOB.
Assegnazioni di ruoli
Finora è già stata configurata ogni risorsa in modo indipendente. Successivamente, è necessario consentire ai servizi di autorizzarsi tra loro.
Ruolo | Assegnatario | Risorsa | Descrizione |
---|---|---|---|
Search Index Data Reader |
OpenAI di Azure | Azure AI Search | Il servizio di inferenza esegue una query dei dati dall'indice. |
Search Service Contributor |
OpenAI di Azure | Azure AI Search | Il servizio di inferenza esegue una query dello schema dell'indice per il mapping automatico dei campi. Il servizio di inserimento dati crea indici, origini dati, set di competenze, indicizzatore ed esegue query dello stato dell'indicizzatore. |
Storage Blob Data Contributor |
OpenAI di Azure | Account di archiviazione | Legge dal contenitore di input e scrive il risultato della pre-elaborazione nel contenitore di output. |
Cognitive Services OpenAI Contributor |
Azure AI Search | OpenAI di Azure | Competenza personalizzata. |
Storage Blob Data Reader |
Azure AI Search | Account di archiviazione | Legge i BLOB di documenti e i BLOB in blocchi. |
Cognitive Services OpenAI User |
Applicazione Web | OpenAI di Azure | Inferenza. |
Nella tabella precedente, Assignee
indica l'identità gestita assegnata dal sistema di tale risorsa.
L'amministratore deve avere il ruolo Owner
per queste risorse per l’aggiunta di assegnazioni di ruolo.
Vedere la documentazione sul controllo degli accessi in base al ruolo (RBAC) di Azure per le istruzioni sull'impostazione di questi ruoli nel portale di Azure. È possibile usare lo script disponibile in GitHub per aggiungere le assegnazioni di ruolo a livello di codice.
Per consentire agli sviluppatori di usare queste risorse per la generazione di applicazioni, l'amministratore deve aggiungere l'identità degli sviluppatori con le assegnazioni di ruolo seguenti alle risorse.
Ruolo | Risorsa | Descrizione |
---|---|---|
Cognitive Services OpenAI Contributor |
OpenAI di Azure | Chiamare l'API di inserimento pubblico da Azure OpenAI Studio. Il ruolo Contributor non è sufficiente perché con il solo ruolo Contributor non è possibile chiamare l'API del piano dati tramite l'autenticazione di Microsoft Entra ID e l'autenticazione di Microsoft Entra ID è necessaria nella configurazione sicura descritta in questo articolo. |
Cognitive Services User |
OpenAI di Azure | Elencare le chiavi API da Azure OpenAI Studio. |
Contributor |
Azure AI Search | Elencare le chiavi API per elencare gli indici da Azure OpenAI Studio. |
Contributor |
Account di archiviazione | Elencare la firma di accesso condiviso (SAS) per caricare file da Azure OpenAI Studio. |
Contributor |
Il gruppo di risorse o la sottoscrizione di Azure in cui lo sviluppatore deve distribuire l'app Web in | Distribuire l'app Web nella sottoscrizione di Azure dello sviluppatore. |
Role Based Access Control Administrator |
OpenAI di Azure | Autorizzazione per configurare l'assegnazione di ruolo necessaria nella risorsa OpenAI di Azure. Consente all'app Web di chiamare Azure Open AI. |
Configurare il gateway e il client
Per accedere al servizio Azure OpenAI dai computer client locali, uno degli approcci consiste nella configurazione del Gateway VPN di Azure e del client VPN di Azure.
Seguire queste linee guida per creare un gateway di rete virtuale per la rete virtuale.
Seguire queste linee guida per aggiungere la configurazione da punto a sito e abilitare l'autenticazione basata sul Microsoft Entra ID. Scaricare il pacchetto di configurazione del profilo client VPN di Azure, quindi decomprimere e importare il file AzureVPN/azurevpnconfig.xml
nel client VPN di Azure.
Configurare il file hosts
del computer locale per puntare i nomi host delle risorse sugli IP privati nella rete virtuale. Il file hosts
si trova in C:\Windows\System32\drivers\etc
per Windows e in /etc/hosts
per Linux. Esempio:
10.0.0.5 contoso.openai.azure.com
10.0.0.6 contoso.search.windows.net
10.0.0.7 contoso.blob.core.windows.net
Azure OpenAI Studio
Sarà possibile usare tutte le funzionalità di Azure OpenAI Studio, incluse sia l'inserimento che l'inferenza, dai computer client locali.
Applicazione Web
L'app Web comunica con la risorsa di Azure OpenAI. Poiché la rete pubblica per la risorsa di Azure OpenAI è disabilitata, l'app Web deve essere configurata per usare l'endpoint privato nella rete virtuale per accedere alla risorsa di Azure OpenAI.
L'app Web deve risolvere il nome host di Azure OpenAI sull'IP privato dell'endpoint privato per Azure OpenAI. È necessario, quindi, configurare prima la zona DNS privato per la rete virtuale.
- Creare una zona DNS privato nel proprio gruppo di risorse.
- Aggiungere un record DNS. L'IP è l'IP privato dell'endpoint privato per la risorsa di Azure OpenAI ed è possibile ottenere l'indirizzo IP dall'interfaccia di rete associata all'endpoint privato per Azure OpenAI.
- Collegare la zona DNS privato alla rete virtuale in modo che l'app Web integrata in questa rete virtuale possa usare questa zona DNS privato.
Quando si distribuisce l'app Web da Azure OpenAI Studio, selezionare la stessa posizione con la rete virtuale e selezionare uno SKU appropriato, in modo da supportare la funzionalità di integrazione della rete virtuale.
Dopo la distribuzione dell'app Web, nella scheda Rete del portale di Azure configurare l'integrazione della rete virtuale del traffico in uscita dell'app Web e scegliere la terza subnet riservata per l'app Web.
Uso dell'API
Accertarsi che le credenziali di accesso dispongano del ruolo Cognitive Services OpenAI Contributor
nella risorsa di Azure OpenAI ed eseguire prima az login
.
API di inserimento
Vedere l’articolo di riferimento sull'API di inserimento per informazioni dettagliate sugli oggetti richiesta e risposta usati dall'API di inserimento.
API di inferenza
Vedere l’articolo di riferimento sull'API di inferenza per informazioni dettagliate sugli oggetti richiesta e risposta usati dall'API di inferenza.
Abilitare Microsoft Defender for Cloud
A questo punto, è possibile integrare Microsoft Defender per il cloud (anteprima) con le risorse di Azure per proteggere le applicazioni. Microsoft Defender per il cloud protegge le applicazioni con la protezione dalle minacce per i carichi di lavoro di intelligenza artificiale, fornendo ai team avvisi di sicurezza basati sull’evidenza arricchiti con segnali di intelligence sulle minacce Microsoft e consente ai team di rafforzare la postura di sicurezza con consigli sulle procedure consigliate per la sicurezza integrata.
Per richiedere l'accesso, usare questo modulo.