Руководство. Начало работы с анклавами Intel SGX в Базе данных SQL Azure с помощью Always Encrypted

Область применения:База данных SQL Azure

Из этого руководства вы узнаете, как приступить к работе с Always Encrypted с безопасными анклавами в Базе данных SQL Azure. Вы будете использовать анклавы Intel Software Guard (Intel SGX). Буду рассмотрены следующие темы.

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

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

Требования для PowerShell

Примечание.

Предварительные требования, перечисленные в этом разделе, применимы только в том случае, если для выполнения некоторых действий, описанных в этом учебнике, вы решили использовать PowerShell. Если вы планируете использовать портал Azure, можно пропустить этот раздел.

Требуется модуль Az PowerShell версии 9.3.0 или более поздней. Дополнительные сведения об установке модуля PowerShell Az см. в статье Установка модуля PowerShell Azure Az. Чтобы определить версию модуля Az PowerShell, установленного на компьютере, выполните следующую команду из PowerShell.

Get-InstalledModule -Name Az

Шаг 1. Создание и настройка сервера и базы данных серии DC

На этом шаге вы создадите логический сервер Базы данных SQL Azure и новую базу данных с помощью оборудования серии DC, необходимого для Always Encrypted с безопасными анклавами. Подробные сведения см. в разделе о серии DC.

  1. Перейдите на страницу Выберите вариант развертывания SQL.

  2. Если вы еще не вошли на портал Azure, войдите при появлении запроса.

  3. В разделе Базы данных SQL оставьте для параметра Тип ресурса значение Отдельная база данных и нажмите кнопку Создать.

    Screenshot of Azure portal, showing the Add to Azure SQL deployment option.

  4. На вкладке Основные сведения формы Создание базы данных SQL в разделе Сведения о проекте выберите подходящую подписку Azure.

  5. В разделе Группа ресурсов щелкните Создать новую, введите имя группы ресурсов и нажмите ОК.

  6. В поле Имя базы данных введите ContosoHR.

  7. В группе Сервер выберите Создать и заполните форму Новый сервер следующим образом:

    • Имя сервера: Введите mysqlserver и добавьте еще символы, чтобы имя было уникальным. Мы не можем указать точное имя сервера, так как имена всех серверов в Azure должны быть глобально уникальными, а не только в рамках подписки. Поэтому введите что-то подобное mysqlserver135, а портал позволяет узнать, доступен ли он или нет.
    • Расположение. Выберите расположение из раскрывающегося списка.

      Важно!

      Необходимо выбрать расположение (регион Azure), который поддерживает и оборудование серии DC, и Аттестацию Azure. Список регионов, поддерживающих серию DC, см. в разделе со сведениями о доступности серии DC. Здесь представлены сведения о доступности Аттестации Microsoft Azure по регионам.

    • Метод проверки подлинности: выбор использования проверки подлинности SQL
    • Имя для входа администратора сервера. Введите имя для входа администратора, например azureuser.
    • Пароль. Введите пароль, соответствующий требованиям, и введите его еще раз в поле Подтверждение пароля.
    • Щелкните ОК.
  8. Оставьте для параметра Хотите использовать Эластичный пул SQL? значение Нет.

  9. В разделе "Вычисления и хранилище" выберите "Настроить базу данных" и выберите "Изменить конфигурацию".

    Screenshot of Azure portal hardware configuration, and where to configure database.

  10. Выберите конфигурацию оборудования серии DC и нажмите кнопку ОК.

    Screenshot of Azure portal, showing Configure DC-series database.

  11. Нажмите кнопку Применить.

  12. Вернитесь на вкладку Основные и убедитесь, что для параметра Вычисления и хранилище установлено значение Общее назначения, DC, 2 виртуальных ядер, хранилище 32 ГБ.

  13. Для избыточности хранилища резервных копий выберите локально избыточное хранилище резервных копий.

  14. В нижней части страницы нажмите кнопку Далее: сети.

    Screenshot of Azure portal, showing Configure DC-series database - basics.

  15. На вкладке Сеть в разделе Метод подключения выберите Общедоступная конечная точка.

  16. В разделе Правила брандмауэра установите переключатель Добавить текущий IP-адрес клиента в положение Да. Оставьте значение Нет для параметра Разрешить доступ к серверу службам и ресурсам Azure.

  17. Для политики подключения оставьте политику подключения по умолчанию. Использует политику перенаправления для всех клиентских подключений, поступающих внутри Azure и прокси-сервера для всех клиентских подключений, исходящих за пределами Azure.

  18. Для зашифрованных подключений оставьте минимальную версию TLS в TLS 1.2.

  19. В нижней части страницы выберите Review + create (Проверить и создать).

    Screenshot of the Azure portal Create SQL Database, networking tab.

  20. На странице Просмотр и создание после проверки нажмите кнопку Создать.

Шаг 2. Настройка поставщика аттестации

На этом шаге вы создадите и настроите поставщик аттестации в Аттестации Microsoft Azure. Это необходимо для аттестации безопасного анклава, который использует база данных.

  1. Перейдите на страницу Create attestation provider (Создание поставщика аттестации).

  2. На странице Create attestation provider (Создание поставщика аттестации) укажите следующее:

    • Подписка. Выберите ту же подписку, в которой был создан логический сервер Azure SQL.
    • Группа ресурсов. Выберите ту же группу ресурсов, в которой был создан логический сервер Azure SQL.
    • Имя. Введите myattestprovider и добавьте несколько символов, чтобы обеспечить уникальность. Мы не можем указать точное имя поставщика аттестации, которое следует использовать, так как эти имена должны быть глобально уникальными. Поэтому введите что-то подобное myattestprovider12345, а портал позволяет узнать, доступна ли она или нет.
    • Расположение. Выберите то же расположение, что и логический сервер SQL Azure.
    • Файл сертификатов подписывания политики: оставьте это поле пустым, так как вы настроите политику без знака.
  3. Указав необходимые сведения, нажмите Просмотр и создание.

    Screenshot of the Azure portal Create attestation provider menu.

  4. Нажмите кнопку Создать.

  5. После создания поставщика аттестации выберите "Перейти к ресурсу".

  6. На вкладке Обзор поставщика аттестации скопируйте значение свойства Attest URI (URI аттестации) в буфер обмена и сохраните его в файле. Это URL-адрес аттестации, который потребуется в последующих шагах.

    Screenshot of the attestation URL in the Azure portal.

  7. Выберите элемент Политика в меню ресурсов в левой части окна или на панели внизу.

  8. Задайте для параметра Тип аттестации значение SGX-IntelSDK.

  9. Щелкните элемент Настроить в меню вверху.

    Screenshot of configuring attestation policy in the Azure portal.

  10. Задайте для параметра Policy Format (Формат политики) значение Текст. Оставьте для компонента Параметры политики значение Enter policy (Ввод политики).

  11. В поле Policy text (Текст политики) замените политику по умолчанию на приведенную ниже политику. Дополнительные сведения о приведенной ниже политике см. в разделе Создание и настройка поставщика аттестации.

version= 1.0;
authorizationrules 
{
       [ type=="x-ms-sgx-is-debuggable", value==false ]
        && [ type=="x-ms-sgx-product-id", value==4639 ]
        && [ type=="x-ms-sgx-svn", value>= 2 ]
        && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
    => permit();
};

  1. Щелкните Сохранить.

    Screenshot of editing an attestation policy in the Azure portal.

  2. Щелкните элемент Обновить в меню вверху, чтобы просмотреть настроенную политику.

Шаг 3. Заполнение базы данных

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

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

    1. В диалоговом окне Подключение к серверу укажите полное имя сервера (например, myserver135.database.windows.net) и введите имя и пароль администратора, указанные при создании сервера.

    2. Выберите "Параметры >> " и перейдите на вкладку "Свойства подключения". Обязательно выберите базу данных ContosoHR (а не базу данных по умолчанию master ).

    3. Выберите вкладку Always Encrypted.

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

      Screenshot of Connect to Server using SSMS without Always Encrypted enabled.

    5. Выберите Подключиться.

  2. Создайте новую таблицу с именем Employees.

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

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

Шаг 4. Подготовка ключей с поддержкой анклава

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

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

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

    1. Щелкните правой кнопкой мыши Ключи Always Encrypted и выберите Создать главный ключ столбца....
    2. Введите имя нового главного ключа столбца: CMK1.
    3. Убедитесь, что выбрано разрешение вычислений анклава. (По умолчанию он выбран, если для базы данных включен безопасный анклава. Она должна быть включена, так как база данных использует конфигурацию оборудования серии DC.)
    4. Выберите Azure Key Vault (рекомендуется) или Хранилище сертификатов Windows (текущий пользователь или локальный компьютер).
      • Если выбрать Azure Key Vault, войдите в Azure, выберите подписку Azure, содержащую хранилище ключей, которое вы хотите использовать, и выберите хранилище ключей. Выберите "Создать ключ", чтобы создать новый ключ.
      • Если выбрать Хранилище сертификатов Windows, нажмите кнопку "Создать сертификат ", чтобы создать сертификат. Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.
    5. Щелкните ОК.
  3. Создайте ключ шифрования столбцов с поддержкой анклава:

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

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

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

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

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

    2. В диалоговом окне Подключение к серверу укажите полное имя сервера (например, myserver135.database.windows.net) и введите имя и пароль администратора, указанные при создании сервера.

    3. Выберите "Параметры >> " и перейдите на вкладку "Свойства подключения". Обязательно выберите базу данных ContosoHR (а не базу данных по умолчанию master ).

    4. Выберите вкладку Always Encrypted.

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

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

    7. Задайте для протокола аттестацию Microsoft Azure. (Этот шаг применяется к SSMS 19 или более поздней версии.)

    8. Укажите URL-адрес для аттестации анклава, полученный на шаге 2 Настройка поставщика аттестации. См. снимок экрана ниже.

      Screenshot of the SSMS Connect to Server dialog Always Encrypted tab, with attestation enabled.

    9. Выберите Подключиться.

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

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

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

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

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

  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. Произойдет сбой.

Дальнейшие действия

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

См. также