Condividi tramite


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

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

Prima di lavorare in locale 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 senza chiave include questi passaggi:

  • Assegnare l'identità personale con i ruoli controllo degli accessi in base al ruolo nella risorsa specifica.
  • Usare uno strumento 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 del servizio. Questo controllo viene fornito con i ruoli controllo degli accessi in base al ruolo. Per gestire la risorsa durante lo sviluppo, questi sono i ruoli consigliati:

  • Collaboratore servizi di ricerca
  • Collaboratore ai dati dell'indice di ricerca
  • Lettore di dati dell'indice di ricerca

Trovare l'identità personale con uno degli strumenti seguenti. Usare tale identità come valore <identity-id>.

  1. Accedere all'interfaccia della riga di comando di Azure.

    az login
    
  2. Ottenere l'identità personale.

    az ad signed-in-user show \
        --query id -o tsv
    
  3. 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 formato https://<YOUR-RESOURCE-NAME>.search.windows.net/.
  • AZURE_CLIENT_ID: questa è l'identità con cui autenticarsi.