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

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных SQL Azure

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

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

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

  • Активная подписка Azure. Если ее нет, создайте бесплатную учетную запись. Для создания ресурсов и настройки политики аттестации необходимо быть членом роли "Участник" или "Владелец" для подписки.

  • SQL Server Management Studio (SSMS) версии 18.9.1 или более поздней. Сведения о том, как скачать SSMS, см. на странице Скачивание SQL Server Management Studio (SSMS).

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

Примечание

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

Убедитесь, что на компьютере установлены следующие модули PowerShell.

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

    Get-InstalledModule -Name Az
    
  2. Az.Attestation 0.1.8 или более поздней версии. Дополнительные сведения о том, как установить модуль PowerShell Az.Attestation, см. в разделе Установка модуля PowerShell Az.Attestation. Чтобы определить версию модуля Az.Attestation, установленного на компьютере, запустите выполнение следующей команды из сеанса PowerShell.

    Get-InstalledModule -Name Az.Attestation
    

Если какие-то версии не соответствуют минимальным требованиям, воспользуйтесь командой Update-Module.

Для коллекции PowerShell не рекомендуется использовать протокол TLS (Transport Layer Security) версий 1.0 и 1.1. Используйте TLS версии 1.2 или более поздней. Если используется TLS версии ниже 1.2, могут возникнуть следующие ошибки:

  • WARNING: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'
  • PackageManagement\Install-Package: No match was found for the specified search criteria and module name.

Чтобы продолжить взаимодействие с коллекцией PowerShell Gallery, выполните следующие команды перед командами Install-Module.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

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

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

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

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

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

    Добавление в Azure SQL

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

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

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

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

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

      Важно!

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

    Щелкните ОК.

  8. Оставьте для параметра Хотите использовать Эластичный пул SQL? значение Нет.

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

    Настройка базы данных

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

    Настройка базы данных серии DC

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

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

  13. По завершении выберите Next: Networking (Далее: сеть) в нижней части экрана.

    Настройка базы данных рядов для серии DC — вкладка "Основные"

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

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

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

    Новая база данных SQL — сетевые подключения

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

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

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

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

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

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

    Создание поставщика аттестации

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

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

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

    URL-адрес аттестации

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

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

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

    Настройка политики аттестации

  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>= 0 ]
            && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
        => permit();
    };
    
  12. Щелкните Сохранить.

    Изменение политики аттестации

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

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

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

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

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

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

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

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

      Подключение без Always Encrypted

    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. Убедитесь, что выбрано значение Хранилище сертификатов Windows (текущий пользователь или локальный компьютер) или Azure Key Vault.

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

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

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

    7. Щелкните ОК.

      Разрешение вычислений анклава

  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. Убедитесь, что флажок Включить Always Encrypted (шифрование столбцов) установлен.

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

      Подключение с аттестацией

    7. Щелкните Подключить.

    8. Если отобразится запрос на включение параметризации для запросов 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. Произойдет сбой.

Следующие шаги

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

См. также раздел