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

Область применения: База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics

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

Информация в статье применима к Базе данных SQL Azure, Управляемому экземпляру SQL Azure и Azure Synapse Analytics (выделенные пулы SQL, ранее — хранилище данных SQL). Сведения о прозрачном шифровании данных для выделенных пулов SQL в рабочих областях Azure Synapse см. в статье Шифрование в Azure Synapse Analytics.

Примечание.

Теперь SQL Azure поддерживает использование в качестве предохранителя TDE ключа RSA, хранящегося в управляемом HSM. Управляемое устройство HSM в Azure Key Vault — это соответствующая стандартам и полностью управляемая высокодоступная облачная служба для одного клиента. С ее помощью можно защищать криптографические ключи для облачных приложений, используя устройства HSM, отвечающие стандартам FIPS 140-2 уровня 3. Дополнительные сведения об управляемых HSM.

Примечание.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

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

  • Подписка Azure и права администратора для нее.
  • [Рекомендуется, но необязательно.] Аппаратный модуль безопасности (HSM) или локальное хранилище ключей для создания локальной копии материала ключа для предохранителя TDE.
  • У вас должна быть установлена и запущена среда Azure PowerShell.
  • Создайте Azure Key Vault и ключи для TDE.
  • Ключ должен иметь следующие атрибуты, которые должны использоваться для TDE:
    • Дата активации (если задано) должна быть датой и временем в прошлом
    • Дата окончания срока действия (если задано) должна быть будущей датой и временем
    • Ключ должен находиться в состоянии "Включено"
    • возможность выполнять операции получения, упаковки ключа и распаковки ключа.
  • Чтобы использовать управляемый ключ HSM, следуйте инструкциям по созданию и активации управляемого модуля HSM с помощью Azure CLI.

Инструкции по установке модуля Az см. в статье об установке Azure PowerShell. Сведения об определенных командлетах см. в AzureRM.Sql.

Дополнительные сведения о Key Vault см. в Инструкции PowerShell в Key Vault и Как использовать обратимое удаление Key Vault в PowerShell.

Внимание

Модуль PowerShell Azure Resource Manager по-прежнему поддерживается, но вся будущая разработка сосредоточена на модуле Az.Sql. Исправления ошибок для модуля AzureRM будут продолжать выпускаться как минимум до декабря 2020 г. Аргументы команд в модулях Az и AzureRm практически идентичны. Дополнительные сведения о совместимости см. в статье Знакомство с новым модулем Az для Azure PowerShell.

Назначение удостоверения Microsoft Entra серверу

Если у вас есть существующий сервер, используйте следующее, чтобы добавить удостоверение Microsoft Entra на сервер:

$server = Set-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -AssignIdentity

При создании сервера используйте командлет New-AzSqlServer с тегом -Identity, чтобы добавить удостоверение Microsoft Entra во время создания сервера:

$server = New-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -Location <RegionName> `
    -ServerName <LogicalServerName> -ServerVersion "12.0" -SqlAdministratorCredentials <PSCredential> -AssignIdentity

Предоставление серверу разрешений на доступ к Key Vault

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

Set-AzKeyVaultAccessPolicy -VaultName <KeyVaultName> `
    -ObjectId $server.Identity.PrincipalId -PermissionsToKeys get, wrapKey, unwrapKey

Чтобы добавить разрешения для сервера на управляемый модуль HSM, добавьте на сервер локальную роль пользователя RBAC "Шифрование криптографической службы управляемого HSM". Это позволит серверу получать, переносить и распаковывать ключи в управляемых HSM. Инструкции по подготовке доступа сервера к управляемому HSM

Добавление на сервер ключа из Key Vault и настройка предохранителя TDE

  • Используйте командлет Get-AzKeyVaultKey, чтобы получить идентификатор ключа из хранилища ключей.
  • Используйте командлет Add-AzSqlServerKeyVaultKey, чтобы добавить на сервер ключ из Key Vault.
  • Используйте командлет Set-AzSqlServerTransparentDataEncryptionProtector, чтобы настроить ключ в качестве предохранителя TDE для всех ресурсов сервера.
  • Используйте командлет Get-AzSqlServerTransparentDataEncryptionProtector, чтобы проверить правильность настройки предохранителя TDE.

Примечание.

Для управляемых ключей HSM используйте версию PowerShell Az.Sql 2.11.1.

Примечание.

Общая длина имени хранилища ключей и имени ключа не может превышать 94 символа.

Совет

Пример идентификатора KeyId из Key Vault: https://contosokeyvault.vault.azure.net/keys/Key1/1a1a2b2b3c3c4d4d5e5e6f6f7g7g8h8h

Пример KeyId из управляемого модуля HSM:
https://contosoMHSM.managedhsm.azure.net/keys/myrsakey

# add the key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>

# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> `
   -Type AzureKeyVault -KeyId <KeyVaultKeyId>

# confirm the TDE protector was configured as intended
Get-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName>

Включение прозрачного шифрования данных

Выполните командлет Set-AzSqlDatabaseTransparentDataEncryption, чтобы включить TDE.

Set-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> -State "Enabled"

Теперь для базы данных или хранилища данных включено прозрачное шифрование данных с ключом шифрования из Key Vault.

Проверка состояния и активности шифрования

Используйте Get-AzSqlDatabaseTransparentDataEncryption, чтобы получить состояние шифрования для базы данных или хранилища данных.

# get the encryption state of the database
Get-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> `

Полезные командлеты PowerShell

  • Выполните командлет Set-AzSqlDatabaseTransparentDataEncryption, чтобы выключить TDE.

    Set-AzSqlDatabaseTransparentDataEncryption -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -DatabaseName <DatabaseName> -State "Disabled"
    
  • Командлет Get-AzSqlServerKeyVaultKey возвращает список ключей из Key Vault, добавленных на указанный сервер.

    # KeyId is an optional parameter, to return a specific key version
    Get-AzSqlServerKeyVaultKey -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  • Командлет Remove-AzSqlServerKeyVaultKey удаляет с сервера ключ Key Vault.

    # the key set as the TDE Protector cannot be removed
    Remove-AzSqlServerKeyVaultKey -KeyId <KeyVaultKeyId> -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    

Устранение неполадок

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

  • Если не удается найти хранилище ключей, убедитесь, что выбрана правильная подписка.

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • Если новый ключ не удается добавить на сервер или новый ключ нельзя обновить в качестве предохранителя TDE, проверьте следующее:
    • ключ не должен иметь дату окончания срока действия;
    • для ключа должны быть включены операции получения, упаковки ключа и распаковки ключа.

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

  • Сведения о том, как заменить предохранитель TDE для сервера в соответствии с требованиями безопасности, приводятся в этой статье.
  • Сведения о том, как удалить потенциально скомпрометированный предохранитель TDE в случае угрозы безопасности, вы найдете в этой статье.