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
- Mengaktifkan akses berbasis peran pada layanan pencarian Anda
- Menginstal pustaka klien Azure Identity
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.
Masuk ke Azure CLI.
az login
Dapatkan identitas pribadi Anda.
az ad signed-in-user show \ --query id -o tsv
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 formathttps://<YOUR-RESOURCE-NAME>.search.windows.net/
.AZURE_CLIENT_ID
: Ini adalah identitas untuk mengautentikasi sebagai.