Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server

Berlaku untuk:yes Dimulai dengan SQL Server 2019 (15.x) - hanya Windows

Tutorial ini mengajarkan Anda cara memulai Always Encrypted dengan enklave aman di SQL Server. Ini akan menunjukkan kepada Anda:

  • Cara membuat lingkungan dasar untuk menguji dan mengevaluasi Always Encrypted dengan enklave aman.
  • Cara mengenkripsi data di tempat dan mengeluarkan kueri rahasia yang kaya terhadap kolom terenkripsi menggunakan SQL Server Management Studio (SSMS).

Prasyarat

Untuk mulai menggunakan Always Encrypted dengan enklave aman, Anda memerlukan setidaknya dua komputer (dapat berupa komputer virtual):

  • Komputer SQL Server untuk menghosting SQL Server dan SSMS.
  • Komputer HGS untuk menjalankan Host Guardian Service, yang diperlukan untuk pengesahan enklave.

SQL Server persyaratan komputer

  • SQL Server 2019 (15.x) atau yang lebih baru.
  • Windows 10, versi 1809 atau yang lebih baru - Edisi perusahaan, Windows 11 atau yang lebih baru - Edisi perusahaan, Windows Server 2019 atau yang lebih baru - Edisi pusat data. Edisi Windows 10/11 dan Windows Server lainnya tidak mendukung pengesahan dengan HGS.
  • Dukungan CPU untuk teknologi virtualisasi:
    • Intel VT-x dengan Tabel Halaman yang Diperluas.
    • AMD-V dengan Pengindeksan Virtualisasi Cepat.
    • Jika Anda menjalankan SQL Server di VM:
      • Di Azure, gunakan ukuran VM Generasi 2 (disarankan) atau gunakan ukuran VM Generasi 1 dengan virtualisasi berlapis diaktifkan. Periksa dokumentasi ukuran VM individual untuk menentukan ukuran VM Generasi 1 mana yang mendukung virtualisasi berlapis.
      • Pada Hyper-V 2016 atau yang lebih baru (di luar Azure), pastikan VM Anda adalah VM Generasi 2 (disarankan) atau VM Generasi 1 dengan virtualisasi berlapis diaktifkan. Untuk informasi selengkapnya, lihat Haruskah saya membuat komputer virtual generasi 1 atau 2 di Hyper-V? dan Mengonfigurasi virtualisasi berlapis.
      • Pada VMware vSphere 6.7 atau yang lebih baru, aktifkan dukungan Virtualization Based Security untuk VM seperti yang dijelaskan dalam dokumentasi VMware.
      • Hypervisor dan cloud publik lainnya juga dapat mendukung kemampuan virtualisasi berlapis yang memungkinkan Always Encrypted dengan Enklave VBS. Periksa dokumentasi solusi virtualisasi Anda untuk petunjuk kompatibilitas dan konfigurasi.
  • SQL Server Management Studio (SSMS) 18.3 atau yang lebih baru.

Sebagai alternatif, Anda dapat menginstal SSMS di komputer lain.

Peringatan

Di lingkungan produksi, menjalankan SSMS atau alat manajemen kunci lainnya di komputer SQL Server dapat mengurangi manfaat keamanan menggunakan Always Encrypted. Secara umum, menjalankan alat tersebut pada komputer yang berbeda disarankan. Lihat Pertimbangan Keamanan untuk Manajemen Kunci untuk detailnya.

Persyaratan komputer HGS

  • Windows Server 2019 edisi Standar atau Pusat Data
  • 2 CPU
  • RAM 8 GB
  • Penyimpanan 100 GB

Catatan

Komputer HGS tidak boleh bergabung ke domain sebelum Anda mulai.

Langkah 1: Mengonfigurasi komputer HGS

Dalam langkah ini, Anda akan mengonfigurasi komputer HGS untuk menjalankan Pengesahan kunci host pendukung Host Guardian Service.

  1. Masuk ke komputer HGS sebagai administrator (admin lokal), buka konsol Windows PowerShell yang ditinggikan dan tambahkan peran Layanan Wali Host dengan menjalankan perintah berikut:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. Setelah komputer HGS di-boot ulang, masuk dengan akun admin Anda lagi, buka konsol Windows PowerShell yang ditinggikan dan jalankan perintah berikut untuk menginstal Layanan Wali Host dan konfigurasikan domainnya. Kata sandi yang Anda tentukan di sini hanya akan berlaku untuk kata sandi Mode Perbaikan Layanan Direktori untuk Direktori Aktif; ini tidak akan mengubah kata sandi masuk akun admin Anda. Anda dapat memberikan nama domain apa pun yang Anda pilih untuk -HgsDomainName.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Setelah komputer di-boot ulang lagi, masuk dengan akun admin Anda (yang sekarang juga merupakan Domain Admin), buka konsol Windows PowerShell yang ditinggikan, dan konfigurasikan pengesahan kunci host untuk instans HGS Anda.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Temukan alamat IP komputer HGS dengan menjalankan perintah berikut. Simpan alamat IP ini untuk langkah-langkah selanjutnya.

    Get-NetIPAddress  
    

Catatan

Atau, jika Anda ingin mereferensikan komputer HGS Anda dengan nama DNS, Anda bisa menyiapkan penerus dari server DNS perusahaan Anda ke pengontrol domain HGS baru.

Langkah 2: Mengonfigurasi komputer SQL Server sebagai host yang dijaga

Dalam langkah ini, Anda akan mengonfigurasi komputer SQL Server sebagai host yang dijaga yang terdaftar di HGS menggunakan pengesahan kunci host.

Peringatan

Pengesahan kunci host dianggap sebagai mode pengesahan yang lebih lemah. Jika memungkinkan, Anda harus menggunakan pengesahan TPM untuk lingkungan produksi. Untuk informasi selengkapnya, lihat Mode pengesahan.

  1. Masuk ke komputer SQL Server Anda sebagai administrator, buka konsol Windows PowerShell yang ditinggikan, dan ambil nama komputer Anda dengan mengakses variabel nama komputer.

    $env:computername 
    
  2. Instal fitur Guarded Host, yang juga akan menginstal Hyper-V (jika belum diinstal).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Mulai ulang komputer SQL Server Anda ketika diminta untuk menyelesaikan penginstalan Hyper-V.

  4. Jika komputer SQL Server Anda adalah komputer virtual, komputer fisik yang tidak mendukung Boot Aman UEFI, atau komputer fisik yang tidak dilengkapi dengan IOMMU, Anda perlu menghapus persyaratan VBS untuk fitur keamanan platform.

    1. Hapus persyaratan untuk Boot Aman dan IOMMU dengan menjalankan perintah berikut di komputer SQL Server Anda di konsol PowerShell yang ditingkatkan:

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Mulai ulang komputer SQL Server lagi untuk membuat VBS online dengan persyaratan yang diturunkan.

      Restart-Computer
      
  5. Masuk ke komputer SQL Server sebagai administrator lagi, buka konsol Windows PowerShell yang ditinggikan, buat kunci host unik, dan ekspor kunci publik yang dihasilkan ke file.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Salin file kunci host secara manual, yang dihasilkan pada langkah sebelumnya, ke komputer HGS. Instruksi di bawah ini mengasumsikan nama file Anda adalah hostkey.cer dan Anda menyalinnya ke Desktop Anda di komputer HGS.

  7. Di komputer HGS, buka konsol Windows PowerShell yang ditinggikan dan daftarkan kunci host komputer SQL Server Anda dengan HGS:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. Di komputer SQL Server, jalankan perintah berikut di konsol Windows PowerShell yang ditingkatkan, untuk memberi tahu komputer SQL Server tempat membuktikan. Pastikan Anda menentukan alamat IP atau nama DNS komputer HGS Anda di kedua lokasi alamat.

    # use http, and not https
    Set-HgsClientConfiguration -AttestationServerUrl http://<IP address or DNS name>/Attestation -KeyProtectionServerUrl http://<IP address or DNS name>/KeyProtection/  
    

Hasil dari perintah di atas harus menunjukkan bahwa AttestationStatus = Passed.

Jika Anda mendapatkan kesalahan HostUnreachable, itu berarti komputer SQL Server Anda tidak dapat berkomunikasi dengan HGS. Pastikan Anda dapat melakukan ping pada komputer HGS.

Kesalahan UnauthorizedHost menunjukkan bahwa kunci umum tidak terdaftar di server HGS - ulangi langkah 5 dan 6 untuk mengatasi kesalahan.

Jika semuanya gagal, jalankan Remove-HgsClientHostKey dan ulangi langkah 4-7.

Langkah 3: Aktifkan Always Encrypted dengan enklave aman di SQL Server

Dalam langkah ini, Anda akan mengaktifkan fungsionalitas Always Encrypted menggunakan enklave dalam instans SQL Server Anda.

  1. Menggunakan SSMS, sambungkan ke instans SQL Server Anda sebagai sysadmin tanpa Always Encrypted diaktifkan untuk koneksi database.

    1. Mulai SQL Server Management Studio.

    2. Dalam dialog Koneksi ke Server, tentukan nama server Anda, pilih metode autentikasi dan tentukan kredensial Anda.

    3. Pilih Opsi >> dan pilih tab Always Encrypted.

    4. Pastikan kotak centang Aktifkan Always Encrypted (enkripsi kolom)tidak dipilih.

      Connect to server without Always Encrypted

    5. Pilih Sambungkan.

  2. Buka jendela kueri baru, dan jalankan pernyataan di bawah ini untuk mengatur jenis enklave aman ke Virtualization Based Security (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Mulai ulang instans SQL Server Anda agar perubahan sebelumnya berlaku. Anda dapat menghidupkan ulang instans di SSMS dengan mengklik kanan di Object Explorer dan memilih Mulai Ulang. Setelah instans dimulai ulang, sambungkan kembali ke instans tersebut.

  4. Konfirmasikan enklave aman sekarang dimuat dengan menjalankan kueri berikut:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    Kueri harus mengembalikan hasil berikut:

    name value value_in_use
    jenis enklave enkripsi kolom 1 1

Langkah 4: Membuat database sampel

Dalam langkah ini, Anda akan membuat database dengan beberapa data sampel, yang akan Anda enkripsi nanti.

  1. Menggunakan instans SQL Server Management Studio dari langkah sebelumnya, jalankan pernyataan di bawah ini di jendela kueri untuk membuat database baru, bernama ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Buat tabel baru, bernama Karyawan.

    USE [ContosoHR];
    GO
    
    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  3. Menambahkan beberapa catatan karyawan ke tabel Karyawan.

    USE [ContosoHR];
    GO
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Langkah 5: Memprovisikan kunci berkemampuan enklave

Dalam langkah ini, Anda akan membuat kunci master kolom dan kunci enkripsi kolom yang memungkinkan komputasi enklave.

  1. Menggunakan instans SSMS dari langkah sebelumnya, di Object Explorer, perluas database Anda dan navigasi ke Keamanan>Kunci Always Encrypted.

  2. Sediakan kunci master kolom baru yang berkemampuan enklave:

    1. Klik kanan Kunci Always Encrypted dan pilih Kunci Master Kolom Baru... .

    2. Pilih nama kunci master kolom Anda: CMK1.

    3. Pastikan Anda memilih Windows Certificate Store (Pengguna Saat Ini atau Komputer Lokal) atau Azure Key Vault.

    4. Pilih Perbolehkan komputasi enklave.

    5. Jika Anda memilih Azure Key Vault, masuk ke Azure dan pilih brankas kunci Anda. Untuk informasi selengkapnya tentang cara membuat brankas kunci untuk Always Encrypted, lihat Mengelola brankas kunci Anda dari portal Azure.

    6. Pilih sertifikat atau kunci Nilai Kunci Azure Anda jika sudah ada, atau pilih tombol Buat Sertifikat untuk membuat sertifikat baru.

    7. PilihOK.

      Allow enclave computations

  3. Buat kunci enkripsi kolom berkemampuan enklave baru:

    1. Klik kanan Kunci Always Encrypted dan pilih Kunci Enkripsi Kolom Baru.
    2. Masukkan nama untuk kunci enkripsi kolom baru: CEK1.
    3. Di menu turun-bawah Kunci master kolom, pilih kunci master kolom yang Anda buat di langkah sebelumnya.
    4. PilihOK.

Langkah 6: Mengenkripsi beberapa kolom di tempat

Dalam langkah ini, Anda akan mengenkripsi data yang disimpan di kolom SSN dan Gaji di dalam enklave sisi server, lalu menguji kueri SELECT pada data.

  1. Buka instans SQL Server Management Studio baru dan sambungkan ke instans SQL Server Anda dengan Always Encrypted diaktifkan untuk koneksi database.

    1. Mulai SSMS instans baru.

    2. Dalam dialog Koneksi ke Server, tentukan nama server Anda, pilih metode autentikasi dan tentukan kredensial Anda.

    3. Pilih Opsi >> dan pilih tab Always Encrypted.

    4. Pilih kotak centang Aktifkan Always Encrypted (enkripsi kolom) dan tentukan URL pengesahan enklave Anda (misalnya, http:// hgs.bastion.local/Attestation).

      Connect to server with attestation using SSMS

    5. Pilih Sambungkan.

    6. Jika Anda diminta untuk mengaktifkan Parameterisasi untuk kueri Always Encrypted, pilih Aktifkan.

  2. Menggunakan instans SSMS yang sama (dengan Always Encrypted diaktifkan), buka jendela kueri baru dan enkripsi kolom SSN dan Gaji dengan menjalankan kueri di bawah ini.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Catatan

    Perhatikan pernyataan ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE untuk menghapus cache rencana kueri untuk database dalam skrip di atas. Setelah mengubah tabel, Anda perlu menghapus rencana untuk semua batch dan prosedur tersimpan yang mengakses tabel, untuk menyegarkan informasi enkripsi parameter.

  3. Untuk memverifikasi kolom SSN dan Gaji yang saat ini dienkripsi, buka jendela kueri baru di instans SSMS tanpa Always Encrypted diaktifkan untuk koneksi database dan jalankan pernyataan di bawah ini. Jendela kueri harus mengembalikan nilai terenkripsi di kolom SSN dan Gaji. Jika Anda menjalankan kueri yang sama menggunakan instans SSMS dengan Always Encrypted diaktifkan, Anda akan melihat data didekripsi.

    SELECT * FROM [HR].[Employees];
    

Langkah 7: Jalankan kueri kaya terhadap kolom terenkripsi

Sekarang, Anda dapat menjalankan kueri kaya terhadap kolom terenkripsi. Beberapa pemrosesan kueri akan dilakukan di dalam enklave sisi server Anda.

  1. Dalam instans SSMS dengan Always Encrypted diaktifkan, pastikan Parameterisasi untuk Always Encrypted juga diaktifkan.

    1. Pilih Alat dari menu utama SSMS.
    2. Pilih Opsi... .
    3. Navigasi ke Kueri Eksekusi>SQL Server>Tingkat Lanjut.
    4. Pastikan bahwa Aktifkan Parameterisasi untuk Always Encrypted dicentang.
    5. PilihOK.
  2. Buka jendela kueri baru, tempelkan dan jalankan kueri di bawah ini. Kueri harus mengembalikan nilai teksbersih dan baris yang memenuhi kriteria pencarian yang ditentukan.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Coba kueri yang sama lagi dalam instans SSMS yang tidak mengaktifkan Always Encrypted, dan catat kegagalan yang terjadi.

Langkah berikutnya

Setelah menyelesaikan tutorial ini, Anda dapat membuka salah satu tutorial berikut:

Lihat juga