Kılavuz: HGS kullanarak doğrulama ile SQL Server'da güvenli alanlarla Always Encrypted kullanmaya başlama

Şunlar için geçerlidir: Windows'da SQL Server 2019 (15.x) ve sonraki sürümleri

Bu öğreticide, kapanım kanıtlama için Host Guardian Hizmeti (HGS) kullanarak SQL Server'da güvenli kapanımlarla Always Encrypted'ı kullanmaya başlamayı öğreneceksiniz. Size şunu gösterir:

  • HGS'nin enklav teyidi için yapılandırıldığı güvenli enclavelar ile Always Encrypted'ı test etmek ve değerlendirmek amacıyla temel bir ortam oluşturma.
  • SQL Server Management Studio (SSMS) kullanarak verileri yerinde şifreleme ve şifrelenmiş sütunlara karşı zengin gizli sorgular verme.

Kanıtlama olmadan güvenli kuşatmalarla Always Encrypted'ı ayarlamayı öğrenmek istiyorsanız bkz . Öğretici: SQL Server'da güvenli kuşatmalarla Always Encrypted'ı kullanmaya başlama.

Önkoşullar

Always Encrypted'ı güvenli kuşatmalarla kullanmaya başlamak için en az iki bilgisayara ihtiyacınız vardır (bunlar sanal makine olabilir):

  • SQL Server ve SSMS'yi barındıracak SQL Server bilgisayarı.
  • Kapanım kanıtlama için gerekli olan Host Guardian Hizmeti'ni çalıştıracak olan HGS bilgisayarı.

SQL Server bilgisayar gereksinimleri

  • SQL Server 2019 (15.x) veya üzeri.
  • Windows 10, sürüm 1809 veya üzeri - Enterprise sürümü, Windows 11 veya üzeri - Enterprise sürümü, Windows Server 2019 veya üzeri - Datacenter sürümü. Windows 10/11 ve Windows Server'ın diğer sürümleri HGS ile kanıtlamayı desteklemez.
  • Sanallaştırma teknolojileri için CPU desteği:
    • Genişletilmiş Sayfa Tabloları ile Intel VT-x.
    • AMD-V Hızlı Sanallaştırma İndeksleme ile.
    • SQL Server'i bir VM'de çalıştırıyorsanız:
      • Azure'da , 2. Nesil VM boyutu (önerilir) veya iç içe sanallaştırma etkinleştirilmiş bir 1. Nesil VM boyutu kullanın. hangi 1. Nesil VM boyutlarının iç içe sanallaştırmayı desteklediğini belirlemek için tek tek VM boyutları belgelerine bakın.
      • Hyper-V 2016 veya sonraki bir sürümde (Azure dışında), VM'nizin 2. Nesil VM (önerilir) veya iç içe sanallaştırma etkinleştirilmiş bir 1. Nesil VM olduğundan emin olun. Daha fazla bilgi için bkz. Hyper-V'de 1. veya 2. nesil bir sanal makine mi oluşturmalıyım? ve İç içe sanallaştırmayı yapılandırma.
      • VMware vSphere 7.0 veya sonraki sürümlerinde, VMware belgelerinde açıklandığı gibi VM için Sanallaştırma Tabanlı Güvenlik desteğini etkinleştirin.
      • Diğer hiper yöneticiler ve genel bulutlar, VBS Enclaves ile Always Encrypted'ı etkinleştiren iç içe sanallaştırma özelliklerini de destekleyebilmektedir. Uyumluluk ve yapılandırma yönergeleri için sanallaştırma çözümünüzün belgelerine bakın.
  • SQL Server Management Studio’nun (SSMS) en son sürümü. Alternatif olarak, SSMS'yi başka bir makineye yükleyebilirsiniz.

Uyarı

Üretim ortamlarında SQL Server bilgisayarında SSMS veya diğer anahtar yönetimi araçlarını çalıştırmak Always Encrypted kullanmanın güvenlik avantajlarını azaltabilir. Genel olarak, bu tür araçların farklı bir makinede çalıştırılması önerilir. Daha fazla bilgi için bkz. Anahtar Yönetimi için Güvenlik Konuları.

HGS bilgisayar gereksinimleri

  • Windows Server 2019 Standard veya Datacenter sürümü
  • 2 CPU'ler
  • 8 GB RAM
  • 100 GB depolama alanı

Uyarı

Başlamadan önce HGS bilgisayarı bir etki alanına katılmamalıdır.

1. Adım: HGS bilgisayarını yapılandırma

Bu adımda HGS bilgisayarını, konak anahtarı doğrulamasını destekleyen Host Guardian Service'i çalıştıracak şekilde yapılandıracaksınız.

  1. HGS bilgisayarında yönetici (yerel yönetici) olarak oturum açın, yükseltilmiş bir Windows PowerShell konsolu açın ve aşağıdaki komutu çalıştırarak Konak Koruyucu Hizmeti rolünü ekleyin:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. HGS bilgisayarı yeniden başlatıldıktan sonra yönetici hesabınızla yeniden oturum açın, yükseltilmiş bir Windows PowerShell konsolu açın ve Konak Koruyucu Hizmeti'ni yüklemek ve etki alanını yapılandırmak için aşağıdaki komutları çalıştırın. Burada belirttiğiniz parola yalnızca Active Directory için Dizin Hizmetleri Onarım Modu parolasına uygulanır; yönetici hesabınızın oturum açma parolasını değiştirmez. -HgsDomainName için seçtiğiniz herhangi bir etki alanı adını belirtebilirsiniz.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Bilgisayar yeniden başlatıldıktan sonra yönetici hesabınızla (aynı zamanda bir Etki Alanı Yöneticisidir) oturum açın. Yükseltilmiş bir Windows PowerShell konsolu açın ve HGS örneğiniz için konak anahtarı kanıtlamasını yapılandırın.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Aşağıdaki komutu çalıştırarak HGS bilgisayarının IP adresini bulun. Sonraki adımlar için bu IP adresini kaydedin.

    Get-NetIPAddress  
    

Uyarı

Alternatif olarak, HGS bilgisayarınıza dns adıyla başvurmak istiyorsanız, kurumsal DNS sunucularınızdan yeni HGS etki alanı denetleyicisine bir iletici ayarlayabilirsiniz.

2. Adım: SQL Server bilgisayarını korumalı konak olarak yapılandırma

Bu adımda, SQL Server bilgisayarını konak anahtarı kanıtlama kullanarak HGS'ye kaydedilmiş korumalı bir konak olarak yapılandıracaksınız.

Uyarı

Host anahtarı doğrulaması, daha zayıf bir doğrulama modu olarak kabul edilir. Mümkünse, üretim ortamları için TPM kanıtlamayı kullanmanız gerekir. Daha fazla bilgi için bkz . Kanıtlama modları.

  1. SQL Server bilgisayarınızda yönetici olarak oturum açın, yükseltilmiş bir Windows PowerShell konsolu açın ve bilgisayar adı değişkenine erişerek bilgisayarınızın adını alın.

    $env:computername 
    
  2. Korumalı Ana Bilgisayar özelliğini yükleyin, bu, henüz yüklü değilse Hyper-V'yi de yükleyecektir.

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Hyper-V yüklemesini tamamlamanız istendiğinde SQL Server bilgisayarınızı yeniden başlatın.

  4. SQL Server bilgisayarınız bir sanal makine, UEFI Güvenli Önyüklemeyi desteklemeyen bir fiziksel makine veya IOMMU'ya sahip olmayan bir fiziksel makineyse, platform güvenlik özellikleri için VBS gereksinimini kaldırmanız gerekir.

    1. Sql Server bilgisayarınızda yükseltilmiş bir PowerShell konsolunda aşağıdaki komutu çalıştırarak Güvenli Önyükleme ve IOMMU gereksinimini kaldırın:

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. VBS'nin daha düşük gereksinimlerle çevrimiçi olmasını sağlamak için SQL Server bilgisayarını yeniden başlatın.

      Restart-Computer
      
  5. SQL Server bilgisayarında yeniden yönetici olarak oturum açın, yükseltilmiş bir Windows PowerShell konsolu açın, benzersiz bir konak anahtarı oluşturun ve sonuçta elde edilen ortak anahtarı bir dosyaya aktarın.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Önceki adımda oluşturulan konak anahtarı dosyasını HGS makinesine el ile kopyalayın. Aşağıdaki yönergeler, dosya adınızın hostkey.cer olduğu ve HGS makinesinin Masaüstüne kopyaladığınız varsayımıyla hazırlanmıştır.

  7. HGS bilgisayarında yükseltilmiş bir Windows PowerShell konsolu açın ve SQL Server bilgisayarınızın ana bilgisayar anahtarını HGS'ye kaydedin:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. SQL Server bilgisayarında, SQL Server bilgisayarına nerede testte bulunacağı konusunda bilgi vermek için yükseltilmiş bir Windows PowerShell konsolunda aşağıdaki komutu çalıştırın. Her iki adres konumunda da HGS bilgisayarınızın IP adresini veya DNS adını belirttiğinizden emin olun.

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

Yukarıdaki komutun sonucu, AttestationStatus = Passed değerini göstermelidir.

Hata HostUnreachable alırsanız, BU SQL Server bilgisayarınızın HGS ile iletişim kuramadığını gösterir. HGS bilgisayarına ping işlemi yapabileceğinizden emin olun.

Hata UnauthorizedHost , ortak anahtarın HGS sunucusuna kaydedilmediğini gösterir. Hatayı çözmek için 5. ve 6. adımları yineleyin.

Diğer tüm adımlar başarısız olursa, 4-7 arası adımları çalıştırın Remove-HgsClientHostKey ve yineleyin.

3. Adım: SQL Server'da güvenli kuşatmalarla Always Encrypted'ı etkinleştirme

Bu adımda, SQL Server örneğinizdeki kuşatmalar kullanılarak Always Encrypted işlevini etkinleştireceksiniz.

  1. SSMS kullanarak veritabanı bağlantısı için Always Encrypted etkinleştirilmeden SQL Server örneğine sysadmin olarak bağlanın.

    1. SSMS'i başlatın.

    2. Sunucuya Bağlan iletişim kutusunda sunucu adınızı belirtin, bir kimlik doğrulama yöntemi seçin ve kimlik bilgilerinizi belirtin.

    3. Seçenekler'i >> seçin ve Always Encrypted sekmesini seçin.

    4. Always Encrypted'ı Etkinleştir (sütun şifrelemesi) onay kutusunun seçili olmadığından emin olun.

      Always Encrypted devre dışı için SSMS bağlantı seçeneğinin ekran görüntüsü.

    5. Bağlan seçeneğini seçin.

  2. Yeni bir sorgu penceresi açın ve aşağıdaki deyimi yürüterek güvenli kapanım türünü sanallaştırma tabanlı güvenliğe (VBS) ayarlayın.

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Önceki değişikliğin geçerli olması için SQL Server örneğinizi yeniden başlatın. Nesne Gezgini'nde örneği sağ tıklatıp Yeniden Başlat'ı seçerek SSMS'de örneği yeniden başlatabilirsiniz. Örnek yeniden başlatıldıktan sonra bağlantıyı yeniden kurun.

  4. Aşağıdaki sorguyu çalıştırarak güvenli bölgenin artık yüklendiğini doğrulayın:

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

    Sorgu aşağıdaki sonucu döndürmelidir:

    name value kullanımda değer
    sütun şifreleme enklav türü 1 1

4. Adım: Örnek veritabanı oluşturma

Bu adımda, daha sonra şifreleyebileceğiniz bazı örnek verileri içeren bir veritabanı oluşturacaksınız.

  1. Önceki adımdaki SSMS örneğini kullanarak aşağıdaki deyimi sorgu penceresinde yürüterek ContosoHR adlı yeni bir veritabanı oluşturun.

    CREATE DATABASE [ContosoHR];
    
  2. Çalışanlar adlı yeni bir tablo oluşturun.

    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. Çalışanlar tablosuna birkaç çalışan kaydı ekleyin.

    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);
    

5. Adım: Kapanım özellikli anahtarları sağlama

Bu adımda, enclave hesaplamalarına olanak sağlayan bir sütun ana anahtarı ve sütun şifreleme anahtarı oluşturacaksınız.

  1. Önceki adımda yer alan SSMS örneğini kullanarak Nesne Gezgini veritabanınızı genişletin ve Güvenlik>gidin.

  2. Yeni bir kapanım özellikli sütun ana anahtarı sağlayın:

    1. Always Encrypted Keys'e sağ tıklayın ve Yeni Sütun Ana Anahtarı... öğesini seçin.

    2. Sütun ana anahtarınızın adını seçin: CMK1.

    3. Windows Sertifika Deposu (Geçerli Kullanıcı veya Yerel Makine) veyaAzure Key Vault'ı seçtiğinizden emin olun.

    4. Yerleşke hesaplamalarına izin ver seçin.

    5. Azure Key Vault'ı seçtiyseniz Azure'da oturum açın ve anahtar kasanızı seçin. Always Encrypted için anahtar kasası oluşturma hakkında daha fazla bilgi için bkz. Azure portalından anahtar kasalarınızı yönetme.

    6. Sertifikanız zaten varsa sertifikanızı veya Azure Anahtar Değeri anahtarınızı seçin veya yeni bir sertifika oluşturmak için Sertifika Oluştur düğmesini seçin.

    7. Tamam'ı seçin.

      SSMS'de yeni bir sütun master anahtarı oluşturulurken gizli çalışma hesaplamalarına izin verme seçiminin ekran görüntüsü.

  3. Yeni bir kapanım özellikli sütun şifreleme anahtarı oluşturun:

    1. Always Encrypted Keys'e sağ tıklayın ve Yeni Sütun Şifreleme Anahtarı'nı seçin.
    2. Yeni sütun şifreleme anahtarı için bir ad girin: CEK1.
    3. Sütun ana anahtarı açılan listesinde, önceki adımlarda oluşturduğunuz sütun ana anahtarını seçin.
    4. Tamam'ı seçin.

6. Adım: Bazı sütunları yerinde şifreleme

Bu adımda, sunucu tarafı kapanım içindeki SSN ve Maaş sütunlarında depolanan verileri şifreler ve ardından veriler üzerinde bir SELECT sorgusunu test edersiniz.

  1. Yeni bir SSMS örneği açın ve veritabanı bağlantısı için Always Encrypted etkinken SQL Server örneğine bağlanın.

    1. SSMS'nin yeni bir örneğini başlatın.

    2. Sunucuya Bağlan iletişim kutusunda sunucu adınızı belirtin, bir kimlik doğrulama yöntemi seçin ve kimlik bilgilerinizi belirtin.

    3. Seçenekler'i >> seçin ve Always Encrypted sekmesini seçin.

    4. Always Encrypted'ı etkinleştir (sütun şifrelemesi) onay kutusunu seçin.

    5. Güvenli kuşatmaları etkinleştir'i seçin. (Bu adım SSMS 19 veya üzeri için geçerlidir.)

    6. ProtokolüKonak Koruyucu Hizmeti olarak ayarlayın. (Bu adım SSMS 19 veya üzeri için geçerlidir.)

    7. Yerleşim kanıtlama URL'nizi belirtin (örneğin, http://hgs.bastion.local/Attestation).

      SSMS kullanarak kanıtlama içeren Always Encrypted sunucusuna bağlan sekmesinin ekran görüntüsü.

    8. Bağlan seçeneğini seçin.

    9. Always Encrypted sorguları için Parametreleştirme'yi etkinleştirmeniz istenirse Etkinleştir'i seçin.

  2. Aynı SSMS örneğini kullanarak (Always Encrypted etkinken), yeni bir sorgu penceresi açın ve aşağıdaki sorguları çalıştırarak SSN ve Maaş sütunlarını şifreleyin.

    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;
    

    Uyarı

    Yukarıdaki betikte veritabanı için sorgu planı önbelleğini temizlemek amacıyla ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE komutuna dikkat edin. Tabloyu değiştirdikten sonra, parametre şifreleme bilgilerini yenilemek için tabloya erişen tüm toplu işlemlerin ve saklı yordamların planlarını temizlemeniz gerekir.

  3. SSN ve Maaş sütunlarının artık şifrelendiğini doğrulamak için SSMS örneğinde veritabanı bağlantısı için Always Encrypted etkinleştirilmemiş yeni bir sorgu penceresi açın ve aşağıdaki deyimi yürütün. Sorgu penceresi SSN ve Maaş sütunlarında şifrelenmiş değerler döndürmelidir. Always Encrypted etkin durumdaki SSMS örneğini kullanarak aynı sorguyu yürütürseniz verilerin şifresinin çözülmüş olduğunu görmeniz gerekir.

    SELECT * FROM [HR].[Employees];
    

7. Adım: Şifrelenmiş sütunlarda zengin sorgular çalıştırma

Artık şifrelenmiş sütunlarda zengin sorgular çalıştırabilirsiniz. Bazı sorgu işlemleri sunucu tarafı enklavınızın içinde yapılacaktır.

  1. Always Encrypted'ın etkinleştirildiği SSMS örneğinde Always Encrypted için Parametreleştirme'nin de etkinleştirildiğinden emin olun.

    1. SSMS'nin ana menüsünde Araçlar'ı seçin.
    2. Seçenekler'i seçin ....
    3. Sorgu Yürütme>SQL Server>Gelişmiş'e gidin.
    4. Always Encrypted için Parametreleştirmeyi Etkinleştir seçeneğinin işaretli olduğundan emin olun.
    5. Tamam'ı seçin.
  2. Yeni bir sorgu penceresi açın, yapıştırın ve aşağıdaki sorguyu yürütür. Sorgu, belirtilen arama ölçütlerine uyan düz metin değerleri ve satırlar döndürmelidir.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Always Encrypted etkin olmayan SSMS örneğinde aynı sorguyu yeniden deneyin ve oluşan hatayı not edin.

Sonraki Adımlar

Bu eğitimi tamamladıktan sonra aşağıda belirtilen eğitimlerden birine gidebilirsiniz.

Ayrıca bakınız