Настройка интеграции Azure Key Vault для SQL Server на виртуальных машинах Azure (Resource Manager)

Применимо к:SQL Server на виртуальной машине Azure

Существует несколько функций шифрования SQL Server, например прозрачное шифрование данных (TDE), шифрование на уровне столбцов (CLE) и шифрование резервной копии. Эти формы шифрования требуют хранить используемые для шифрования ключи и управлять ими. Служба Azure Key Vault предназначена для обеспечения лучшей защиты этих ключей и управления ими в надежном и высокодоступном расположении. Соединитель SQL Server позволяет SQL Server использовать эти ключи из хранилища ключей Azure.

Если вы используете SQL Server в локальной среде, можете выполнить шаги для получения доступа к Azure Key Vault из локального экземпляра SQL Server. Если SQL Server расположен на виртуальных машинах Azure, можно сэкономить время, воспользовавшись функцией интеграции Azure Key Vault.

Примечание.

Интеграция с Azure Key Vault доступна только для выпусков SQL Server Enterprise, Developer и Evaluation. Начиная с SQL Server 2019, также поддерживается выпуск Standard.

Если эта функция включена, она автоматически устанавливает соединитель SQL Server, настраивает поставщик расширенного управления ключами для доступа к хранилищу ключей Azure и создает учетные данные, которые позволяют получить доступ к вашему хранилищу. Если вы изучили шаги в ранее упомянутой документации для локального компьютера, то увидели, что эта функция автоматизирует шаги 2 и 3. Единственное, что останется сделать вручную, — создать хранилище ключей и ключи. Далее вся настройка виртуальной машины SQL Server выполняется автоматически. Когда настройка этой функции завершится, можно выполнить инструкции Transact-SQL (T-SQL), чтобы начать шифрование или резервное копирование баз данных как обычно.

Примечание.

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

Подготовка к интеграции AKV

Чтобы использовать интеграцию хранилища ключей Azure для настройки виртуальной машины с SQL Server, необходимо выполнить несколько предварительных условий:

  1. Установка Azure PowerShell
  2. Создание клиента Microsoft Entra
  3. Создайте хранилище ключей.

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

Примечание.

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Чтобы установить Azure PowerShell, выполните следующие действия

Убедитесь, что установлен последний модуль Azure PowerShell. Подробнее: Установка и настройка Azure PowerShell.

Регистрация приложения в идентификаторе Microsoft Entra

Сначала необходимо иметь клиент Microsoft Entra в подписке. Среди прочих преимуществ она дает возможность предоставить доступ к вашему хранилищу ключей для определенных пользователей и приложений.

Затем зарегистрируйте приложение с помощью идентификатора Microsoft Entra. Это дает вам учетную запись субъекта-службы, которая имеет доступ к хранилищу ключей, которому требуется виртуальная машина. В статье Azure Key Vault вы можете найти эти действия в разделе "Регистрация приложения с помощью идентификатора Microsoft Entra ID" или просмотреть шаги с снимками экрана в разделе "Получить удостоверение" для раздела приложения этой записи блога. Перед выполнением этих шагов учтите, что во время этой регистрации необходимо собрать следующие сведения, которые понадобятся в дальнейшем при включении интеграции Azure Key Vault на виртуальной машине SQL.

  • После добавления приложения найдите идентификатор приложения (также известный как ClientID или AppID) на панели зарегистрированных приложений . Идентификатор приложения позже назначается параметру $spName (имя субъекта-службы) в сценарии PowerShell, чтобы обеспечить интеграцию Azure Key Vault.

    Application ID

  • Во время выполнения этой процедуры при создании ключа скопируйте секрет ключа, как показано на приведенном ниже снимке экрана. Этот секрет ключа позже назначается параметру $spSecret (секрет субъекта-службы) в сценарии PowerShell.

    AAD secret

  • Идентификатор и секрет приложения также будут использоваться для создания учетных данных в SQL Server.

  • Необходимо авторизовать новый идентификатор приложения (или идентификатор клиента), предоставив следующие разрешения на доступ: get, wrapKey, unwrapKey. Это делается с помощью командлета Set-AzKeyVaultAccessPolicy. Дополнительные сведения см. в статье Что такое хранилище ключей Azure?

Создание хранилища ключей

Чтобы использовать Azure Key Vault для хранения ключей, которые будут использоваться для шифрования на виртуальной машине, требуется доступ к хранилищу ключей. Если вы еще не настроили ваше хранилище ключей, создайте его, выполнив следующие действия, описанные в статье Приступая к работе с хранилищем ключей Azure. Перед выполнением этих действий необходимо собрать некоторые сведения во время настройки, необходимые позже при включении интеграции Azure Key Vault на виртуальной машине SQL.

New-AzKeyVault -VaultName 'ContosoKeyVault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East Asia'

При создании хранилища ключей запишите возвращенное свойство vaultUri , которое является URL-адресом хранилища ключей. В примере, приведенном на этом шаге, показанное далее, имя хранилища ключей — ContosoKeyVault, поэтому URL-адрес хранилища ключей будет иметь значение https://contosokeyvault.vault.azure.net/.

URL-адрес хранилища ключей позже назначается параметру $akvURL в сценарии PowerShell для включения интеграции хранилища ключей Azure.

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

Примечание.

Поставщик расширенного управления ключами (EKM) версии 1.0.4.0 устанавливается на виртуальной машине SQL Server с помощью расширения IaaS (инфраструктура как услуга) для SQL. Обновление расширения агента IaaS SQL не обновляет версию поставщика. При необходимости вручную обновите версию поставщика EKM (например, во время миграции на Управляемый экземпляр Базы данных SQL).

Включение и настройка интеграции с Key Vault

Интеграцию Key Vault можно включить во время подготовки или настроить ее для существующих виртуальных машин.

Новые виртуальные машины

При подготовке новой виртуальной машины SQL с помощью Resource Manager на портале Azure предоставляется возможность включить интеграцию Azure Key Vault.

SQL Azure Key Vault Integration

Пошаговые инструкции по подготовке см. в статье Подготовка виртуальной машины SQL на портале Azure.

Существующие виртуальные машины

Для существующих виртуальных машин SQL перейдите к ресурсу Виртуальные машины SQL и в разделе Настройки выберите Безопасность. Выберите Включить, чтобы включить интеграцию Azure Key Vault.

На следующем снимке экрана показано, как включить Azure Key Vault на портале для существующей виртуальной машины SQL Server (этот экземпляр SQL Server использует порт 1401, отличный от по умолчанию):

SQL Key Vault integration for existing VMs

По завершении в нижней части страницы Безопасность нажмите кнопку Применить, чтобы сохранить изменения.

Примечание.

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

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

Существует несколько способов шифрования, преимуществами которых вы можете воспользоваться.

Следующие сценарии Transact-SQL содержат примеры для каждого из этих вариантов.

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

Каждый пример основан на двух компонентах: асимметричном ключе из хранилища ключей CONTOSO_KEY и учетных данных, созданных функцией интеграции AKV с именем Azure_EKM_cred. Следующие команды Transact-SQL настраивают эти предварительные требования для запуска примеров.

USE master;
GO

--create credential
--The <<SECRET>> here requires the <Application ID> (without hyphens) and <Secret> to be passed together without a space between them.
CREATE CREDENTIAL Azure_EKM_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--Map the credential to a SQL login that has sysadmin permissions. This allows the SQL login to access the key vault when creating the asymmetric key in the next step.
ALTER LOGIN [SQL_Login]
ADD CREDENTIAL Azure_EKM_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'KeyName_in_KeyVault',  --The key name here requires the key we created in the key vault
CREATION_DISPOSITION = OPEN_EXISTING;

Прозрачное шифрование данных (TDE)

  1. Создайте имя входа SQL Server для использования компонентом Database Engine для прозрачного шифрования данных, а затем добавьте учетные данные.

    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 EKM_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 EKM_Login
    ADD CREDENTIAL Azure_EKM_cred;
    GO
    
  2. Создайте ключ шифрования базы данных, который будет использоваться для прозрачного шифрования данных.

    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
    

Зашифрованные резервные копии

  1. Создайте имя входа SQL Server для использования компонентом Database Engine для шифрования резервных копий, а затем добавьте учетные данные.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it is encrypting the backup.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the Encrypted Backup Login to add the credential for use by
    -- the Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred ;
    GO
    
  2. Зашифруйте архивированную базу данных асимметричным ключом, сохраненным в хранилище ключей.

    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
    

Шифрование на уровне столбцов (CLE)

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

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;

Дополнительные ресурсы

Дополнительные сведения об использовании этих возможностей шифрования см. в статье Использование расширенного управления ключами с функциями шифрования SQL Server.

Обратите внимание, что действия, описанные в этой статье, предполагают, что у вас уже есть SQL Server на виртуальной машине Azure. Если нет, см. статью Подготовка виртуальной машины с SQL Server в Azure. Другие рекомендации по запуску SQL Server на виртуальных машинах Azure см. в статье "Обзор SQL Server в Azure Windows Виртуальные машины".

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

Дополнительные сведения о безопасности см . в статье "Вопросы безопасности" для SQL Server на виртуальных машинах Azure.