Membuat dan menyimpan tombol master kolom untuk Always Encrypted

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance

Kunci Master Kolom adalah kunci yang melindungi kunci yang digunakan dalam Always Encrypted untuk mengenkripsi kunci enkripsi kolom. Kunci master kolom harus disimpan di penyimpanan kunci tepercaya, dan kunci harus dapat diakses oleh aplikasi yang perlu mengenkripsi atau mendekripsi data, dan alat untuk mengonfigurasi Always Encrypted dan mengelola kunci Always Encrypted.

Artikel ini menyediakan detail untuk memilih penyimpanan kunci dan membuat kunci master kolom untuk Always Encrypted. Untuk gambaran umum terperinci, lihat Gambaran Umum Manajemen Kunci untuk Always Encrypted.

Memilih Penyimpanan Kunci untuk Kunci Master Kolom Anda

Always Encrypted mendukung beberapa penyimpanan kunci untuk menyimpan kunci master kolom Always Encrypted. Penyimpanan kunci yang didukung bervariasi tergantung pada driver dan versi mana yang Anda gunakan.

Ada dua kategori penyimpanan kunci tingkat tinggi yang perlu dipertimbangkan - Penyimpanan Kunci Lokal, dan Penyimpanan Kunci Terpusat.

Penyimpanan Kunci Lokal atau Terpusat?

  • Penyimpanan Kunci Lokal - hanya dapat digunakan oleh aplikasi pada komputer yang berisi penyimpanan kunci lokal. Dengan kata lain, Anda perlu mereplikasi penyimpanan kunci dan kunci ke setiap komputer yang menjalankan aplikasi Anda. Contoh penyimpanan kunci lokal adalah Windows Penyimpanan Sertifikat. Saat menggunakan penyimpanan kunci lokal, Anda perlu memastikan bahwa penyimpanan kunci ada di setiap mesin yang menghosting aplikasi Anda, dan bahwa komputer berisi kunci master kolom yang dibutuhkan aplikasi Anda untuk mengakses data yang dilindungi menggunakan Always Encrypted. Ketika Anda menyediakan kunci master kolom untuk pertama kalinya, atau ketika Anda mengubah (memutar) kunci, Anda perlu memastikan kunci disebarkan ke semua mesin yang menghosting aplikasi Anda.

  • Penyimpanan Kunci Terpusat - melayani aplikasi di beberapa komputer. Contoh penyimpanan kunci terpusat adalah Azure Key Vault. Penyimpanan kunci terpusat biasanya mempermudah manajemen kunci karena Anda tidak perlu mempertahankan beberapa salinan kunci master kolom Anda di beberapa komputer. Pastikan aplikasi Anda dikonfigurasi untuk terhubung ke penyimpanan kunci terpusat.

Penyimpanan Kunci mana yang Didukung di Driver Klien yang Diaktifkan Always Encrypted?

Always Encrypted driver klien yang diaktifkan adalah driver klien SQL Server yang memiliki dukungan bawaan untuk memasukkan Always Encrypted ke dalam aplikasi klien Anda. Always Encrypted driver yang diaktifkan mencakup beberapa penyedia bawaan untuk penyimpanan kunci populer. Beberapa driver juga memungkinkan Anda menerapkan dan mendaftarkan penyedia penyimpanan kunci master kolom kustom, sehingga Anda dapat menggunakan penyimpanan kunci apa pun, bahkan jika tidak ada penyedia bawaan untuk itu. Saat memutuskan antara penyedia bawaan dan penyedia kustom, pertimbangkan bahwa menggunakan penyedia bawaan biasanya berarti lebih sedikit perubahan pada aplikasi Anda (dalam beberapa kasus, hanya diperlukan perubahan string koneksi database).

Penyedia bawaan yang tersedia bergantung pada driver, versi driver, dan sistem operasi mana yang dipilih. Silakan lihat dokumentasi Always Encrypted untuk driver spesifik Anda untuk menentukan penyimpanan kunci mana yang didukung secara langsung dan jika driver Anda mendukung penyedia penyimpanan kunci kustom - Mengembangkan aplikasi menggunakan Always Encrypted.

Penyimpanan Kunci mana yang Didukung di SQL Tools?

SQL Server Management Studio, Azure Data Studio, dan modul SqlServer PowerShell mendukung kunci master kolom yang disimpan di:

  • Brankas kunci dan HSM terkelola di Azure Key Vault.

    Catatan

    HSM terkelola memerlukan SSMS 18.9 atau yang lebih baru dan versi modul SqlServer PowerShell 21.1.18235 atau yang lebih baru. Azure Data Studio saat ini tidak mendukung HSM terkelola.

  • Windows Penyimpanan Sertifikat.

  • Penyimpanan kunci, seperti modul keamanan perangkat keras, yang menyediakan Cryptography Next Generation (CNG) API atau Cryptography API (CAPI).

Membuat Kunci Master Kolom di Penyimpanan Sertifikat Windows

Kunci master kolom dapat berupa sertifikat yang disimpan di Windows Penyimpanan Sertifikat. Driver yang didukung Always Encrypted tidak memverifikasi tanggal kedaluwarsa atau rantai otoritas sertifikat. Sertifikat hanya digunakan sebagai pasangan kunci yang terdiri dari kunci publik dan privat.

Untuk menjadi kunci master kolom yang valid, sertifikat harus:

  • menjadi sertifikat X.509.
  • disimpan di salah satu dari dua lokasi penyimpanan sertifikat: komputer lokal atau pengguna saat ini. (Untuk membuat sertifikat di lokasi penyimpanan sertifikat komputer lokal, Anda harus menjadi administrator pada komputer target.)
  • berisi kunci privat (panjang kunci yang disarankan dalam sertifikat adalah 2048 bit atau lebih besar).
  • dibuat untuk pertukaran kunci.

Ada beberapa cara untuk membuat sertifikat yang merupakan kunci master kolom yang valid tetapi opsi paling sederhana adalah dengan membuat sertifikat yang ditandatangani sendiri.

Membuat sertifikat yang ditandatangani sendiri menggunakan PowerShell

Gunakan cmdlet New-SelfSignedCertificate untuk membuat sertifikat yang ditandatangani sendiri. Contoh berikut menunjukkan cara membuat sertifikat yang dapat digunakan sebagai kunci master kolom untuk Always Encrypted.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

Membuat sertifikat yang ditandatangani sendiri menggunakan SQL Server Management Studio (SSMS)

Untuk detailnya, lihat Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio. Untuk tutorial langkah demi langkah yang menggunakan SSMS dan menyimpan kunci Always Encrypted di Penyimpanan Sertifikat Windows, lihat tutorial Wizard Always Encrypted (Windows Penyimpanan Sertifikat).

Membuat Sertifikat Tersedia untuk Aplikasi dan Pengguna

Jika kunci master kolom Anda adalah sertifikat yang disimpan di lokasi penyimpanan sertifikat komputer lokal, Anda perlu mengekspor sertifikat dengan kunci privat dan mengimpornya ke semua mesin yang menghosting aplikasi yang diharapkan untuk mengenkripsi atau mendekripsi data yang disimpan dalam kolom terenkripsi, atau alat untuk mengonfigurasi Always Encrypted dan untuk mengelola kunci Always Encrypted. Selain itu, setiap pengguna harus diberikan izin baca untuk sertifikat yang disimpan di lokasi penyimpanan sertifikat komputer lokal agar dapat menggunakan sertifikat sebagai kunci master kolom.

Jika kunci master kolom Anda adalah sertifikat yang disimpan di lokasi penyimpanan sertifikat pengguna saat ini, Anda perlu mengekspor sertifikat dengan kunci privat dan mengimpornya ke lokasi penyimpanan sertifikat pengguna saat ini dari semua akun pengguna yang menjalankan aplikasi yang diharapkan untuk mengenkripsi atau mendekripsi data yang disimpan dalam kolom terenkripsi, atau alat untuk mengonfigurasi Always Encrypted dan mengelola Always Encrypted kunci (pada semua mesin yang berisi aplikasi/alat tersebut). Tidak diperlukan konfigurasi izin - setelah masuk ke komputer, pengguna dapat mengakses semua sertifikat di lokasi penyimpanan sertifikat pengguna mereka saat ini.

Menggunakan PowerShell

Gunakan cmdlet Import-PfxCertificate dan Export-PfxCertificate untuk mengimpor dan mengekspor sertifikat.

Menggunakan Konsol Manajemen Microsoft

Untuk memberi pengguna izin Baca untuk sertifikat yang disimpan di lokasi penyimpanan sertifikat komputer lokal, ikuti langkah-langkah berikut:

  1. Buka prompt perintah dan ketik mmc.
  2. Di konsol MMC, pada menu File , klik Tambahkan/Hapus Snap-in.
  3. Dalam kotak dialog Tambahkan/Hapus Snap-in , klik Tambahkan.
  4. Dalam kotak dialog Tambahkan Snap-in Mandiri , klik Sertifikat, klik Tambahkan.
  5. Dalam kotak dialog Snap-in Sertifikat , klik Akun komputer, lalu klik Selesai.
  6. Dalam kotak dialog Tambahkan Snap-in Mandiri , klik Tutup.
  7. Dalam kotak dialog Tambahkan/Hapus Snap-in , klik OK.
  8. Dari snap-in Sertifikat, temukan sertifikat di folder Pribadi Sertifikat>, klik kanan Sertifikat, arahkan ke Semua Tugas, lalu klik Kelola Kunci Privat.
  9. Dalam kotak dialog Keamanan , tambahkan izin baca untuk akun pengguna jika diperlukan.

Membuat Kunci Master Kolom di Azure Key Vault

Azure Key Vault membantu melindungi kunci dan rahasia kriptografi, dan ini adalah opsi yang nyaman untuk menyimpan kunci master kolom untuk Always Encrypted, terutama jika aplikasi Anda dihosting di Azure. Untuk membuat kunci di Azure Key Vault, Anda memerlukan langganan Azure dan Key Vault Azure. Kunci dapat disimpan dalam brankas kunci atau di HSM terkelola. Untuk menjadi kunci master kolom yang valid, kunci yang dikelola di Azure Key Vault harus merupakan kunci RSA.

Menggunakan Azure CLI, Portal, atau PowerShell

Untuk informasi tentang cara membuat kunci di brankas kunci, lihat:

Untuk informasi tentang cara membuat kunci di HSM terkelola, lihat:

SQL Server Management Studio (SSMS)

Untuk detail tentang cara membuat kunci master kolom di brankas kunci atau HSM terkelola di Azure Key Vault menggunakan SSMS, lihat Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio. Untuk tutorial langkah demi langkah yang menggunakan SSMS dan menyimpan kunci Always Encrypted dalam brankas kunci, lihat tutorial Wizard Always Encrypted (Azure Key Vault).

Membuat Kunci Key Vault Azure Tersedia untuk Aplikasi dan Pengguna

Untuk mengakses kolom terenkripsi, aplikasi Anda harus dapat mengakses Azure Key Vault dan juga memerlukan izin khusus pada kunci master kolom untuk mendekripsi kunci enkripsi kolom yang melindungi kolom.

Untuk mengelola kunci untuk Always Encrypted, Anda memerlukan izin untuk mencantumkan dan membuat kunci master kolom di Azure Key Vault, dan untuk melakukan operasi kriptografi menggunakan kunci.

Azure Key Vault

Jika Anda menyimpan kunci master kolom di brankas kunci dan Anda menggunakan izin peran untuk otorisasi:

  • Identitas aplikasi Anda harus menjadi anggota peran yang mengizinkan tindakan sarana data berikut pada brankas kunci:

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    Cara termampu untuk memberikan izin yang diperlukan kepada aplikasi adalah dengan menambahkan identitasnya ke peran Pengguna Kripto Key Vault. Anda juga dapat membuat peran kustom dengan izin yang diperlukan.

  • Pengguna yang mengelola kunci untuk Always Encrypted harus menjadi anggota atau peran yang mengizinkan tindakan sarana data berikut pada brankas kunci:

    • Microsoft.KeyVault/vaults/keys/create/action
    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    Cara termampu untuk memberi pengguna izin yang diperlukan adalah dengan menambahkan pengguna ke peran Pengguna Kripto Key Vault. Anda juga dapat membuat peran kustom dengan izin yang diperlukan.

Jika Anda menyimpan kunci master kolom di brankas kunci dan Anda menggunakan kebijakan akses untuk otorisasi:

  • Identitas aplikasi Anda memerlukan izin kebijakan akses berikut pada brankas kunci: get, unwrapKey, dan verifikasi.
  • Pengguna yang mengelola kunci untuk Always Encrypted memerlukan izin kebijakan akses berikut pada brankas kunci: membuat, mendapatkan,mencantumkan, menandatangani, unwrapKey, wrapKey, verifikasi.

Untuk informasi umum tentang cara mengonfigurasi autentikasi dan otorisasi untuk brankas kunci, lihat Mengotorisasi prinsip keamanan untuk mengakses Key Vault.

HSM Terkelola

Identitas aplikasi Anda harus menjadi anggota peran yang mengizinkan tindakan sarana data berikut pada HSM terkelola Anda:

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

Microsoft menyarankan Anda membuat peran kustom yang hanya berisi izin di atas.

Pengguna yang mengelola kunci untuk Always Encrypted harus menjadi anggota atau peran yang mengizinkan tindakan sarana data berikut pada kunci:

  • Microsoft.KeyVault/managedHsm/keys/create/action
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read
  • icrosoft. KeyVault/managedHsm/keys/sign/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

Cara termampu untuk memberi pengguna izin di atas adalah dengan menambahkan pengguna ke peran Pengguna Kripto HSM Terkelola. Anda juga dapat membuat peran kustom dengan izin yang diperlukan.

Untuk informasi selengkapnya tentang kontrol akses untuk HSM terkelola, lihat:

Membuat Kunci Master Kolom dalam Modul Keamanan Perangkat Keras menggunakan CNG

Kunci master kolom untuk Always Encrypted dapat disimpan di penyimpanan kunci yang mengimplementasikan Cryptography Next Generation (CNG) API. Biasanya, jenis penyimpanan ini adalah modul keamanan perangkat keras (HSM). HSM adalah perangkat fisik yang melindungi dan mengelola kunci digital dan menyediakan pemrosesan kripto. HSM secara tradisional hadir dalam bentuk kartu plug-in atau perangkat eksternal yang terpasang langsung ke komputer (HSM lokal) atau server jaringan.

Untuk membuat HSM tersedia untuk aplikasi pada komputer tertentu, Key Storage Provider (KSP), yang mengimplementasikan CNG, harus diinstal dan dikonfigurasi pada komputer. Driver klien Always Encrypted (penyedia penyimpanan kunci master kolom di dalam driver), menggunakan KSP untuk mengenkripsi dan mendekripsi kunci enkripsi kolom, dilindungi dengan kunci master kolom yang disimpan di penyimpanan kunci.

Windows menyertakan Penyedia Storage Kunci Perangkat Lunak Microsoft - KSP berbasis perangkat lunak, yang dapat Anda gunakan untuk tujuan pengujian. Lihat Penyedia Storage Kunci CNG.

Membuat Kunci Master Kolom di Penyimpanan Kunci menggunakan CNG/KSP

Kunci master kolom harus berupa kunci asimetris (pasangan kunci publik/privat), menggunakan algoritma RSA. Panjang kunci yang disarankan adalah 2048 atau lebih besar.

Menggunakan Alat khusus HSM

Lihat dokumentasi untuk HSM Anda.

Menggunakan PowerShell

Anda dapat menggunakan .NET API untuk membuat kunci di penyimpanan kunci menggunakan CNG di PowerShell.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

Menggunakan SQL Server Management Studio

Lihat Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio.

Membuat Kunci CNG Tersedia untuk Aplikasi dan Pengguna

Lihat dokumentasi HSM dan KSP Anda tentang cara mengonfigurasi KSP pada mesin dan cara memberikan aplikasi dan pengguna akses ke HSM.

Membuat Kunci Master Kolom dalam Modul Keamanan Perangkat Keras menggunakan CAPI

Kunci master kolom untuk Always Encrypted dapat disimpan di penyimpanan kunci yang mengimplementasikan Cryptography API (CAPI). Biasanya, penyimpanan seperti itu adalah modul keamanan perangkat keras (HSM) - perangkat fisik yang melindungi dan mengelola kunci digital dan menyediakan pemrosesan kripto. HSM secara tradisional hadir dalam bentuk kartu plug-in atau perangkat eksternal yang terpasang langsung ke komputer (HSM lokal) atau server jaringan.

Untuk membuat HSM tersedia untuk aplikasi pada komputer tertentu, Penyedia Layanan Kriptografi (CSP), yang mengimplementasikan CAPI, harus diinstal dan dikonfigurasi pada komputer. Driver klien Always Encrypted (penyedia penyimpanan kunci master kolom di dalam driver), menggunakan CSP untuk mengenkripsi dan mendekripsi kunci enkripsi kolom, dilindungi dengan kunci master kolom yang disimpan di penyimpanan kunci.

Catatan

CAPI adalah API warisan dan tidak digunakan lagi. Jika KSP tersedia untuk HSM Anda, Anda harus menggunakannya, bukan CSP/CAPI.

CSP harus mendukung algoritma RSA untuk digunakan dengan Always Encrypted.

Windows mencakup CSP berbasis perangkat lunak (tidak didukung oleh HSM) berikut yang mendukung RSA dan dapat digunakan untuk tujuan pengujian: Microsoft Enhanced RSA dan Penyedia Kriptografi AES.

Membuat Kunci Master Kolom di Penyimpanan Kunci menggunakan CAPI/CSP

Kunci master kolom harus berupa kunci asimetris (pasangan kunci publik/privat), menggunakan algoritma RSA. Panjang kunci yang disarankan adalah 2048 atau lebih besar.

Menggunakan Alat khusus HSM

Lihat dokumentasi untuk HSM Anda.

Menggunakan SQL Server Management Studio (SSMS)

Lihat Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio.

Membuat Kunci CNG Tersedia untuk Aplikasi dan Pengguna

Lihat dokumentasi untuk HSM dan CSP Anda tentang cara mengonfigurasi CSP pada mesin, dan cara memberikan aplikasi dan pengguna akses ke HSM.

Langkah berikutnya

Lihat juga