Använda Azure AI Search utan nycklar
I programkoden kan du konfigurera en nyckellös anslutning till Azure AI Search som använder Microsoft Entra-ID och roller för autentisering och auktorisering. Programbegäranden till de flesta Azure-tjänster måste autentiseras med nycklar eller nyckellösa anslutningar. Utvecklare måste vara noggranna för att aldrig exponera nycklarna på en osäker plats. Alla som får åtkomst till nyckeln kan autentisera till tjänsten. Nyckellös autentisering ger bättre hanterings- och säkerhetsfördelar jämfört med kontonyckeln eftersom det inte finns någon nyckel (eller niska veze) att lagra.
Nyckellösa anslutningar aktiveras med följande steg:
- Konfigurera din autentisering.
- Ange miljövariabler efter behov.
- Använd en autentiseringstyp för Azure Identity-biblioteket för att skapa ett Azure AI Search-klientobjekt.
Förutsättningar
Följande steg måste slutföras för både lokala utvecklings- och produktionsarbetsbelastningar:
- Skapa en AI Search-resurs
- Aktivera rollbaserad åtkomst i söktjänsten
- Installera Azure Identity-klientbiblioteket
Skapa en AI Search-resurs
Innan du fortsätter med den här artikeln behöver du en Azure AI Search-resurs att arbeta med. Om du inte har någon resurs skapar du resursen nu. Aktivera rollbaserad åtkomstkontroll (RBAC) för resursen.
Installera Azure Identity-klientbiblioteket
Innan du arbetar lokalt utan nyckellös bör du uppdatera din AI Search-aktiverade kod med Azure Identity-klientbiblioteket.
Installera Azure Identity-klientbiblioteket för .NET:
dotnet add package Azure.Identity
Uppdatera källkoden för att använda DefaultAzureCredential
Med Azure Identity-biblioteket kan DefaultAzureCredential
du köra samma kod i den lokala utvecklingsmiljön och i Azure-molnet. Skapa en enda autentiseringsuppgift och återanvänd autentiseringsuppgiftsinstansen efter behov för att dra nytta av tokencachelagring.
Mer information om DefaultAzureCredential
för .NET finns i Azure Identity-klientbiblioteket för .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);
Lokal utveckling
Lokal utveckling utan nyckellös omfattar följande steg:
- Tilldela din personliga identitet med RBAC-roller på den specifika resursen.
- Använd ett verktyg för att autentisera med Azure.
- Upprätta miljövariabler för resursen.
Roller för lokal utveckling
Som lokal utvecklare behöver din Azure-identitet fullständig kontroll över din tjänst. Den här kontrollen tillhandahålls med RBAC-roller. Det här är de föreslagna rollerna för att hantera din resurs under utvecklingen:
- Söktjänstdeltagare
- Search Index Data Contributor
- Dataläsare för sökindex
Hitta din personliga identitet med något av följande verktyg. Använd den identiteten <identity-id>
som värde.
Logga in på Azure CLI.
az login
Hämta din personliga identitet.
az ad signed-in-user show \ --query id -o tsv
Tilldela rollen rollbaserad åtkomstkontroll (RBAC) till resursgruppens identitet.
az role assignment create \ --role "<role-name>" \ --assignee "<identity-id>" \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
I förekommande fall ersätter <identity-id>
du , <subscription-id>
och <resource-group-name>
med dina faktiska värden.
Autentisering för lokal utveckling
Använd ett verktyg i din lokala utvecklingsmiljö för autentisering till Azure-identitet. När du har autentiserats hittar och använder instansen DefaultAzureCredential
i källkoden autentiseringen.
Välj ett verktyg för autentisering under lokal utveckling.
Konfigurera miljövariabler för lokal utveckling
Om du vill ansluta till Azure AI Search måste koden känna till resursslutpunkten.
Skapa en miljövariabel med namnet AZURE_SEARCH_ENDPOINT
för din Azure AI Search-slutpunkt. Den här URL:en har vanligtvis formatet https://<YOUR-RESOURCE-NAME>.search.windows.net/
.
Produktionsarbetsbelastningar
Distribuera produktionsarbetsbelastningar innehåller följande steg:
- Välj RBAC-roller som följer principen om minsta behörighet.
- Tilldela RBAC-roller till din produktionsidentitet på den specifika resursen.
- Konfigurera miljövariabler för din resurs.
Roller för produktionsarbetsbelastningar
Om du vill skapa dina produktionsresurser måste du skapa en användartilldelad hanterad identitet och sedan tilldela den identiteten till dina resurser med rätt roller.
Följande roll föreslås för ett produktionsprogram:
Rollnamn | Id |
---|---|
Dataläsare för sökindex | 1407120a-92aa-4202-b7e9-c0e197c71c8f |
Autentisering för produktionsarbetsbelastningar
Använd följande Azure AI Search Bicep-mall för att skapa resursen och ange autentiseringen identityId
för . Bicep kräver roll-ID: t. Det name
som visas i det här Bicep-kodfragmentet är inte Azure-rollen. Det är specifikt för Bicep-distributionen.
// 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
}
}
Filen main.bicep
anropar följande generiska Bicep-kod för att skapa valfri roll. Du har möjlighet att skapa flera RBAC-roller, till exempel en för användaren och en annan för produktion. På så sätt kan du aktivera både utvecklings- och produktionsmiljöer i samma Bicep-distribution.
// 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)
}
}
Konfigurera miljövariabler för produktionsarbetsbelastningar
För att ansluta till Azure AI Search måste koden känna till resursslutpunkten och ID:t för den hanterade identiteten.
Skapa miljövariabler för din distribuerade och nyckellösa Azure AI Search-resurs:
AZURE_SEARCH_ENDPOINT
: Den här URL:en är åtkomstpunkten för din Azure AI Search-resurs. Den här URL:en har vanligtvis formatethttps://<YOUR-RESOURCE-NAME>.search.windows.net/
.AZURE_CLIENT_ID
: Det här är den identitet som ska autentiseras som.