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
- Op rollen gebaseerde toegang inschakelen voor uw zoekservice
- Azure Identity-clientbibliotheek installeren
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.
Meld u aan bij Azure CLI.
az login
Haal uw persoonlijke identiteit op.
az ad signed-in-user show \ --query id -o tsv
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 identityId
resource 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 indelinghttps://<YOUR-RESOURCE-NAME>.search.windows.net/
.AZURE_CLIENT_ID
: Dit is de identiteit die moet worden geverifieerd als.