Поделиться через


Расширенное управление ключами с помощью хранилища ключей Azure (SQL Server)

The SQL Server Соединитель для хранилища ключей Azure Microsoft позволяет включить шифрование SQL Server для использования службы хранилища ключей Azure в качестве поставщика Расширенное управление ключами (Extensible Key Management), чтобы защитить ключи шифрования.

Сведения, включенные в данную тему

  • Использование возможности расширенного управления ключами

  • Шаг 1. Настройка хранилища ключей для использования с SQL Server

  • Шаг 2. Установка соединителя SQL Server

  • Шаг 3. Настройка SQL Server с целью использования поставщика расширенного управления ключами для хранилища ключей

  • Пример А. Прозрачное шифрование данных с помощью асимметричного ключа из хранилища ключей

  • Пример Б. Шифрование резервных копий с помощью асимметричного ключа из хранилища ключей

  • Пример В. Шифрование на уровне столбцов с помощью асимметричного ключа из хранилища ключей

Использование возможности расширенного управления ключами

Организация может использовать шифрование SQL Server для защиты конфиденциальных данных. Шифрование SQL Server включает Прозрачное шифрование данных (TDE), шифрование на уровне столбцов (CLE), а также Backup Encryption. Во всех этих случаях данные шифруются с помощью симметричного ключа шифрования данных. В дальнейшем защита симметричного ключа шифрования обеспечивается благодаря его шифрованию с помощью иерархии ключей, хранящихся в SQL Server. Кроме того, архитектура поставщика расширенного управления ключами позволяет включить SQL Server с целью защиты ключей шифрования данных с помощью асимметричного ключа, который хранится вне SQL Server во внешнем поставщике служб шифрования. Использование архитектуры поставщика расширенного управления ключами позволяет добавить дополнительный уровень безопасности, а также позволяет организациям разграничить управление ключами и данными.

Соединитель SQL Server для хранилища ключей Azure дает возможность SQL Server использовать масштабируемую, высокопроизводительную и высокодоступную службу хранилища ключей в качестве поставщика расширенного управления ключами для защиты ключей шифрования. Службу хранилища ключей можно использовать с установками SQL Server на виртуальных машинах Azure Microsoft и для локальных серверов. Служба хранилища ключей также предоставляет возможность использовать тщательно контролируемые и отслеживаемые аппаратные модули безопасности (HSM) для обеспечения более высокого уровня защиты асимметричных ключей шифрования. Дополнительные сведения о хранилище ключей см. в разделе Хранилище ключей Azure.

В начало

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

Расширенное управление ключами SQL Server с помощью хранилища ключей Azure

Шаг 1. Настройка хранилища ключей для использования с SQL Server

Выполните следующие шаги, чтобы настроить хранилище ключей для использования с Компонент ядра СУБД SQL Server для защиты ключа шифрования. Хранилище может уже использоваться для организации. Если хранилище не существует, администратор Azure в вашей организации, ответственный за управление ключами шифрования, может создать хранилище и асимметричный ключ в этом хранилище, а затем авторизовать SQL Server для использования ключа. Для ознакомления со службой хранилища ключей пройдите по ссылкам Начало работы с хранилищем ключей Azure и Командлеты PowerShell хранилища ключей Azure.

Важное примечаниеВажно!

Если у вас имеется несколько подписок Azure, необходимо использовать подписку, содержащую SQL Server.

  1. Создание хранилища Создайте хранилище с помощью инструкций, представленных в разделе Создание хранилища ключей справочника Начало работы с хранилищем Azure. Запишите имя хранилища. В этом разделе в качестве имени хранилища ключей используется ContosoKeyVault.

  2. Создание асимметричного ключа в хранилище Асимметричный ключ в хранилище ключей используется для защиты ключей шифрования SQL Server. Только открытая часть асимметричного ключа может покидать хранилище, закрытая же часть никогда не экспортируются из хранилища. Все криптографические операции, использующие асимметричный ключ, делегированы в хранилище ключей Azure и защищены системой безопасности хранилища ключей.

    Существует несколько способов, с помощью которых можно создать асимметричный ключ и сохранить его в хранилище. Ключ можно создать вне хранилища и импортировать его в хранилище в качестве PFX-файла. Создать ключ также можно непосредственно в хранилище с помощью API-интерфейсов хранилища ключей.

    Для соединителя SQL Server требуется, чтобы асимметричные ключи являлись 2048-разрядными ключами шифрования RSA, а в имени ключа использовались только следующие символы: a-z, A-Z, 0-9 и -. В этом документе имя асимметричного ключа — ContosoMasterKey. Замените это имя на уникальное имя, которое используется для ключа.

    Примечание по безопасностиПримечание по безопасности

    Для рабочих сценариев настоятельно рекомендуется импортировать асимметричный ключ, поскольку это позволяет администратору выполнить депонирование ключа в системе депонирования ключей. Асимметричный ключ, созданный в хранилище, не может быть депонирован, поскольку закрытый ключ не может покидать хранилище. Ключи, используемые для защиты важных данных, должны быть депонированы. Утрата асимметричного ключа приведет к потере данных без возможности восстановления.

    Примечание по безопасностиПримечание по безопасности

    Хранилище ключей поддерживает несколько версий ключа с одним именем. Ключам, которые используются соединителем SQL Server, не следует присваивать версии, а также не следует выполнять их смену. Если администратор хочет выполнить смену для ключа, используемого для шифрования SQL Server, то следует создать новый ключ с другим именем в хранилище и использовать его для шифрования ключа шифрования данных.

    Дополнительные сведения о том, как импортировать ключ в хранилище ключей или создать ключ в хранилище ключей (не рекомендуется для рабочей среды) см. в разделе Добавление ключа или секрета в хранилище ключей руководства Начало работы с хранилищем ключей Azure.

    Важное примечаниеВажно!

    Пользователям должны быть доступны как минимум операции wrapKey и unwrapKey для хранилища ключей.

  3. Получение субъектов службы Azure Active Directory для их использования со службой SQL Server: Когда организация регистрируется для использования облачной службы Майкрософт, ей становится доступно решение Azure Active Directory. Создание субъектов службы в Azure Active Directory для SQL Server для их использования (с целью проверки своей подлинности в Azure Active Directory) при получении доступа к хранилищу ключей.

    • Один субъект службы потребуется администратору SQL Server для получения доступа к хранилищу при настройке SQL Server для использования шифрования.

    • Другой субъект службы потребуется Компонент ядра СУБД SQL Server для получения доступа к хранилищу для распаковки ключей, используемых при шифровании SQL Server.

    Дополнительные сведения о регистрации приложения и создании субъекта службы см. в разделе Регистрация приложения в Azure Active Directory темы Начало работы с хранилищем ключей Azure. Процесс регистрации возвращает идентификатор приложения (также известный как ИДЕНТИФИКАТОР КЛИЕНТА) и ключ проверки подлинности (также известный как секрет) для всех субъектов службы Azure Active Directory. При использовании инструкции CREATE CREDENTIAL необходимо удалить дефис из ИДЕНТИФИКАТОРА КЛИЕНТА. Запишите следующие сведения для использования в скриптах ниже.

    • Субъект службы для имени для входа sysadmin: CLIENTID_sysadmin_login и SECRET_sysadmin_login

    • Субъект службы для Компонент ядра СУБД SQL Server: CLIENTID_DBEngine и SECRET_DBEngine.

  4. Предоставление разрешения для субъектов службы на получение доступа к хранилищу ключей Для обоих субъектов службы, CLIENTID_sysadmin_login и CLIENTID_DBEngine, требуются разрешения get, list, wrapKey и unwrapKey для хранилища ключей. Если вы планируете создавать ключи с помощью SQL Server, вам также необходимо предоставить разрешение create для хранилища ключей.

    Дополнительные сведения о предоставлении разрешений для хранилища см. в разделе Разрешение для приложения на использование ключа или секрета справочника Начало работы с хранилищем ключей Azure.

    Ссылки на документацию по хранилищу ключей Azure

В начало

Шаг 2. Установка соединителя SQL Server

Соединитель SQL Server загружается и устанавливается администратором компьютера SQL Server. Соединитель SQL Server доступен для загрузки в Центре загрузки Майкрософт. Выполните поиск соединителя SQL Server для хранилища ключей Microsoft Azure, просмотрите сведения, требования к системе и инструкции по установке, а затем загрузите соединитель и начните установку с помощью кнопки Выполнить. Просмотрите лицензию и примите ее, чтобы продолжить.

По умолчанию соединитель устанавливается в C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault. Это расположение можно изменить во время установки. (При изменении внести корректировки в скрипты ниже.)

После завершения установки на компьютере будут установлены следующие компоненты.

  • Microsoft.AzureKeyVaultService.EKM.dll. Это поставщик службы шифрования DLL расширенного управления ключами, он должен быть зарегистрирован в SQL Server с помощью инструкции CREATE CRYPTOGRAPHIC PROVIDER.

  • Соединитель SQL Server хранилища ключей Azure. Это служба Windows, которая позволяет поставщику служб шифрования расширенного управления ключами взаимодействовать с хранилищем ключей.

Установка соединителя SQL Server также дает возможность загрузить дополнительные примеры скриптов для шифрования SQL Server.

В начало

Шаг 3. Настройка SQL Server с целью использования поставщика расширенного управления ключами для хранилища ключей

Разрешения

Для завершения всего этого процесса требуется разрешение CONTROL SERVER или наличие предопределенной роли сервера sysadmin. Для определенных действий требуются следующие разрешения.

  • Для создания поставщика служб шифрования требуется разрешение CONTROL SERVER или наличие предопределенной роли сервера sysadmin.

  • Для изменения параметра конфигурации и выполнения инструкции RECONFIGURE должно быть предоставлено разрешение ALTER SETTINGS на уровне сервера. Разрешение ALTER SETTINGS неявным образом предоставлено предопределенным ролям сервера sysadmin и serveradmin.

  • Для создание учетных данных требуется разрешение ALTER ANY CREDENTIAL.

  • Для добавления учетных данных к имени для входа необходимо разрешение ALTER ANY LOGIN.

  • Для создания асимметричного ключа требуется разрешение CREATE ASYMMETRIC KEY.

Значок стрелки, используемый со ссылкой «В начало»[Top]

Настройка SQL Server для использования поставщика служб шифрования

  1. Настройте Ядро СУБД для использования расширенного управления ключами и зарегистрируйте (создайте) поставщика служб шифрования с SQL Server.

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO 
    
  2. Настройте учетные данные SQL Server для имени для входа администратора SQL Server, чтобы использовать ключ хранилища для настройки и управления сценариями шифрования SQL Server.

    Важное примечаниеВажно!

    Аргумент IDENTITY разрешения CREATE CREDENTIAL требует имени хранилища ключей. Для аргумента SECRET разрешения CREATE CREDENTIAL требуется одновременное указание <идентификатора клиента> (без дефисов) и <секрета> без использования пробела между ними.

    В следующем примере из идентификатора клиента (EF5C8E09-4D2A-4A76-9998-D93440D8115D) исключен дефис, идентификатор введен в форме строки EF5C8E094D2A4A769998D93440D8115D, а секрет представлен строкой SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Примеры использования переменных для аргументов CREATE CREDENTIAL и удаления дефисов программным путем из идентификатора клиента см. по ссылке CREATE CREDENTIAL (Transact-SQL).

  3. При импорте асимметричного ключа, как описано выше в шаге 1 раздела 3, откройте ключ, указав имя ключа в следующем примере.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Хотя этот способ не рекомендуется для производства (поскольку невозможно экспортировать ключ), асимметричный ключ можно создать напрямую в хранилище из SQL Server. Если вы не импортировали ключ ранее, создайте асимметричный ключ для тестирования в хранилище ключей с помощью следующего скрипта. Выполните скрипт, используя имя для входа, которое предоставляется в рамках учетных данных sysadmin_ekm_cred.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Дополнительные сведения см. в следующих разделах:

Значок стрелки, используемый со ссылкой «В начало»[Top]

Примеры

Пример А. Прозрачное шифрование данных с помощью асимметричного ключа из хранилища ключей

После завершения выполнения шагов, описанных выше, создайте учетные данные и имя для входа, а также ключ шифрования базы данных, защищенный асимметричным ключом, в хранилище ключей. Используйте ключ для шифрования базы данных с помощью прозрачного шифрования.

Для шифрования базы данных требуется разрешение CONTROL в базе данных.

Включение прозрачного шифрования данных посредством расширенного управления ключами и хранилища ключей

  1. Создайте учетные данные SQL Server, чтобы использовать Ядро СУБД при получении доступа к службе расширенного управления ключами хранилища во время загрузки базы данных.

    Важное примечаниеВажно!

    Аргумент IDENTITY разрешения CREATE CREDENTIAL требует имени хранилища ключей. Для аргумента SECRET разрешения CREATE CREDENTIAL требуется одновременное указание <идентификатора клиента> (без дефисов) и <секрета> без использования пробела между ними.

    В следующем примере из идентификатора клиента (EF5C8E09-4D2A-4A76-9998-D93440D8115D) исключен дефис, идентификатор введен в форме строки EF5C8E094D2A4A769998D93440D8115D, а секрет представлен строкой SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Создайте имя для входа SQL Server, которое будет использоваться Ядро СУБД для прозрачного шифрования данных, а затем добавьте учетные данные к этому имени. В этом примере используется асимметричный ключ CONTOSO_KEY, содержащийся в хранилище ключей, который был импортирован или создан ранее для базы данных master, как описано в шаге 3 раздела 3 выше.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. Создайте ключ шифрования базы данных (DEK), который будет использоваться для прозрачного шифрования данных. Ключ шифрования базы данных можно создать, используя любой поддерживаемый алгоритм SQL Server или длину ключа. Ключ шифрования будет защищен с помощью асимметричного ключа в хранилище ключей.

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

    USE ContosoDatabase;
    GO
    
    
    
    
    
    
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    Дополнительные сведения см. в следующих разделах:

В начало

Пример Б. Шифрование резервных копий с помощью асимметричного ключа из хранилища ключей

Зашифрованные резервные копии поддерживаются, начиная с версии . В следующем примере создается и восстанавливается резервная копия, зашифрованная с помощью ключа шифрования данных, защищенного с помощью асимметричного ключа в хранилище ключей.

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

Образец кода восстановления

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Дополнительные сведения о параметрах резервного копирования см. в разделе BACKUP (Transact-SQL).

Пример В. Шифрование на уровне столбцов с помощью асимметричного ключа из хранилища ключей

В следующем примере создается симметричный ключ, защищенный с помощью асимметричного ключа в хранилище ключей. Затем симметричный ключ используется для шифрования данных в базе данных.

В этом примере используется асимметричный ключ CONTOSO_KEY, содержащийся в хранилище ключей, который был импортирован или создан ранее, как описано в шаге 3 раздела 3 выше. Чтобы использовать асимметричный ключ в базе данных ContosoDatabase, необходимо выполнить повторно инструкцию CREATE ASYMMETRIC KEY, чтобы предоставить базу данных ContosoDatabase со ссылкой на ключ.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

См. также

Справочник

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)

CREATE CREDENTIAL (Transact-SQL)

CREATE ASYMMETRIC KEY (Transact-SQL)

CREATE SYMMETRIC KEY (Transact-SQL)

Основные понятия

Расширенное управление ключами (Extensible Key Management)

включить прозрачное шифрование данных с использованием расширенного управления ключами

Другие ресурсы

Backup Encryption

Create an Encrypted Backup