Delen via


Azure AI Search zonder sleutels gebruiken

In uw toepassingscode kunt u een sleutelloze verbinding met Azure AI Search instellen die gebruikmaakt van Microsoft Entra-id en -rollen voor verificatie en autorisatie. Toepassingsaanvragen voor de meeste Azure-services moeten worden geverifieerd met sleutels of sleutelloze verbindingen. Ontwikkelaars moeten ijverig zijn om de sleutels nooit beschikbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot de sleutel, kan zich verifiëren bij de service. Sleutelloze verificatie biedt verbeterde beheer- en beveiligingsvoordelen ten opzichte van de accountsleutel, omdat er geen sleutel (of verbindingsreeks) is om op te slaan.

Sleutelloze verbindingen zijn ingeschakeld met de volgende stappen:

  • Configureer uw verificatie.
  • Stel indien nodig omgevingsvariabelen in.
  • Gebruik een referentietype voor de Azure Identity-bibliotheek om een Azure AI Search-clientobject te maken.

Vereisten

De volgende stappen moeten worden uitgevoerd voor zowel lokale ontwikkelings- als productieworkloads:

Een AI Search-resource maken

Voordat u verdergaat met dit artikel, hebt u een Azure AI Search-resource nodig om mee te werken. Als u geen resource hebt, maakt u nu uw resource . Schakel op rollen gebaseerd toegangsbeheer (RBAC) in voor de resource.

Azure Identity-clientbibliotheek installeren

Als u een sleutelloze benadering wilt gebruiken, werkt u uw code met AI Search bij met de Azure Identity-clientbibliotheek.

Installeer de Azure Identity-clientbibliotheek voor .NET:

dotnet add package Azure.Identity

Broncode bijwerken voor gebruik van DefaultAzureCredential

Met de Azure Identity-bibliotheek DefaultAzureCredential kunt u dezelfde code uitvoeren in de lokale ontwikkelomgeving en in de Azure-cloud. Maak één referentie en hergebruik het referentie-exemplaar indien nodig om gebruik te maken van tokencaching.

Zie de Azure Identity-clientbibliotheek voor .NET voor meer informatie over DefaultAzureCredential . 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);

Lokale ontwikkeling

Lokale ontwikkeling met behulp van rollen omvat de volgende stappen:

  • Wijs uw persoonlijke identiteit toe aan RBAC-rollen voor de specifieke resource.
  • Gebruik een hulpprogramma zoals de Azure CLI of Azure PowerShell om te verifiëren met Azure.
  • Stel omgevingsvariabelen voor uw resource in.

Rollen voor lokale ontwikkeling

Als lokale ontwikkelaar heeft uw Azure-identiteit volledige controle nodig over gegevensvlakbewerkingen. Dit zijn de voorgestelde rollen:

  • Inzender voor zoekservice, objecten maken en beheren
  • Inzender voor zoekindexgegevens, een index laden
  • Zoekindexgegevenslezer, voer een query uit op een index

Zoek uw persoonlijke identiteit met een van de volgende hulpprogramma's. Gebruik die identiteit als de <identity-id> waarde.

  1. Meld u aan bij Azure CLI.

    az login
    
  2. Haal uw persoonlijke identiteit op.

    az ad signed-in-user show \
        --query id -o tsv
    
  3. Wijs de RBAC-rol (op rollen gebaseerd toegangsbeheer) toe aan de identiteit voor de resourcegroep.

    az role assignment create \
        --role "<role-name>" \
        --assignee "<identity-id>" \
        --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
    

Vervang, vervang <identity-id>, <subscription-id>en <resource-group-name> door uw werkelijke waarden, indien van toepassing.

Verificatie voor lokale ontwikkeling

Gebruik een hulpprogramma in uw lokale ontwikkelomgeving voor verificatie bij Azure-identiteit. Zodra u bent geverifieerd, wordt de verificatie door het DefaultAzureCredential exemplaar in uw broncode gevonden en gebruikt.

Selecteer een hulpprogramma voor verificatie tijdens lokale ontwikkeling.

Omgevingsvariabelen configureren voor lokale ontwikkeling

Als u verbinding wilt maken met Azure AI Search, moet uw code uw resource-eindpunt kennen.

Maak een omgevingsvariabele met de naam AZURE_SEARCH_ENDPOINT voor uw Azure AI Search-eindpunt. Deze URL heeft over het algemeen de indeling https://<YOUR-RESOURCE-NAME>.search.windows.net/.

Productieworkloads

De implementatie van productieworkloads omvat de volgende stappen:

  • Kies RBAC-rollen die voldoen aan het principe van minimale bevoegdheden.
  • Wijs RBAC-rollen toe aan uw productie-identiteit voor de specifieke resource.
  • Omgevingsvariabelen instellen voor uw resource.

Rollen voor productieworkloads

Als u uw productiebronnen wilt maken, moet u een door de gebruiker toegewezen beheerde identiteit maken en die identiteit vervolgens toewijzen aan uw resources met de juiste rollen.

De volgende rol wordt voorgesteld voor een productietoepassing:

Rolnaam ID
Zoekindexgegevenslezer 1407120a-92aa-4202-b7e9-c0e197c71c8f

Verificatie voor productieworkloads

Gebruik de volgende Azure AI Search Bicep-sjabloon om de resource te maken en de verificatie voor de identityIdresource in te stellen. Bicep vereist de rol-id. De name weergave in dit Bicep-fragment is niet de Azure-rol. Dit is specifiek voor de Bicep-implementatie.

// 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
    }
}

Het main.bicep bestand roept de volgende algemene Bicep-code aan om een rol te maken. U hebt de mogelijkheid om meerdere RBAC-rollen te maken, zoals een voor de gebruiker en een andere voor productie. Hierdoor kunt u zowel ontwikkel- als productieomgevingen inschakelen binnen dezelfde Bicep-implementatie.

// 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)
    }
}

Omgevingsvariabelen configureren voor productieworkloads

Als u verbinding wilt maken met Azure AI Search, moet uw code uw resource-eindpunt en de id van de beheerde identiteit kennen.

Maak omgevingsvariabelen voor uw geïmplementeerde en sleutelloze Azure AI Search-resource:

  • AZURE_SEARCH_ENDPOINT: Deze URL is het toegangspunt voor uw Azure AI Search-resource. Deze URL heeft over het algemeen de indeling https://<YOUR-RESOURCE-NAME>.search.windows.net/.
  • AZURE_CLIENT_ID: Dit is de identiteit die moet worden geverifieerd als.