Membuat dan menyimpan tombol master kolom untuk Always Encrypted

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Kunci Master Kolom adalah kunci yang melindungi kunci yang digunakan di 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 di 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 Penyimpanan Sertifikat Windows. Saat menggunakan penyimpanan kunci lokal, Anda perlu memastikan bahwa penyimpanan kunci ada di setiap komputer yang menghosting aplikasi Anda, dan bahwa komputer berisi kunci master kolom yang dibutuhkan aplikasi Anda untuk mengakses data yang dilindungi menggunakan Always Encrypted. Saat 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 membuat manajemen kunci lebih mudah 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 Selalu Diaktifkan Terenkripsi?

Driver klien yang diaktifkan Always Encrypted adalah driver klien SQL Server yang memiliki dukungan bawaan untuk menggabungkan Always Encrypted ke dalam aplikasi klien Anda. Driver yang diaktifkan Always Encrypted menyertakan 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 di luar kotak dan jika driver Anda mendukung penyedia penyimpanan kunci kustom - Mengembangkan aplikasi menggunakan Always Encrypted.

Penyimpanan Kunci mana yang Didukung di Alat SQL?

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 modul SqlServer PowerShell verion 21.1.18235 atau yang lebih baru. Azure Data Studio saat ini tidak mendukung HSM terkelola.

  • Penyimpanan Sertifikat Windows.

  • 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 bisa menjadi sertifikat yang disimpan di Windows Certificate Store. 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 Windows Certificate Store, lihat tutorial Always Encrypted Wizard (Windows Certificate Store).

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 untuk 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 kunci Always Encrypted (pada semua komputer 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 Azure Key Vault. Kunci dapat disimpan di brankas kunci atau di HSM terkelola. Untuk menjadi kunci master kolom yang valid, kunci yang dikelola di Azure Key Vault harus berupa 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 Azure Key Vault 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 term mudah 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 term mudah 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: dapatkan, unwrapKey, dan verifikasi.
  • Pengguna yang mengelola kunci untuk Always Encrypted memerlukan izin kebijakan akses berikut pada brankas kunci: membuat, mendapatkan, mencantumkan, menandatangani, membuka bungkusKey, wrapKey, memverifikasi.

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 data plane 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 data plane 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 term mudah 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 datang 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 Penyimpanan Kunci (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 mencakup Penyedia Penyimpanan Kunci Perangkat Lunak Microsoft - KSP berbasis perangkat lunak, yang dapat Anda gunakan untuk tujuan pengujian. Lihat Penyedia Penyimpanan 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 direkomendasikan adalah 2048 atau lebih besar.

Menggunakan Alat khusus HSM

Lihat dokumentasi untuk HSM Anda.

Menggunakan PowerShell

Anda dapat menggunakan API .NET 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 semacam itu adalah modul keamanan perangkat keras (HSM) - perangkat fisik yang melindungi dan mengelola kunci digital dan menyediakan pemrosesan kripto. HSM secara tradisional datang 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 berikut (tidak didukung oleh HSM) 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 direkomendasikan 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 komputer, dan cara memberikan aplikasi dan pengguna akses ke HSM.

Langkah berikutnya

Lihat Juga