Bagikan melalui


Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault (SQL Server)

Konektor SQL Server untuk Microsoft Azure Key Vault memungkinkan enkripsi SQL Server memanfaatkan layanan Azure Key Vault sebagai penyedia Extensible Key Management (EKM) untuk melindungi kunci enkripsinya.

Disertakan dalam topik ini:

Penggunaan EKM

Organisasi dapat menggunakan enkripsi SQL Server untuk melindungi data sensitif. Enkripsi SQL Server mencakup Transparent Data Encryption (TDE), Column Level Encryption (CLE), dan Backup Encryption. Dalam semua kasus ini, data dienkripsi menggunakan kunci enkripsi data simetrik. Kunci enkripsi data simetris dilindungi lebih lanjut dengan mengenkripsinya menggunakan hierarki kunci yang disimpan di SQL Server. Atau, arsitektur penyedia EKM memungkinkan SQL Server melindungi kunci enkripsi data dengan menggunakan kunci asimetris yang disimpan di luar SQL Server di penyedia kriptografi eksternal. Menggunakan arsitektur penyedia EKM menambahkan lapisan keamanan tambahan dan memungkinkan organisasi untuk memisahkan manajemen kunci dan data.

Konektor SQL Server untuk Azure Key Vault memungkinkan SQL Server memanfaatkan layanan brankas kunci yang dapat diskalakan, berkinerja tinggi, dan sangat tersedia sebagai penyedia EKM untuk perlindungan kunci enkripsi. Layanan brankas kunci dapat digunakan dengan penginstalan SQL Server di Microsoft Azure Virtual Machines dan untuk server lokal. Layanan brankas kunci juga menyediakan opsi untuk menggunakan Modul Keamanan Perangkat Keras (HSM) yang dikontrol dan dipantau dengan ketat untuk tingkat perlindungan yang lebih tinggi untuk kunci enkripsi asimetris. Untuk informasi selengkapnya tentang brankas kunci, lihat Azure Key Vault.

Gambar berikut meringkas alur proses EKM menggunakan brankas kunci. Nomor langkah proses dalam gambar tidak dimaksudkan untuk mencocokkan nomor langkah persiapan yang ditunjukkan setelah gambar.

SQL Server EKM menggunakan Azure Key Vault

Langkah 1: Siapkan Key Vault untuk digunakan oleh SQL Server

Gunakan langkah-langkah berikut untuk menyiapkan brankas kunci untuk digunakan dengan SQL Server Database Engine untuk perlindungan kunci enkripsi. Vault mungkin sudah digunakan untuk organisasi. Saat vault tidak ada, Administrator Azure di organisasi Anda yang ditunjuk untuk mengelola kunci enkripsi dapat membuat brankas, menghasilkan kunci asimetris di vault, lalu mengotorisasi SQL Server untuk menggunakan kunci. Untuk membiasakan diri dengan tinjauan layanan Azure Key Vault Memulai dengan Azure Key Vault, dan referensi Cmdlet PowerShell Azure Key Vault .

Penting

Jika Anda memiliki beberapa langganan Azure, Anda harus menggunakan langganan yang berisi SQL Server.

  1. Buat brankas: Buat brankas dengan mengikuti instruksi di bagian Membuat brankas kunci dalam Mulai menggunakan Azure Key Vault. Catat nama vault. Topik ini menggunakan ContosoKeyVault sebagai nama brankas kunci.

  2. Menghasilkan kunci asimetris di brankas: Kunci asimetris di brankas kunci digunakan untuk melindungi kunci enkripsi SQL Server. Hanya bagian publik dari kunci asimetris yang pernah meninggalkan brankas, bagian privat tidak pernah diekspor oleh brankas. Semua operasi kriptografi yang menggunakan kunci asimetris didelegasikan ke Azure Key Vault, dan dilindungi oleh keamanan brankas kunci.

    Ada beberapa cara agar Anda dapat menghasilkan kunci asimetris dan menyimpannya di vault. Anda dapat membuat kunci secara eksternal, dan mengimpor kunci ke dalam vault sebagai file .pfx. Atau buat kunci langsung di brankas dengan menggunakan API brankas kunci.

    Konektor SQL Server memerlukan kunci asimetris menjadi RSA 2048-bit, dan nama kunci hanya dapat menggunakan karakter "a-z", "A-Z", "0-9", dan "-". Dalam dokumen ini nama kunci asimetris disebut sebagai ContosoMasterKey. Ganti ini dengan nama unik yang Anda gunakan untuk kunci.

    Penting

    Mengimpor kunci asimetris sangat disarankan untuk skenario produksi karena memungkinkan administrator untuk menyimpan kunci dalam sistem penyimpanan kunci. Jika kunci asimetris dibuat di brankas, kunci tersebut tidak dapat diekskrow karena kunci privat tidak pernah dapat meninggalkan brankas. Kunci yang digunakan untuk melindungi data penting harus diekskrowing. Hilangnya kunci asimetris akan mengakibatkan data yang tidak dapat dipulihkan secara permanen.

    Penting

    Brankas kunci mendukung beberapa versi kunci bernama yang sama. Kunci yang akan digunakan oleh Konektor SQL Server tidak boleh diberi versi atau digulung. Jika administrator ingin menggulung kunci yang digunakan untuk enkripsi SQL Server, kunci baru dengan nama yang berbeda harus dibuat di vault dan digunakan untuk mengenkripsi DEK.

    Untuk informasi selengkapnya tentang cara mengimpor kunci ke brankas kunci atau membuat kunci di brankas kunci (tidak disarankan untuk lingkungan produksi), lihat Menambahkan kunci atau rahasia ke bagian brankas kunci di Mulai menggunakan Azure Key Vault.

  3. Dapatkan Perwakilan Layanan Azure Active Directory untuk digunakan untuk SQL Server: Saat organisasi mendaftar untuk layanan cloud Microsoft, organisasi tersebut mendapatkan Azure Active Directory. Buat Service Principals di Azure Active Directory untuk digunakan SQL Server (untuk mengautentikasi dirinya ke Azure Active Directory) saat mengakses brankas kunci.

    • Satu Perwakilan Layanan akan diperlukan oleh administrator SQL Server untuk mengakses vault saat mengonfigurasi SQL Server untuk menggunakan enkripsi.

    • Perwakilan Layanan lain akan diperlukan oleh SQL Server Database Engine untuk mengakses vault untuk membuka kunci yang digunakan dalam enkripsi SQL Server.

    Untuk informasi selengkapnya tentang cara mendaftarkan aplikasi dan membuat perwakilan layanan, lihat bagian Mendaftarkan Aplikasi dengan Azure Active Directory di Memulai Azure Key Vault. Proses pendaftaran mengembalikan ID Aplikasi (juga dikenal sebagai ID KLIEN ) dan Kunci Autentikasi (juga dikenal sebagai Rahasia ) untuk setiap Agen Layanan Azure Active Directory . Ketika digunakan dalam pernyataan CREATE CREDENTIAL, tanda hubung harus dihapus dari ID KLIEN . Rekam ini untuk digunakan dalam skrip di bawah ini:

    • Service Principal untuk login sysadmin: CLIENTID_sysadmin_login dan SECRET_sysadmin_login

    • Perwakilan Layanan untuk Mesin Database SQL Server: CLIENTID_DBEngine dan SECRET_DBEngine.

  4. Memberikan Izin bagi Prinsipal Layanan untuk mengakses Key Vault: Prinsipal CLIENTID_sysadmin_login dan CLIENTID_DBEngineService memerlukan izin mendapatkan, mendaftarkan, wrapKey, dan unwrapKey di Key Vault. Jika Anda ingin membuat kunci melalui SQL Server, Anda juga perlu memberikan izin buat di brankas kunci.

    Penting

    Pengguna harus memiliki setidaknya operasi wrapKey dan unwrapKey untuk brankas kunci.

    Untuk informasi selengkapnya tentang memberikan izin ke vault, lihat bagian Otorisasi aplikasi untuk menggunakan kunci atau rahasia di Mulai menggunakan Azure Key Vault.

    Tautan ke dokumentasi Azure Key Vault

Langkah 2: Instal Konektor SQL Server

Konektor SQL Server diunduh dan diinstal oleh administrator komputer SQL Server. Konektor SQL Server tersedia sebagai unduhan dari Microsoft Download Center. Cari Konektor SQL Server untuk Microsoft Azure Key Vault, tinjau detail, persyaratan sistem, serta instruksi penginstalan, kemudian pilih untuk mengunduh konektor tersebut dan memulai penginstalan dengan menggunakan Jalankan. Tinjau lisensi dan terima lisensi dan lanjutkan.

Secara default konektor diinstal di C:\Program Files\SQL Server Connector untuk Microsoft Azure Key Vault. Lokasi ini dapat diubah selama penyiapan. (Jika diubah, sesuaikan skrip di bawah ini.)

Saat menyelesaikan penginstalan, berikut ini diinstal pada komputer:

  • Microsoft.AzureKeyVaultService.EKM.dll: Ini adalah DLL penyedia EKM kriptografi yang perlu didaftarkan ke SQL Server dengan menggunakan pernyataan CREATE CRYPTOGRAPHIC PROVIDER.

  • Konektor SQL Server Azure Key Vault: Ini adalah layanan Windows yang memungkinkan penyedia EKM kriptografi berkomunikasi dengan brankas kunci.

Penginstalan Konektor SQL Server juga memungkinkan Anda mengunduh skrip sampel untuk enkripsi SQL Server secara opsional.

Langkah 3: Mengonfigurasi SQL Server untuk menggunakan penyedia EKM untuk Key Vault

Izin-izin

Untuk menyelesaikan seluruh proses ini, diperlukan izin kontrol server atau keanggotaan dalam peran server tetap sysadmin. Tindakan tertentu memerlukan izin berikut:

  • Untuk membuat penyedia kriptografi, memerlukan izin CONTROL SERVER atau keanggotaan dalam peran server tetap sysadmin.

  • Untuk mengubah opsi konfigurasi dan menjalankan pernyataan KONFIGURASI ULANG, Anda harus diberikan izin tingkat server ALTER SETTINGS. Izin ALTER SETTINGS secara implisit dipegang oleh peran server tetap sysadmin dan serveradmin.

  • Untuk membuat kredensial, diperlukan izin MENGUBAH KREDENSIAL APAPUN.

  • Untuk menambahkan kredensial ke login, memerlukan izin ubah login apa pun.

  • Untuk membuat kunci asimetris, memerlukan izin CREATE ASYMMETRIC KEY.

Untuk mengonfigurasi SQL Server untuk menggunakan penyedia kriptografi

  1. Konfigurasikan Mesin Database untuk menggunakan EKM, dan daftarkan (buat) penyedia kriptografi dengan SQL Server.

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO
    
  2. Siapkan kredensial SQL Server untuk masuk administrator SQL Server untuk menggunakan brankas kunci untuk menyiapkan dan mengelola skenario enkripsi SQL Server.

    Penting

    Argumen IDENTITYCREATE CREDENTIAL memerlukan nama brankas kunci. Argumen SECRETCREATE CREDENTIAL memerlukan ID Klien <> (tanpa tanda hubung) dan Secret <> untuk diteruskan bersama-sama tanpa spasi di antara mereka.

    Dalam contoh berikut, ID Klien (00001111-aaaa-2222-bbbb-3333cccc4444) dilucuti dari tanda hubung dan dimasukkan sebagai string 00001111AAAA2222BBBB3333CCCC4444 dan Rahasia diwakili oleh string SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Untuk contoh penggunaan variabel untuk argumen CREATE CREDENTIAL dan secara terprogram menghapus tanda hubung dari ID Klien, lihat CREATE CREDENTIAL (Transact-SQL).

  3. Jika Anda mengimpor kunci asimetris seperti yang dijelaskan sebelumnya di langkah 1, bagian 3, buka kunci dengan memberikan nama kunci Anda dalam contoh berikut.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Meskipun tidak direkomendasikan untuk produksi (karena kunci tidak dapat diekspor), dimungkinkan untuk membuat kunci asimetris langsung di vault dari SQL Server. Jika Anda tidak mengimpor kunci sebelumnya, buat kunci asimetris di brankas kunci untuk pengujian dengan menggunakan skrip berikut. Jalankan skrip, menggunakan login yang disediakan dengan kredensial sysadmin_ekm_cred.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Saran

Pengguna yang menerima kesalahan Tidak dapat mengekspor kunci publik dari penyedia. Kode kesalahan penyedia: 2053. harus memeriksa mereka mendapatkan, daftar , wrapKey, dan izin unwrapKey di brankas kunci.

Untuk informasi selengkapnya, lihat yang berikut ini:

Contoh

Contoh A: Enkripsi Data Transparan dengan Menggunakan Kunci Asimetris dari Key Vault

Setelah menyelesaikan langkah-langkah di atas, buat kredensial dan login, buat kunci enkripsi database yang dilindungi oleh kunci asimetris di brankas kunci. Gunakan kunci enkripsi database untuk mengenkripsi database dengan TDE.

Untuk mengenkripsi database memerlukan izin CONTROL pada database.

Untuk mengaktifkan TDE menggunakan EKM dan Key Vault
  1. Buat kredensial SQL Server untuk Mesin Database digunakan saat mengakses key vault EKM selama pemuatan basis data.

    Penting

    Argumen IDENTITYCREATE CREDENTIAL memerlukan nama brankas kunci. Argumen SECRETCREATE CREDENTIAL memerlukan ID Klien <> (tanpa tanda hubung) dan Secret <> untuk diteruskan bersama-sama tanpa spasi di antara mereka.

    Dalam contoh berikut, ID Klien (00001111-aaaa-2222-bbbb-3333cccc4444) dilucuti dari tanda hubung dan dimasukkan sebagai string 00001111AAAA2222BBBB3333CCCC4444 dan Rahasia diwakili oleh string SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Buat login SQL Server untuk digunakan oleh Mesin Database untuk TDE, dan tambahkan kredensial ke dalamnya. Contoh ini menggunakan kunci asimetris CONTOSO_KEY yang disimpan di brankas kunci, yang diimpor atau dibuat sebelumnya untuk database master, seperti yang dijelaskan dalam Langkah 3, bagian 3 di atas.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. Buat kunci enkripsi database (DEK) yang akan digunakan untuk TDE. DEK dapat dibuat menggunakan algoritma atau panjang kunci yang didukung SQL Server. DEK akan dilindungi oleh kunci asimetris di brankas kunci.

    Contoh ini menggunakan kunci asimetris CONTOSO_KEY yang disimpan di brankas kunci, yang diimpor atau dibuat sebelumnya, seperti yang dijelaskan dalam Langkah 3, bagian 3 di atas.

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    Untuk informasi selengkapnya, lihat yang berikut ini:

Contoh B: Mengenkripsi Cadangan dengan Menggunakan Kunci Asimetris dari Key Vault

Pencadangan terenkripsi didukung dimulai dengan SQL Server 2014. Contoh berikut membuat dan memulihkan cadangan yang dienkripsi kunci enkripsi data yang dilindungi oleh kunci asimetris di brankas kunci.

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

Contoh kode pemulihan.

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Untuk informasi selengkapnya tentang opsi pencadangan, lihat BACKUP (Transact-SQL).

Contoh C: Enkripsi Tingkat Kolom dengan Menggunakan Kunci Asimetris dari Key Vault

Contoh berikut membuat kunci simetris yang dilindungi oleh kunci asimetris di brankas kunci. Kemudian kunci simetris digunakan untuk mengenkripsi data dalam database.

Contoh ini menggunakan kunci asimetris CONTOSO_KEY yang disimpan di brankas kunci, yang diimpor atau dibuat sebelumnya, seperti yang dijelaskan dalam Langkah 3, bagian 3 di atas. Untuk menggunakan kunci asimetris ini dalam database ContosoDatabase, Anda harus menjalankan pernyataan CREATE ASYMMETRIC KEY lagi, untuk menyediakan database ContosoDatabase dengan referensi ke kunci.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Lihat Juga

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)Extensible Key Management (EKM)Mengaktifkan TDE Menggunakan EKMBackup EnkripsiMembuat Cadangan Terenkripsi