Usare Ricerca intelligenza artificiale di Azure senza chiavi
Nel codice dell'applicazione è possibile configurare una connessione senza chiave a Ricerca di intelligenza artificiale di Azure che usa l'ID e i ruoli di Microsoft Entra 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.
Le connessioni senza chiave sono abilitate con la procedura seguente:
- Configurare l'autenticazione.
- Impostare le variabili di ambiente in base alle esigenze.
- Usare un tipo di credenziale della libreria di identità di Azure per creare un oggetto client di Ricerca intelligenza artificiale di Azure.
Prerequisiti
Per i carichi di lavoro di sviluppo locale e di produzione è necessario completare i passaggi seguenti:
- Creare una risorsa di ricerca di intelligenza artificiale
- Abilitare l'accesso in base al ruolo nel servizio di ricerca
- Installare la libreria client di Identità di Azure
Creare una risorsa di ricerca di intelligenza artificiale
Prima di continuare con questo articolo, è necessaria una risorsa di Ricerca intelligenza artificiale di Azure con cui lavorare. Se non si ha una risorsa, creare ora la risorsa. Abilitare il controllo degli accessi in base al ruolo per la risorsa.
Installare la libreria client di Identità di Azure
Per usare un approccio senza chiave, aggiornare il codice abilitato per la ricerca di intelligenza artificiale con la libreria client di Identità di Azure.
Installare la libreria client di Identità di Azure per .NET:
dotnet add package Azure.Identity
Aggiornare il codice sorgente per usare DefaultAzureCredential
DefaultAzureCredential
della libreria di identità di Azure consente di eseguire lo stesso codice nell'ambiente di sviluppo locale e nel cloud di 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 altre informazioni su DefaultAzureCredential
per .NET, vedere libreria client di Identità di Azure 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);
Sviluppo locale
Lo sviluppo locale con i ruoli include questi passaggi:
- Assegnare l'identità personale ai ruoli controllo degli accessi in base al ruolo nella risorsa specifica.
- Usare uno strumento come l'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, l'identità di 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 un indice
- Lettore dati indice di ricerca, eseguire query su un indice
Trovare l'identità personale con uno degli strumenti seguenti. Usare tale identità come valore <identity-id>
.
Accedere all'interfaccia della riga di comando di Azure.
az login
Ottenere l'identità personale.
az ad signed-in-user show \ --query id -o tsv
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>"
Se applicabile, sostituire <identity-id>
, <subscription-id>
e <resource-group-name>
con i valori effettivi.
Autenticazione per lo sviluppo locale
Usare uno strumento nell'ambiente di sviluppo locale per l'autenticazione nell'identità di Azure. Dopo l'autenticazione, l'istanza DefaultAzureCredential
nel codice sorgente trova e usa l'autenticazione.
Selezionare uno strumento per l'autenticazione durante lo sviluppo locale.
Configurare le variabili di ambiente per lo sviluppo locale
Per connettersi a Ricerca intelligenza artificiale di Azure, il codice deve conoscere l'endpoint della risorsa.
Creare una variabile di ambiente denominata AZURE_SEARCH_ENDPOINT
per l'endpoint di Ricerca intelligenza artificiale di Azure. 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 controllo degli accessi in base al ruolo che rispettano il principio dei privilegi minimi.
- Assegnare ruoli controllo degli accessi in base al ruolo all'identità di produzione nella 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 all'utente, 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 modello Bicep di Ricerca intelligenza artificiale di Azure seguente per creare la risorsa e impostare l'autenticazione per identityId
. Bicep richiede l'ID ruolo. L'oggetto name
illustrato in questo frammento di codice Bicep non è il ruolo di Azure, ma è 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 codice Bicep generico seguente per creare qualsiasi ruolo. È possibile creare più ruoli controllo degli accessi in base al ruolo, 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 Ricerca intelligenza artificiale di Azure, il codice deve conoscere l'endpoint della risorsa e l'ID dell'identità gestita.
Creare variabili di ambiente per la risorsa di Ricerca di intelligenza artificiale di Azure distribuita e senza chiave:
AZURE_SEARCH_ENDPOINT
: questo URL è il punto di accesso per la risorsa di Ricerca intelligenza artificiale di Azure. Questo URL ha in genere il formatohttps://<YOUR-RESOURCE-NAME>.search.windows.net/
.AZURE_CLIENT_ID
: questa è l'identità con cui autenticarsi.