Bagikan melalui


Mengonfigurasi kunci yang dikelola pelanggan untuk enkripsi data di Azure AI Search

Azure AI Search secara otomatis mengenkripsi data tidak aktif dengan kunci yang dikelola layanan. Jika perlindungan lebih diperlukan, Anda dapat melengkapi enkripsi default dengan lapisan enkripsi lain menggunakan kunci yang Anda buat dan kelola di Azure Key Vault.

Artikel ini memandu Anda melalui langkah-langkah menyiapkan enkripsi kunci yang dikelola pelanggan (CMK) atau "bring-your-own-key" (BYOK).

Catatan

Jika indeks dienkripsi CMK, indeks hanya dapat diakses jika layanan pencarian memiliki akses ke kunci. Jika akses dicabut, indeks tidak dapat digunakan dan layanan tidak dapat diskalakan hingga indeks dihapus atau akses ke kunci dipulihkan.

Objek terenkripsi CMK

Enkripsi CMK diberlakukan pada objek individual. Jika Anda memerlukan CMK di seluruh layanan pencarian Anda, tetapkan kebijakan penegakan.

Enkripsi CMK menjadi beroperasi saat objek dibuat. Anda tidak dapat mengenkripsi objek yang sudah ada. Enkripsi CMK terjadi setiap kali objek disimpan ke disk, baik data tidak aktif untuk penyimpanan jangka panjang atau data sementara untuk penyimpanan jangka pendek. Dengan CMK, disk tidak pernah melihat data yang tidak terenkripsi.

Objek yang dapat dienkripsi meliputi indeks, daftar sinonim, pengindeks, sumber data, dan skillset. Enkripsi secara komputasi mahal untuk didekripsi sehingga hanya konten sensitif yang dienkripsi.

Enkripsi dilakukan melalui konten berikut:

  • Semua konten dalam indeks dan daftar sinonim.

  • Konten sensitif dalam pengindeks, sumber data, skillset, dan vektorizer. Konten ini hanya terdiri dari bidang yang menyimpan string koneksi, deskripsi, identitas, kunci, dan input pengguna. Misalnya, set keterampilan memiliki kunci layanan Azure AI, dan beberapa keterampilan menerima input pengguna, seperti entitas kustom. Dalam kedua kasus, kunci dan input pengguna ke dalam keterampilan dienkripsi. Referensi apa pun ke sumber daya eksternal (seperti sumber data Azure atau model Azure OpenAI) juga dienkripsi.

Enkripsi ganda penuh

Saat memperkenalkan enkripsi CMK, Anda mengenkripsi konten dua kali. Untuk objek dan bidang yang dicatat di bagian sebelumnya, konten terlebih dahulu dienkripsi dengan CMK Anda, dan kedua dengan kunci yang dikelola Microsoft. Konten dienkripsi bergantian pada disk data untuk penyimpanan jangka panjang, dan pada disk sementara yang digunakan untuk penyimpanan jangka pendek.

Mengaktifkan enkripsi CMK meningkatkan ukuran indeks dan menurunkan performa kueri. Berdasarkan pengamatan hingga saat ini, Anda dapat mengharapkan untuk melihat peningkatan 30-60 persen dalam waktu kueri, meskipun performa aktual bervariasi tergantung pada definisi indeks dan jenis kueri. Karena performa berkurang, kami sarankan Anda hanya mengaktifkan fitur ini pada objek yang benar-benar memerlukannya.

Meskipun enkripsi ganda sekarang tersedia di semua wilayah, dukungan diluncurkan dalam dua fase:

  • Peluncuran pertama adalah pada 1 Agustus 2020 dan menyertakan lima wilayah yang tercantum di bawah ini. layanan Pencarian yang dibuat di wilayah berikut mendukung CMK untuk disk data, tetapi bukan disk sementara:

    • US Barat 2
    • AS Timur
    • AS Tengah Bagian Selatan
    • US Gov Virginia
    • US Gov Arizona
  • Peluncuran kedua pada 13 Mei 2021 menambahkan enkripsi untuk disk sementara dan enkripsi CMK yang diperluas ke semua wilayah yang didukung.

    Jika Anda menggunakan CMK dari layanan yang dibuat selama peluncuran pertama dan Anda juga ingin enkripsi CMK melalui disk sementara, Anda perlu membuat layanan pencarian baru di wilayah pilihan Anda dan menyebarkan ulang konten Anda. Untuk menentukan tanggal pembuatan layanan Anda, lihat Cara memeriksa tanggal pembuatan layanan.

Prasyarat

Batasan

  • Tidak ada dukungan untuk Model Keamanan Perangkat Keras Terkelola (HSM) Azure Key Vault.

  • Tidak ada dukungan lintas langganan. Azure Key Vault dan Azure AI Search harus berada dalam langganan yang sama.

Tips Key Vault

Jika Anda baru menggunakan Azure Key Vault, tinjau mulai cepat ini untuk mempelajari tentang tugas dasar: Mengatur dan mengambil rahasia dari Azure Key Vault menggunakan PowerShell.

Berikut adalah beberapa tip untuk menggunakan Key Vault:

  • Gunakan brankas kunci sebanyak yang Anda butuhkan. Kunci yang dikelola dapat berada di brankas kunci yang berbeda. Layanan pencarian dapat memiliki beberapa objek terenkripsi, masing-masing dienkripsi dengan kunci enkripsi yang dikelola pelanggan yang berbeda, disimpan di brankas kunci yang berbeda.

  • Gunakan penyewa yang sama sehingga Anda dapat mengambil kunci terkelola dengan menyambungkan melalui sistem atau identitas yang dikelola pengguna. Perilaku ini mengharuskan kedua layanan untuk berbagi penyewa yang sama. Untuk informasi selengkapnya tentang membuat penyewa, lihat Menyiapkan penyewa baru.

  • Aktifkan perlindungan penghapusan menyeluruh dan penghapusan sementara. Karena sifat enkripsi dengan kunci yang dikelola pelanggan, tidak ada yang dapat mengambil data Anda jika kunci Azure Key Vault Anda dihapus. Untuk mencegah hilangnya data yang disebabkan oleh penghapusan kunci Key Vault yang tidak disengaja, perlindungan penghapusan sementara dan penghapusan menyeluruh harus diaktifkan pada key vault. Penghapusan sementara diaktifkan secara default, sehingga Anda hanya akan mengalami masalah jika Anda sengaja menonaktifkannya. Perlindungan penghapusan menyeluruh tidak diaktifkan secara default, tetapi diperlukan untuk enkripsi kunci yang dikelola pelanggan di Azure AI Search.

  • Aktifkan pengelogan pada brankas kunci sehingga Anda dapat memantau penggunaan kunci.

  • Aktifkan autorotasi kunci atau ikuti prosedur ketat selama rotasi rutin kunci brankas kunci dan rahasia aplikasi dan pendaftaran. Selalu perbarui semua konten terenkripsi untuk menggunakan rahasia dan kunci baru sebelum menghapus yang lama. Jika Anda melewatkan langkah ini, konten Anda tidak dapat didekripsi.

Langkah 1: Membuat kunci di Key Vault

Lewati pembuatan kunci jika Anda sudah memiliki kunci di Azure Key Vault yang ingin Anda gunakan, tetapi kumpulkan pengidentifikasi kunci. Anda memerlukan informasi ini saat membuat objek terenkripsi.

Sebelum Anda menambahkan kunci, pastikan Anda telah menetapkan sendiri peran Petugas Kripto Key Vault.

Enkripsi Azure AI Search mendukung kunci RSA ukuran 2048, 3072, dan 4096. Untuk informasi selengkapnya mengenai jenis kunci yang didukung, lihat Tentang kunci.

  1. Masuk ke portal Azure dan buka halaman gambaran umum brankas kunci Anda.

  2. Pilih Kunci Objek>di sebelah kiri, lalu pilih Hasilkan/Impor.

  3. Di panel Buat kunci , dari daftar Opsi, pilih Buat untuk membuat kunci baru.

  4. Masukkan Nama untuk kunci Anda, dan terima default untuk properti kunci lainnya.

  5. Secara opsional, atur kebijakan rotasi kunci untuk mengaktifkan rotasi otomatis.

  6. Pilih Buat untuk memulai penyebaran.

  7. Pilih kunci, pilih versi saat ini, lalu catat pengidentifikasi kunci. Ini terdiri dari nilai kunci Uri, nama kunci, dan versi kunci. Anda memerlukan pengidentifikasi untuk menentukan indeks terenkripsi di Azure AI Search.

    Membuat kunci key vault baru

Langkah 2: Membuat prinsip keamanan

Anda memiliki beberapa opsi untuk menyiapkan akses Azure AI Search ke kunci enkripsi pada waktu proses. Pendekatan paling sederhana adalah mengambil kunci menggunakan identitas terkelola layanan pencarian Anda. Anda dapat menggunakan sistem atau identitas yang dikelola pengguna. Melakukannya memungkinkan Anda untuk menghilangkan langkah-langkah untuk pendaftaran aplikasi dan rahasia aplikasi. Atau, Anda dapat membuat dan mendaftarkan aplikasi Microsoft Entra dan meminta layanan pencarian menyediakan ID aplikasi berdasarkan permintaan.

Sebaiknya gunakan identitas terkelola. Identitas terkelola memungkinkan layanan pencarian Anda mengautentikasi ke Azure Key Vault tanpa menyimpan kredensial (ApplicationID atau ApplicationSecret) dalam kode. Siklus hidup jenis identitas terkelola ini terkait dengan siklus hidup layanan pencarian Anda, yang hanya dapat memiliki satu identitas terkelola yang ditetapkan sistem. Untuk informasi selengkapnya tentang cara kerja identitas terkelola, lihat Apa itu identitas terkelola sumber daya Azure.

Aktifkan identitas terkelola yang ditetapkan sistem untuk layanan pencarian Anda.

Cuplikan layar aktifkan identitas terkelola yang ditetapkan sistem.

Langkah 3: Memberikan izin

Azure Key Vault mendukung otorisasi menggunakan kontrol akses berbasis peran. Kami merekomendasikan pendekatan ini atas kebijakan akses brankas kunci. Untuk informasi selengkapnya, lihat Menyediakan akses ke kunci Key Vault, sertifikat, dan rahasia menggunakan peran Azure.

Dalam langkah ini, tetapkan peran Pengguna Enkripsi Layanan Kripto Key Vault ke layanan pencarian Anda. Jika Anda menguji secara lokal, tetapkan peran ini untuk diri Anda sendiri juga.

  1. Masuk ke portal Azure dan temukan brankas kunci Anda.

  2. Pilih Kontrol akses (IAM) dan pilih Tambahkan penetapan peran.

  3. Pilih Pengguna Enkripsi Layanan Kripto Key Vault lalu pilih Berikutnya.

  4. Pilih identitas terkelola, pilih anggota, lalu pilih identitas terkelola layanan pencarian Anda.

  5. Pilih Tinjau + Tetapkan.

Tunggu beberapa menit hingga penetapan peran beroperasi.

Langkah 4: Mengenkripsi konten

Kunci enkripsi ditambahkan saat Anda membuat objek. Untuk menambahkan kunci yang dikelola pelanggan pada indeks, peta sinonim, pengindeks, sumber data, atau set keterampilan, gunakan portal Azure, Rest API Pencarian, atau Azure SDK untuk membuat objek yang mengaktifkan enkripsi. Untuk menambahkan enkripsi menggunakan Azure SDK, lihat contoh Python di artikel ini.

  1. Panggil API pembuatan untuk menentukan properti encryptionKey :

  2. Masukkan konstruksi encryptionKey ke dalam definisi objek. Properti ini adalah properti tingkat pertama, pada tingkat yang sama dengan nama dan deskripsi. Jika Anda menggunakan vault, kunci, dan versi yang sama, Anda dapat menempelkan konstruksi encryptionKey yang sama ke dalam setiap definisi objek.

    Contoh pertama menunjukkan encryptionKey untuk layanan pencarian yang terhubung menggunakan identitas terkelola:

    {
      "encryptionKey": {
        "keyVaultUri": "<YOUR-KEY-VAULT-URI>",
        "keyVaultKeyName": "<YOUR-ENCRYPTION-KEY-NAME>",
        "keyVaultKeyVersion": "<YOUR-ENCRYPTION-KEY-VERSION>"
      }
    }
    

    Contoh kedua mencakup accessCredentials, diperlukan jika Anda mendaftarkan aplikasi di ID Microsoft Entra:

    {
      "encryptionKey": {
        "keyVaultUri": "<YOUR-KEY-VAULT-URI>",
        "keyVaultKeyName": "<YOUR-ENCRYPTION-KEY-NAME>",
        "keyVaultKeyVersion": "<YOUR-ENCRYPTION-KEY-VERSION>",
        "accessCredentials": {
          "applicationId": "<YOUR-APPLICATION-ID>",
          "applicationSecret": "<YOUR-APPLICATION-SECRET>"
        }
      }
    }
    
  3. Verifikasi bahwa kunci enkripsi ada dengan mengeluarkan GET pada objek.

  4. Verifikasi objek beroperasi dengan melakukan tugas, seperti mengkueri indeks yang telah dienkripsi.

Setelah membuat objek terenkripsi pada layanan pencarian, Anda dapat menggunakannya seperti objek lain dari jenisnya. Enkripsi transparan bagi pengguna dan pengembang.

Tidak satu pun dari detail brankas kunci ini dianggap rahasia dan dapat dengan mudah diambil dengan menelusuri ke halaman Azure Key Vault yang relevan di portal Azure.

Penting

Konten terenkripsi di Azure AI Search dikonfigurasi untuk menggunakan kunci Azure Key Vault tertentu dengan versi tertentu. Jika Anda mengubah kunci atau versi, objek harus diperbarui untuk menggunakannya sebelum Anda menghapus yang sebelumnya. Gagal melakukannya membuat objek tidak dapat digunakan. Anda tidak akan dapat mendekripsi konten jika kunci hilang.

Langkah 5: Uji enkripsi

Untuk memverifikasi enkripsi berfungsi, cabut kunci enkripsi, kueri indeks (seharusnya tidak dapat digunakan), lalu kembalikan kunci enkripsi.

Gunakan portal Azure untuk tugas ini.

  1. Pada halaman Azure Key Vault, pilih Kunci Objek>.

  2. Pilih kunci yang baru saja Anda buat, lalu pilih Hapus.

  3. Pada halaman Pencarian Azure AI, pilih Indeks manajemen>pencarian.

  4. Pilih indeks Anda dan gunakan Search Explorer untuk menjalankan kueri. Anda harus mendapatkan kesalahan.

  5. Kembali ke halaman Kunci Objek>Azure Key Vault.

  6. Pilih Kelola kunci yang dihapus.

  7. Pilih kunci Anda, lalu pilih Pulihkan.

  8. Kembali ke indeks Anda di Azure AI Search dan jalankan ulang kueri. Anda akan melihat hasil pencarian. Jika Anda tidak melihat hasil langsung, tunggu sebentar dan coba lagi.

Menyiapkan kebijakan untuk memberlakukan kepatuhan CMK

Kebijakan Azure membantu menegakkan standar organisasi dan menilai kepatuhan dalam skala besar. Azure AI Search memiliki kebijakan bawaan opsional untuk penerapan CMK di seluruh layanan.

Di bagian ini, Anda menetapkan kebijakan yang menentukan standar CMK untuk layanan pencarian Anda. Kemudian, Anda menyiapkan layanan pencarian untuk menerapkan kebijakan ini.

  1. Navigasikan ke kebijakan bawaan di browser web Anda. Pilih Tetapkan

    Cuplikan layar menetapkan kebijakan CMK bawaan.

  2. Siapkan cakupan kebijakan. Di bagian Parameter, hapus centang Hanya tampilkan parameter... dan atur Efek ke Tolak.

    Selama evaluasi permintaan, permintaan yang cocok dengan definisi kebijakan tolak ditandai sebagai tidak patuh. Dengan asumsi standar untuk layanan Anda adalah enkripsi CMK, "tolak" berarti bahwa permintaan yang tidak menentukan enkripsi CMK tidak patuh.

    Cuplikan layar mengubah efek kebijakan CMK bawaan menjadi tolak.

  3. Selesaikan pembuatan kebijakan.

  4. Panggil Api Layanan - Perbarui untuk mengaktifkan penegakan kebijakan CMK di tingkat layanan.

PATCH https://management.azure.com/subscriptions/<your-subscription-Id>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Search/searchServices/<your-search-service-name>?api-version=2023-11-01

{
    "properties": {
        "encryptionWithCmk": {
            "enforcement": "Enabled"
        }
    }
}

Memutar atau memperbarui kunci enkripsi

Sebaiknya gunakan kemampuan autorotasi Azure Key Vault, tetapi Anda juga dapat memutar kunci secara manual.

Saat Anda mengubah kunci atau versinya, objek apa pun yang menggunakan kunci harus diperbarui terlebih dahulu untuk menggunakan nilai baru sebelum Anda menghapus nilai lama. Jika tidak, objek menjadi tidak dapat digunakan karena tidak dapat didekripsi.

  1. Tentukan kunci yang digunakan oleh indeks atau peta sinonim.

  2. Buat kunci baru di key vault, tetapi biarkan kunci asli tersedia.

  3. Perbarui properti encryptionKey pada indeks atau peta sinonim untuk menggunakan nilai baru. Hanya objek yang awalnya dibuat dengan properti ini yang dapat diperbarui untuk menggunakan nilai yang berbeda.

  4. Nonaktifkan atau hapus kunci sebelumnya di key vault. Pantau akses kunci untuk memverifikasi kunci baru yang sedang digunakan.

Untuk alasan performa, layanan pencarian menyembunyikan kunci hingga beberapa jam. Jika Anda menonaktifkan atau menghapus kunci tanpa menyediakan kunci baru, kueri terus berfungsi sementara hingga cache kedaluwarsa. Namun, setelah layanan pencarian tidak dapat lagi mendekripsi konten, Anda mendapatkan pesan ini: "Akses terlarang. The query key used might have been revoked - please retry."

Bekerja dengan konten terenkripsi

Dengan enkripsi kunci yang dikelola pelanggan, Anda mungkin melihat latensi untuk pengindeksan dan kueri karena pekerjaan enkripsi/dekripsi tambahan. Azure AI Search tidak mencatat aktivitas enkripsi, tetapi Anda dapat memantau akses kunci melalui pengelogan brankas kunci.

Sebaiknya aktifkan pengelogan sebagai bagian dari konfigurasi key vault.

  1. Membuat ruang kerja analitik log.

  2. Tambahkan pengaturan diagnostik di brankas kunci yang menggunakan ruang kerja untuk retensi data.

  3. Pilih audit atau semuaLog untuk kategori, beri nama pengaturan diagnostik, lalu simpan.

Contoh konfigurasi kunci enkripsi Python

Bagian ini memperlihatkan representasi Python dari encryptionKey dalam definisi objek. Definisi yang sama berlaku untuk indeks, sumber data, keterampilan, pengindeks, dan peta sinonim. Untuk mencoba contoh ini pada layanan pencarian dan brankas kunci Anda, unduh buku catatan dari azure-search-python-samples.

Instal beberapa paket.

! pip install python-dotenv
! pip install azure-core
! pip install azure-search-documents==11.5.1
! pip install azure-identity

Buat indeks yang memiliki kunci enkripsi.

from azure.search.documents.indexes import SearchIndexClient
from azure.search.documents.indexes.models import (
    SimpleField,
    SearchFieldDataType,
    SearchableField,
    SearchIndex,
    SearchResourceEncryptionKey
)
from azure.identity import DefaultAzureCredential

endpoint="<PUT YOUR AZURE SEARCH SERVICE ENDPOINT HERE>"
credential = DefaultAzureCredential()

index_name = "test-cmk-index"
index_client = SearchIndexClient(endpoint=endpoint, credential=credential)  
fields = [
        SimpleField(name="Id", type=SearchFieldDataType.String, key=True),
        SearchableField(name="Description", type=SearchFieldDataType.String)
    ]

scoring_profiles = []
suggester = []
encryption_key = SearchResourceEncryptionKey(
    key_name="<PUT YOUR KEY VAULT NAME HERE>",
    key_version="<PUT YOUR ALPHANUMERIC KEY VERSION HERE>",
    vault_uri="<PUT YOUR KEY VAULT ENDPOINT HERE>"
)

index = SearchIndex(name=index_name, fields=fields, encryption_key=encryption_key)
result = index_client.create_or_update_index(index)
print(f' {result.name} created')

Dapatkan definisi indeks untuk memverifikasi konfigurasi kunci enkripsi ada.

index_name = "test-cmk-index-qs"
index_client = SearchIndexClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential)  

result = index_client.get_index(index_name)  
print(f"{result}")  

Muat indeks dengan beberapa dokumen. Semua konten bidang dianggap sensitif dan dienkripsi pada disk menggunakan kunci yang dikelola pelanggan Anda.

from azure.search.documents import SearchClient

# Create a documents payload
documents = [
    {
    "@search.action": "upload",
    "Id": "1",
    "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities."
    },
    {
    "@search.action": "upload",
    "Id": "2",
    "Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts."
    },
    {
    "@search.action": "upload",
    "Id": "3",
    "Description": "The hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel's restaurant services."
    },
    {
    "@search.action": "upload",
    "Id": "4",
    "Description": "The hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace."
    }
]

search_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, index_name=index_name, credential=credential)
try:
    result = search_client.upload_documents(documents=documents)
    print("Upload of new document succeeded: {}".format(result[0].succeeded))
except Exception as ex:
    print (ex.message)

    index_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential)

Jalankan kueri untuk mengonfirmasi bahwa indeks beroperasi.

from azure.search.documents import SearchClient

query = "historic"  

search_client = SearchClient(endpoint=AZURE_SEARCH_SERVICE, credential=credential, index_name=index_name)
  
results = search_client.search(  
    query_type='simple',
    search_text=query, 
    select=["Id", "Description"],
    include_total_count=True
    )
  
for result in results:  
    print(f"Score: {result['@search.score']}")
    print(f"Id: {result['Id']}")
    print(f"Description: {result['Description']}")

Output dari kueri harus menghasilkan hasil yang mirip dengan contoh berikut.

Score: 0.6130029
Id: 4
Description: The hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.
Score: 0.26286605
Id: 1
Description: The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.

Karena konten terenkripsi didekripsi sebelum refresh atau kueri data, Anda tidak akan melihat bukti visual enkripsi. Untuk memverifikasi enkripsi berfungsi, periksa log sumber daya.

Langkah berikutnya

Jika Anda tidak terbiasa dengan arsitektur keamanan Azure, tinjau dokumentasi Azure Security, dan khususnya, artikel ini: