Bagikan melalui


Menggunakan Pencarian Azure AI tanpa kunci

Dalam kode aplikasi, Anda dapat menyiapkan koneksi tanpa kunci ke Azure AI Search yang menggunakan ID Microsoft Entra dan peran untuk autentikasi dan otorisasi. Permintaan aplikasi ke sebagian besar layanan Azure harus diautentikasi dengan kunci atau koneksi tanpa kunci. Pengembang harus rajin untuk tidak pernah mengekspos kunci di lokasi yang tidak aman. Siapa pun yang mendapatkan akses ke kunci dapat mengautentikasi ke layanan. Autentikasi tanpa kunci menawarkan manfaat manajemen dan keamanan yang ditingkatkan atas kunci akun karena tidak ada kunci (atau string koneksi) untuk disimpan.

Koneksi tanpa kunci diaktifkan dengan langkah-langkah berikut:

  • Konfigurasikan autentikasi Anda.
  • Atur variabel lingkungan, sesuai kebutuhan.
  • Gunakan jenis kredensial pustaka Azure Identity untuk membuat objek klien Azure AI Search.

Prasyarat

Langkah-langkah berikut perlu diselesaikan untuk pengembangan lokal dan beban kerja produksi:

Membuat sumber daya Pencarian AI

Sebelum melanjutkan artikel ini, Anda memerlukan sumber daya Azure AI Search untuk bekerja. Jika Anda tidak memiliki sumber daya, buat sumber daya Anda sekarang. Aktifkan kontrol akses berbasis peran (RBAC) untuk sumber daya.

Menginstal pustaka klien Azure Identity

Sebelum bekerja secara lokal tanpa keyless, perbarui kode yang diaktifkan Pencarian AI Anda dengan pustaka klien Azure Identity.

Instal pustaka klien Azure Identity untuk .NET:

dotnet add package Azure.Identity

Memperbarui kode sumber untuk menggunakan DefaultAzureCredential

Pustaka DefaultAzureCredential Azure Identity memungkinkan Anda menjalankan kode yang sama di lingkungan pengembangan lokal dan di cloud Azure. Buat satu kredensial dan gunakan kembali instans kredensial sesuai kebutuhan untuk memanfaatkan penembolokan token.

Untuk informasi selengkapnya tentang DefaultAzureCredential .NET, lihat Pustaka klien Azure Identity untuk .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);

Pengembangan lokal

Pengembangan lokal tanpa keyless mencakup langkah-langkah berikut:

  • Tetapkan identitas pribadi Anda dengan peran RBAC pada sumber daya tertentu.
  • Gunakan alat untuk mengautentikasi dengan Azure.
  • Buat variabel lingkungan untuk sumber daya Anda.

Peran untuk pengembangan lokal

Sebagai pengembang lokal, identitas Azure Anda memerlukan kontrol penuh atas layanan Anda. Kontrol ini disediakan dengan peran RBAC. Untuk mengelola sumber daya Anda selama pengembangan, ini adalah peran yang disarankan:

  • Kontributor Layanan Pencarian
  • Kontributor Data Indeks Pencarian
  • Pembaca Data Indeks Pencarian

Temukan identitas pribadi Anda dengan salah satu alat berikut. Gunakan identitas tersebut <identity-id> sebagai nilai.

  1. Masuk ke Azure CLI.

    az login
    
  2. Dapatkan identitas pribadi Anda.

    az ad signed-in-user show \
        --query id -o tsv
    
  3. Tetapkan peran kontrol akses berbasis peran (RBAC) ke identitas untuk grup sumber daya.

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

Jika berlaku, ganti <identity-id>, <subscription-id>, dan <resource-group-name> dengan nilai aktual Anda.

Autentikasi untuk pengembangan lokal

Gunakan alat di lingkungan pengembangan lokal Anda untuk mengautentikasi ke identitas Azure. Setelah Anda diautentikasi, DefaultAzureCredential instans dalam kode sumber Anda menemukan dan menggunakan autentikasi.

Pilih alat untuk autentikasi selama pengembangan lokal.

Mengonfigurasi variabel lingkungan untuk pengembangan lokal

Untuk menyambungkan ke Azure AI Search, kode Anda perlu mengetahui titik akhir sumber daya Anda.

Buat variabel lingkungan bernama AZURE_SEARCH_ENDPOINT untuk titik akhir Azure AI Search Anda. URL ini umumnya memiliki format https://<YOUR-RESOURCE-NAME>.search.windows.net/.

Beban kerja produksi

Menyebarkan beban kerja produksi mencakup langkah-langkah berikut:

  • Pilih peran RBAC yang mematuhi prinsip hak istimewa paling sedikit.
  • Tetapkan peran RBAC ke identitas produksi Anda pada sumber daya tertentu.
  • Siapkan variabel lingkungan untuk sumber daya Anda.

Peran untuk beban kerja produksi

Untuk membuat sumber daya produksi, Anda perlu membuat identitas terkelola yang ditetapkan pengguna lalu menetapkan identitas tersebut ke sumber daya Anda dengan peran yang benar.

Peran berikut disarankan untuk aplikasi produksi:

Nama peran Id
Pembaca Data Indeks Pencarian 1407120a-92aa-4202-b7e9-c0e197c71c8f

Autentikasi untuk beban kerja produksi

Gunakan templat Azure AI Search Bicep berikut untuk membuat sumber daya dan mengatur autentikasi untuk identityId. Bicep memerlukan ID peran. Cuplikan name Bicep yang ditunjukkan ini bukan peran Azure; khusus untuk penyebaran 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
    }
}

File main.bicep memanggil kode Bicep generik berikut untuk membuat peran apa pun. Anda memiliki opsi untuk membuat beberapa peran RBAC, seperti satu untuk pengguna dan yang lain untuk produksi. Ini memungkinkan Anda mengaktifkan lingkungan pengembangan dan produksi dalam penyebaran Bicep yang sama.

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

Mengonfigurasi variabel lingkungan untuk beban kerja produksi

Untuk menyambungkan ke Azure AI Search, kode Anda perlu mengetahui titik akhir sumber daya Anda, dan ID identitas terkelola.

Buat variabel lingkungan untuk sumber daya Azure AI Search yang disebarkan dan tanpa kunci:

  • AZURE_SEARCH_ENDPOINT: URL ini adalah titik akses untuk sumber daya Azure AI Search Anda. URL ini umumnya memiliki format https://<YOUR-RESOURCE-NAME>.search.windows.net/.
  • AZURE_CLIENT_ID: Ini adalah identitas untuk mengautentikasi sebagai.