Anahtarlar olmadan Azure AI Search'i kullanma

Uygulama kodunuzda, kimlik doğrulaması ve yetkilendirme için Microsoft Entra Kimliğini ve rolleri kullanan Azure AI Search'e anahtarsız bir bağlantı ayarlayabilirsiniz. Çoğu Azure hizmeti için uygulama isteklerinin kimlik doğrulaması anahtarlarla veya anahtarsız bağlantılarla yapılmalıdır. Geliştiricilerin anahtarları güvenli olmayan bir konumda asla kullanıma sunmaması için dikkatli olması gerekir. Anahtara erişim kazanan herkes hizmette kimlik doğrulaması yapabilir. Anahtarsız kimlik doğrulaması, depoacak anahtar (veya bağlantı dizesi) olmadığından hesap anahtarına göre gelişmiş yönetim ve güvenlik avantajları sunar.

Anahtarsız bağlantılar aşağıdaki adımlarla etkinleştirilir:

  • Kimlik doğrulamanızı yapılandırın.
  • Ortam değişkenlerini gerektiği gibi ayarlayın.
  • Azure AI Search istemci nesnesi oluşturmak için Bir Azure Kimlik kitaplığı kimlik bilgisi türü kullanın.

Önkoşullar

Hem yerel geliştirme hem de üretim iş yükleri için aşağıdaki adımların tamamlanması gerekir:

Yapay Zeka Arama kaynağı oluşturma

Bu makaleye devam etmeden önce, çalışmak için bir Azure AI Search kaynağına ihtiyacınız vardır. Kaynağınız yoksa kaynağınızı şimdi oluşturun. Kaynak için rol tabanlı erişim denetimini (RBAC) etkinleştirin.

Azure Identity istemci kitaplığını yükleme

Anahtarsız yerel olarak çalışmadan önce AI Search özellikli kodunuzu Azure Identity istemci kitaplığıyla güncelleştirin.

.NET için Azure Identity istemci kitaplığını yükleyin:

dotnet add package Azure.Identity

Kaynak kodu DefaultAzureCredential kullanacak şekilde güncelleştirme

Azure Kimlik kitaplığı, DefaultAzureCredential yerel geliştirme ortamında ve Azure bulutunda aynı kodu çalıştırmanıza olanak tanır. Tek bir kimlik bilgisi oluşturun ve belirteç önbelleğinden yararlanmak için kimlik bilgisi örneğini gerektiği şekilde yeniden kullanın.

.NET hakkında DefaultAzureCredential daha fazla bilgi için bkz . .NET için Azure Identity istemci kitaplığı.

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);

Yerel geliştirme

Anahtarsız olmayan yerel geliştirme şu adımları içerir:

  • Belirli bir kaynakta RBAC rolleri ile kişisel kimliğinizi atayın.
  • Azure ile kimlik doğrulaması yapmak için bir araç kullanın.
  • Kaynağınız için ortam değişkenleri oluşturun.

Yerel geliştirme rolleri

Yerel bir geliştirici olarak Azure kimliğinizin hizmetiniz için tam denetime sahip olması gerekir. Bu denetim RBAC rolleri ile sağlanır. Geliştirme sırasında kaynağınızı yönetmek için önerilen roller şunlardır:

  • Arama Hizmeti Katkıda Bulunanı
  • Arama Dizini Veri Katkıda Bulunanı
  • Arama Dizini Veri Okuyucusu

Aşağıdaki araçlardan biriyle kişisel kimliğinizi bulun. Değer olarak <identity-id> bu kimliği kullanın.

  1. Azure CLI'da oturum açın.

    az login
    
  2. Kişisel kimliğinizi alın.

    az ad signed-in-user show \
        --query id -o tsv
    
  3. Rol tabanlı erişim denetimi (RBAC) rolünü kaynak grubunun kimliğine atayın.

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

Uygun olduğunda , <subscription-id>ve <resource-group-name> değerlerini gerçek değerlerinizle değiştirin<identity-id>.

Yerel geliştirme için kimlik doğrulaması

Azure kimliğinde kimlik doğrulaması yapmak için yerel geliştirme ortamınızda bir araç kullanın. Kimliğiniz doğrulandıktan sonra kaynak kodunuzdaki DefaultAzureCredential örnek kimlik doğrulamasını bulur ve kullanır.

Yerel geliştirme sırasında kimlik doğrulaması için bir araç seçin.

Yerel geliştirme için ortam değişkenlerini yapılandırma

Azure AI Search'e bağlanmak için kodunuzun kaynak uç noktanızı bilmesi gerekir.

Azure AI Search uç noktanız için adlı AZURE_SEARCH_ENDPOINT bir ortam değişkeni oluşturun. Bu URL genellikle biçimindedir https://<YOUR-RESOURCE-NAME>.search.windows.net/.

Üretim iş yükleri

Üretim iş yüklerini dağıtma şu adımları içerir:

  • En az ayrıcalık ilkesine bağlı olan RBAC rollerini seçin.
  • Belirli bir kaynakta üretim kimliğinize RBAC rolleri atayın.
  • Kaynağınız için ortam değişkenlerini ayarlayın.

Üretim iş yükleri için roller

Üretim kaynaklarınızı oluşturmak için kullanıcı tarafından atanan bir yönetilen kimlik oluşturmanız ve ardından bu kimliği doğru rollerle kaynaklarınıza atamanız gerekir.

Bir üretim uygulaması için aşağıdaki rol önerilir:

Rol adı Id
Arama Dizini Veri Okuyucusu 1407120a-92aa-4202-b7e9-c0e197c71c8f

Üretim iş yükleri için kimlik doğrulaması

Kaynağı oluşturmak ve kimlik doğrulamasını ayarlamak için identityIdaşağıdaki Azure AI Search Bicep şablonunu kullanın. Bicep rol kimliğini gerektirir. name Bu Bicep kod parçacığında gösterilen, Azure rolü değildir; Bu, Bicep dağıtımına özeldir.

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

Dosya, main.bicep herhangi bir rol oluşturmak için aşağıdaki genel Bicep kodunu çağırır. Bir kullanıcı için ve diğeri üretim için olmak üzere birden çok RBAC rolü oluşturma seçeneğiniz vardır. Bu, aynı Bicep dağıtımında hem geliştirme hem de üretim ortamlarını etkinleştirmenizi sağlar.

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

Üretim iş yükleri için ortam değişkenlerini yapılandırma

Azure AI Search'e bağlanmak için kodunuzun kaynak uç noktanızı ve yönetilen kimliği bilmesi gerekir.

Dağıtılan ve anahtarsız Azure AI Arama kaynağınız için ortam değişkenleri oluşturun:

  • AZURE_SEARCH_ENDPOINT: Bu URL, Azure AI Search kaynağınızın erişim noktasıdır. Bu URL genellikle biçimindedir https://<YOUR-RESOURCE-NAME>.search.windows.net/.
  • AZURE_CLIENT_ID: Bu kimlik olarak doğrulanır.