Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nel codice dell'applicazione è possibile configurare una connessione senza chiave per Azure AI Search che usa Microsoft Entra ID e ruoli per l'autenticazione e l'autorizzazione. Le richieste dell'applicazione alla maggior parte dei servizi di Azure devono essere autenticate con chiavi o connessioni senza chiave. Gli sviluppatori devono essere diligenti per non esporre mai le chiavi in una posizione non sicura. Chiunque possa accedere alla chiave è in grado di eseguire l'autenticazione al servizio. L'autenticazione senza chiave offre vantaggi di gestione e sicurezza migliorati rispetto alla chiave dell'account perché non è presente alcuna chiave (o stringa di connessione) da archiviare.
Questo articolo illustra come usare DefaultAzureCredential nel codice dell'applicazione.
Per implementare connessioni senza chiave nel codice, seguire questa procedura:
- Abilitare l'accesso in base al ruolo nel servizio di ricerca
- Impostare le variabili di ambiente in base alle esigenze.
- Usare un tipo di credenziale della libreria di identità Azure per creare un oggetto client Azure AI Search.
Prerequisiti
Azure AI Search, qualsiasi area, ma deve essere un livello fatturabile (basic o superiore).
Accesso basato sui ruoli abilitato nel servizio di ricerca.
Assegnazioni di ruolo in Azure AI Search. Assegna questi ruoli alla tua identità:
- Collaboratore al servizio di ricerca e Collaboratore ai dati dell'indice di ricerca per lo sviluppo locale (accesso completo)
- Lettore di dati dell'indice di ricerca per query di sola lettura in produzione
Per istruzioni dettagliate, vedere Assegnare ruoli per lo sviluppo.
Installare la libreria client Azure Identity
Per usare un approccio senza chiave, aggiornare il codice abilitato per la ricerca di intelligenza artificiale con la libreria client Azure Identity.
Installare la libreria client Azure Identity per .NET e la libreria client Azure Cerca documenti:
dotnet add package Azure.Identity
dotnet add package Azure.Search.Documents
Aggiornare il codice sorgente per usare DefaultAzureCredential
La libreria Azure identity DefaultAzureCredential consente di eseguire lo stesso codice nell'ambiente di sviluppo locale e nel cloud Azure. Creare una singola credenziale e riutilizzare l'istanza delle credenziali in base alle esigenze per sfruttare i vantaggi della memorizzazione nella cache dei token.
Per ulteriori informazioni su DefaultAzureCredential per .NET, vedere la libreria client Azure Identity per .NET.
using Azure;
using Azure.Search.Documents;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Azure.Search.Documents.Models;
using Azure.Identity;
using System;
using static System.Environment;
string endpoint = GetEnvironmentVariable("AZURE_SEARCH_ENDPOINT");
string indexName = "my-search-index";
DefaultAzureCredential credential = new();
SearchClient searchClient = new(new Uri(endpoint), indexName, credential);
SearchIndexClient searchIndexClient = new(endpoint, credential);
Reference:SearchClient, SearchIndexClient, DefaultAzureCredential
Verificare la connessione
Dopo aver configurato il client, verificare la connessione eseguendo una semplice operazione. L'esempio seguente elenca gli indici nel servizio di ricerca:
// List indexes to verify connection
var indexes = searchIndexClient.GetIndexNames();
foreach (var name in indexes)
{
Console.WriteLine(name);
}
Una connessione riuscita stampa i nomi degli indici (o un elenco vuoto se non esistono indici). Se viene visualizzato un errore di autenticazione, verificare che l'accesso basato su ruoli sia abilitato e che l'identità disponga delle assegnazioni di ruolo necessarie.
L'autorità predefinita è Azure cloud pubblico. I valori personalizzati audience per cloud sovrani o specializzati includono:
-
https://search.azure.usper Azure per enti pubblici -
https://search.azure.cnper Azure gestita da 21Vianet -
https://search.microsoftazure.deper Azure Germania
Sviluppo locale
Lo sviluppo locale utilizzando i ruoli include questi passaggi:
- Assegnare la propria identità personale ai ruoli RBAC sulla risorsa specifica.
- Usare uno strumento come interfaccia della riga di comando di Azure o Azure PowerShell per eseguire l'autenticazione con Azure.
- Stabilire le variabili di ambiente per la risorsa.
Ruoli per lo sviluppo locale
In qualità di sviluppatore locale, la tua identità Azure richiede il controllo completo sulle operazioni del piano dati. Questi sono i ruoli suggeriti:
- Collaboratore servizio di ricerca, creazione e gestione di oggetti
- Collaboratore ai dati dell'indice di ricerca, caricare ed eseguire query su un indice e recuperare da una knowledge base
Trovare l'identità personale con uno degli strumenti seguenti. Usare tale identità come valore <identity-id>.
Sostituire i segnaposto <role-name>, <identity-id>, <subscription-id>e <resource-group-name> con i valori effettivi nei comandi seguenti.
Accedere a interfaccia della riga di comando di Azure.
az loginViene visualizzata una finestra del browser per l'autenticazione. Dopo l'accesso, il terminale visualizza le informazioni sulla sottoscrizione.
Ottieni la tua identità personale.
az ad signed-in-user show \ --query id -o tsvIl comando restituisce l'ID oggetto utente (un GUID, Globally Unique Identifier). Salvare questo valore per il passaggio successivo.
Assegnare il ruolo controllo degli accessi in base al ruolo all'identità per il gruppo di risorse.
az role assignment create \ --role "<role-name>" \ --assignee "<identity-id>" \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"Un'assegnazione con esito positivo restituisce un oggetto JSON con i dettagli dell'assegnazione di ruolo.
Autenticazione per lo sviluppo locale
Usare uno strumento nell'ambiente di sviluppo locale per autenticarsi con l'identità di Azure. Dopo l'autenticazione, l'istanza DefaultAzureCredential nel codice sorgente trova e usa l'identità a scopo di autenticazione.
Selezionare uno strumento per l'autenticazione durante lo sviluppo locale.
Configurare le variabili di ambiente per lo sviluppo locale
Per connettersi a Azure AI Search, il codice deve conoscere l'endpoint della risorsa.
Creare una variabile di ambiente denominata AZURE_SEARCH_ENDPOINT per l'endpoint Azure AI Search. Questo URL ha in genere il formato https://<YOUR-RESOURCE-NAME>.search.windows.net/.
Carichi di lavoro di produzione
La distribuzione dei carichi di lavoro di produzione include i passaggi seguenti:
- Scegliere i ruoli di controllo degli accessi che rispettano il principio del minimo privilegio.
- Assegnare i ruoli RBAC alla propria identità di produzione sulla risorsa specifica.
- Configurare le variabili di ambiente per la risorsa.
Ruoli per i carichi di lavoro di produzione
Per creare le risorse di produzione, è necessario creare un'identità gestita assegnata dall'utente e quindi assegnare tale identità alle risorse con i ruoli corretti.
Il ruolo seguente è consigliato per un'applicazione di produzione:
| Nome ruolo | ID. |
|---|---|
| Lettore di dati dell'indice di ricerca | 1407120a-92aa-4202-b7e9-c0e197c71c8f |
Autenticazione per carichi di lavoro di produzione
Usare il seguente modello Azure AI Search Bicep per creare la risorsa e impostare l'autenticazione per l'identityId. Bicep richiede l'ID ruolo. Il name illustrato in questo frammento di codice di Bicep non rappresenta il ruolo di Azure; è specifico della distribuzione Bicep.
// main.bicep
param environment string = 'production'
param roleGuid string = ''
module aiSearchRoleUser 'core/security/role.bicep' = {
scope: aiSearchResourceGroup
name: 'aiSearch-role-user'
params: {
principalId: (environment == 'development') ? principalId : userAssignedManagedIdentity.properties.principalId
principalType: (environment == 'development') ? 'User' : 'ServicePrincipal'
roleDefinitionId: roleGuid
}
}
Il file main.bicep chiama il seguente codice Bicep generico per creare qualunque ruolo. Puoi creare più ruoli RBAC, ad esempio uno per l'utente e un altro per la produzione. In questo modo è possibile abilitare sia gli ambienti di sviluppo che di produzione all'interno della stessa distribuzione Bicep.
// core/security/role.bicep
metadata description = 'Creates a role assignment for an identity.'
param principalId string // passed in from main.bicep
@allowed([
'Device'
'ForeignGroup'
'Group'
'ServicePrincipal'
'User'
])
param principalType string = 'ServicePrincipal'
param roleDefinitionId string // Role ID
resource role 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, resourceGroup().id, principalId, roleDefinitionId)
properties: {
principalId: principalId
principalType: principalType
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
}
}
Configurare le variabili di ambiente per i carichi di lavoro di produzione
Per connettersi a Azure AI Search, il codice deve conoscere l'endpoint della risorsa e l'ID dell'identità gestita.
Creare variabili di ambiente per la risorsa Azure AI Search distribuita e senza chiave:
-
AZURE_SEARCH_ENDPOINT: questo URL è il punto di accesso per la risorsa Azure AI Search. Questo URL ha in genere il formatohttps://<YOUR-RESOURCE-NAME>.search.windows.net/. -
AZURE_CLIENT_ID: Questa è l'identità con cui autenticarsi.
Risolvere gli errori comuni
| Errore | Motivo | Soluzione |
|---|---|---|
AuthenticationFailedException |
Credenziali mancanti o non valide | Assicurarsi di aver eseguito l'accesso con az login (interfaccia della riga di comando) o Connect-AzAccount (PowerShell). Verificare che l'account Azure abbia accesso alla sottoscrizione. |
403 Forbidden |
L'identità non dispone del ruolo richiesto | Assegnare il ruolo appropriato (Lettore dati indice di ricerca per le query, Collaboratore ai dati dell'indice di ricerca per l'indicizzazione). La propagazione delle assegnazioni di ruolo può richiedere fino a 10 minuti. |
401 Unauthorized |
Controllo degli accessi in base al ruolo non abilitato nel servizio di ricerca | Abilitare l'accesso basato sui ruoli nel portale di Azure in Settings>Keys> Controllo degli accessi in base al ruolo. |
ResourceNotFoundException |
Endpoint o nome dell'indice non valido | Verificare che la AZURE_SEARCH_ENDPOINT variabile di ambiente corrisponda all'URL del servizio di ricerca (formato: https://<service-name>.search.windows.net). |
CredentialUnavailableException |
Nessuna credenziale valida trovata |
DefaultAzureCredential prova più metodi di autenticazione. Assicurarsi che almeno una sia configurata (interfaccia della riga di comando di Azure, Visual Studio, variabili di ambiente). |