Руководство. Начало работы с Always Encrypted с безопасными анклавами в SQL Server с аттестацией с помощью HGS

Область применения: SQL Server 2019 (15.x) и более поздних версий — только для Windows

В этом руководстве описано, как приступить к работе с Always Encrypted с безопасными анклавами в SQL Server с помощью службы защиты узлов (HGS) для аттестации анклава. Буду рассмотрены следующие темы.

  • Как создать базовую среду для тестирования и оценки Always Encrypted с безопасными анклавами с HGS, настроенными для аттестации анклава.
  • Шифрование данных на месте и выдача полнофункциональных конфиденциальных запросов к зашифрованным столбцам с помощью SQL Server Management Studio (SSMS).

Если вы хотите узнать, как настроить Always Encrypted с безопасными анклавами без аттестации, см . руководство. Начало работы с Always Encrypted с безопасными анклавами в SQL Server.

Предварительные условия

Чтобы начать работу с Always Encrypted с безопасными анклавами, потребуется по крайней мере два компьютера (это могут быть виртуальные машины):

  • компьютер SQL Server для размещения SQL Server и SSMS;
  • компьютер HGS для запуска службы защиты узла, необходимой для аттестации анклава.

Требования к компьютеру с SQL Server

  • SQL Server 2019 (15.x) или более поздней версии.
  • Windows 10, версия 1809 или более поздняя — Корпоративная, Windows 11 или более поздней версии — Корпоративная, Windows Server 2019 или более поздней версии — выпуск Datacenter. Другие выпуски Windows 10/11 и Windows Server не поддерживают аттестацию с помощью HGS.
  • Поддержка ЦП для технологий виртуализации:
    • Intel VT-x с Extended Page Tables.
    • AMD-V с Rapid Virtualization Indexing.
    • Если вы используете SQL Server на виртуальной машине:
      • В Azure используйте размер виртуальной машины 2-го поколения (рекомендуется) или размер виртуальной машины 1-го поколения с включенной вложенной виртуализацией. Изучите документацию по размерам отдельных виртуальных машин, чтобы определить, какие размеры виртуальных машин 1-го поколения поддерживают вложенную виртуализацию.
      • В Hyper-V 2016 или более поздней версии (за пределами Azure) убедитесь, что виртуальная машина — это виртуальная машина поколения 2 (рекомендуется) или виртуальная машина поколения 1 с включенной вложенной виртуализацией. Дополнительные сведения см. в статьях о том, как выбрать поколение для виртуальной машины в Hyper-V, и о настройке вложенной виртуализации.
      • В VMware vSphere 6.7 или более поздней версии включите для виртуальной машины поддержку безопасности на основе виртуализации, как описано в документации VMware.
      • Другие низкоуровневые оболочки и общедоступные облака могут поддерживать возможности вложенной виртуализации, позволяющие использовать Always Encrypted с анклавами VBS. Просмотрите сведения о совместимости и инструкции по настройке в документации по своему решению для виртуализации.
  • Последняя версия SQL Server Management Studio (SSMS). Кроме того, можно установить SSMS на другом компьютере.

Предупреждение

В рабочих средах выполнение SSMS или других средств управления ключами на компьютере SQL Server может привести к ухудшению защиты, обеспечиваемой Always Encrypted. Как правило, такие средства рекомендуется выполнять на другом компьютере. Дополнительные сведения см. в разделе Security Considerations for Key Management(Вопросы безопасности для управления ключами).

Требования к компьютеру с HGS

  • Windows Server 2019, выпуск Standard или Datacenter
  • 2 процессора
  • 8 ГБ ОЗУ
  • Хранилище размером 100 ГБ

Заметка

Компьютер HGS не должен быть присоединен к домену перед началом работы.

Шаг 1. Настройка компьютера HGS

На этом шаге выполняется настройка компьютера HGS для запуска службы защиты узла, поддерживающей аттестацию ключа узла.

  1. Войдите на компьютер HGS с правами локального администратора, откройте консоль Windows PowerShell с повышенными привилегиями и добавьте роль службы защиты узла, выполнив следующую команду:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. После перезапуска компьютера HGS снова войдите с учетной записью администратора, откройте консоль Windows PowerShell с повышенными привилегиями и выполните следующие команды, чтобы установить службу защиты узла и настроить его домен. Заданный здесь пароль будет относиться только к режиму восстановления служб каталогов для Active Directory; он не изменит пароль для входа учетной записи администратора. Для параметра -HgsDomainName можно выбрать любое доменное имя.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. После повторного перезапуска компьютера войдите с помощью учетной записи администратора (которая теперь также является администратором домена). Откройте консоль Windows PowerShell с повышенными привилегиями и настройте аттестацию ключей узла для экземпляра HGS.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Найдите IP-адрес компьютера HGS, выполнив следующую команду. Сохраните этот IP-адрес для выполнения дальнейших действий.

    Get-NetIPAddress  
    

Заметка

Если же вы хотите ссылаться на этот компьютер HGS по DNS-имени, можно настроить сервер пересылки из корпоративных DNS-серверов на новый контроллер домена HGS.

Шаг 2. Настройка компьютера SQL Server как защищенного узла

На этом шаге выполняется настройка компьютера SQL Server как защищенного узла, зарегистрированного в HGS с помощью аттестации ключа узла.

Предупреждение

Аттестация узла ключа считается менее строгим режимом аттестации. При возможности для рабочих сред следует использовать аттестацию доверенного платформенного модуля (TPM). Дополнительные сведения см. в статье Режимы аттестации.

  1. Войдите на компьютер SQL Server с правами администратора, откройте консоль Windows PowerShell с повышенными привилегиями и найдите имя компьютера, указанное в переменной computername.

    $env:computername 
    
  2. Установите компонент Guarded Host (Защищенный узел). При этом будет также установлена технология Hyper-V (если она еще не установлена).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. При появлении запроса на завершение установки Hyper-V перезагрузите компьютер SQL Server.

  4. Если SQL Server работает на виртуальной машине или на физическом компьютере, который не поддерживает безопасную загрузку UEFI или не имеет блок IOMMU, вам нужно удалить требование VBS для функций безопасности платформы.

    1. Удалите требование безопасной загрузки и IOMMU, выполнив следующую команду на своем компьютере SQL Server в консоли PowerShell, запущенной с повышенными правами.

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Снова перезагрузите компьютер SQL Server, чтобы технология VBS начала работать со сниженными требованиями.

      Restart-Computer
      
  5. Снова войдите на компьютер SQL Server с правами администратора, откройте консоль Windows PowerShell с повышенными привилегиями, создайте уникальный ключ узла и экспортируйте полученный открытый ключ в файл.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Скопируйте вручную файл ключа узла, созданный на предыдущем шаге, на компьютер HGS. В следующих инструкциях подразумевается, что файл имеет имя hostkey.cer, и он скопирован на рабочий стол компьютера HGS.

  7. На компьютере HGS откройте консоль Windows PowerShell с повышенными привилегиями и зарегистрируйте ключ узла вашего компьютера SQL Server с помощью HGS:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. На компьютере SQL Server в консоли Windows PowerShell с повышенными привилегиями выполните следующую команду, чтобы сообщить компьютеру SQL Server, где должна выполняться аттестация. Обязательно укажите IP-адрес или DNS-имя своего компьютера HGS в качестве обоих значений адреса.

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

Результат приведенной выше команды должен показывать, что аттестация пройдена (AttestationStatus = Passed).

Если возникает HostUnreachable ошибка, это означает, что компьютер SQL Server не может взаимодействовать с HGS. Проверьте связь с компьютером HGS с помощью команды ping.

Ошибка UnauthorizedHost указывает, что открытый ключ не зарегистрирован на сервере HGS. Повторите шаги 5 и 6, чтобы устранить ошибку.

Если все остальное завершается ошибкой, выполните Remove-HgsClientHostKey и повторите шаги 4-7.

Шаг 3. Настройка Always Encrypted с безопасными анклавами в SQL Server

На этом шаге выполняется включение функциональности Always Encrypted с использованием анклавов в экземпляре SQL Server.

  1. От имени системного администратора с помощью SSMS подключитесь к экземпляру SQL Server без включенной функции Always Encrypted для подключения к базе данных.

    1. Запустите SSMS.

    2. В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.

    3. Нажмите Параметры >> и выберите вкладку Always Encrypted.

    4. Убедитесь, что флажок Включить Always Encrypted (шифрование столбцов)не установлен.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Нажмите Подключиться.

  2. Откройте новое окно запроса и выполните следующую инструкцию, чтобы задать безопасный тип анклава для безопасности на основе виртуализации (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Перезапустите экземпляр SQL Server, чтобы предыдущее изменение вступило в силу. Можно перезапустить этот экземпляр в SSMS, щелкнув его правой кнопкой мыши в обозревателе объектов и выбрав "Перезапуск". После перезагрузки экземпляра снова подключитесь к нему.

  4. Убедитесь, что безопасный анклав загружен, выполнив следующий запрос:

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

    По результатам запроса должен возвращаться следующий результат:

    name значение value_in_use
    column encryption enclave type (тип анклава для шифрования столбцов) 1 1

Шаг 4. Создание образца базы данных

На этом шаге создается база данных с демонстрационными данными, которые далее будут шифроваться.

  1. С помощью экземпляра SSMS из предыдущего шага выполните приведенную ниже инструкцию в окне запроса, чтобы создать новую базу данных с именем ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Создайте новую таблицу с именем Employees.

    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. Добавьте несколько записей о сотрудниках в таблицу Employees.

    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. Подготовка ключей с поддержкой анклава

На этом шаге вы создадите главный ключ столбца и ключ шифрования столбца, который разрешает вычисления анклава.

  1. С помощью экземпляра SSMS из предыдущего шага в обозревателе объектов разверните базу данных и перейдите к пункту Безопасность>Ключи Always Encrypted.

  2. Подготовьте новый главный ключ столбца с поддержкой анклава:

    1. Щелкните правой кнопкой мыши Ключи Always Encrypted и выберите Создать главный ключ столбца....

    2. Выберите имя главного ключа столбца: CMK1.

    3. Убедитесь, что выбрано значение Хранилище сертификатов Windows (текущий пользователь или локальный компьютер) или Azure Key Vault.

    4. Выберите Разрешить вычисления анклава.

    5. Если вы выбрали Azure Key Vault, войдите в Azure и выберите хранилище ключей. Дополнительные сведения о создании хранилища ключей для Always Encrypted см. в статье Управление хранилищами ключей на портале Azure.

    6. Выберите сертификат или ключ Azure Key Vault, если он существует, или нажмите Создать сертификат, чтобы создать новый сертификат.

    7. Нажмите ОК.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Создайте ключ шифрования столбцов с поддержкой анклава:

    1. Щелкните правой кнопкой мыши Ключи Always Encrypted и выберите Создать ключ шифрования столбца.
    2. Введите имя для нового ключа шифрования столбцов: CEK1.
    3. В раскрывающемся списке Главный ключ столбца выберите ключ, созданный на предыдущих шагах.
    4. Нажмите ОК.

Шаг 6. Шифрование некоторых столбцов на месте

На этом шаге вы выполните шифрование данных, хранящихся в столбцах SSN и Salary в анклаве на стороне сервера, а затем протестируете запрос SELECT к данным.

  1. Откройте новый экземпляр SSMS и подключитесь к экземпляру SQL Server с включенной функцией Always Encrypted для подключения к базе данных.

    1. Создайте новый экземпляр SSMS.

    2. В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.

    3. Нажмите Параметры >> и выберите вкладку Always Encrypted.

    4. Установите флажок Enable Always Encrypted (шифрование столбцов).

    5. Выберите "Включить безопасные анклава". (Этот шаг применяется к SSMS 19 или более поздней версии.)

    6. Задайте для протокола службу защиты узла. (Этот шаг применяется к SSMS 19 или более поздней версии.)

    7. Укажите URL-адрес аттестации анклава (например, http:// hgs.bastion.local/Attestation).

      Screenshot of the connect to server Always Encrypted tab with attestation using SSMS.

    8. Нажмите Подключиться.

    9. Если отобразится запрос на включение параметризации для запросов Always Encrypted, нажмите кнопку Включить.

  2. Используя тот же экземпляр SSMS (с включенной функцией Always Encrypted), откройте новое окно запроса и выполните шифрование столбцов SSN и Salary с помощью приведенных ниже запросов.

    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;
    

    Заметка

    Обратите внимание на инструкцию ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE для очистки кэша планов запросов в базе данных в приведенном выше скрипте. Изменив таблицу, необходимо очистить планы всех пакетов и хранимых процедур, которые обращаются к таблице, чтобы обновить сведения о параметрах шифрования.

  3. Чтобы убедиться в том, что столбцы SSN и Salary зашифрованы, откройте новое окно запроса в экземпляре SSMS без включенной функции Always Encrypted для подключения к базе данных и выполните приведенную ниже инструкцию. Окно запроса должно возвратить зашифрованные значения столбцов SSN и Salary. Если вы выполните тот же запрос с помощью экземпляра SSMS с включенной функцией Always Encrypted, данные будут расшифрованы.

    SELECT * FROM [HR].[Employees];
    

Шаг 7. Выполнение полнофункциональных запросов к зашифрованным столбцам

Теперь можно выполнять полнофункциональные запросы к зашифрованным столбцам. Некоторая обработка запросов будет выполняться в анклаве на стороне сервера.

  1. В экземпляре SSMS с включенной функцией Always Encrypted убедитесь, что включена параметризация для Always Encrypted.

    1. Выберите пункт Инструменты в главном меню SSMS.
    2. Выберите Параметры.
    3. Выберите Выполнение запроса>SQL Server>Дополнительно.
    4. Убедитесь, что установлен флажок Включить параметризацию для Always Encrypted.
    5. Нажмите ОК.
  2. Откройте новое окно запроса, а затем вставьте и выполните приведенный ниже запрос. Запрос должен возвратить соответствующие заданным условиям поиска значения и строки в виде открытого текста.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Попробуйте выполнить тот же запрос еще раз в экземпляре SSMS с отключенной функцией Always Encrypted и запишите код возникшей ошибки.

Далее

После завершения работы с этим учебником вы можете обратиться к одному из следующих учебников:

См. также