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. Поддержка создания собственных ключей.

Примечание

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

Примечание

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

Предварительные требования для 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.

Назначьте своему серверу удостоверение Azure Active Directory (Azure AD)

Если у вас есть существующий сервер, сделайте следующее, чтобы присвоить ему удостоверение Azure Active Directory:

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

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

$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-AzSqlDatabaseTransparentDataEncryptionActivity, чтобы проверить ход выполнения шифрования для базы данных или хранилища данных.

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

# check the encryption progress for a database or data warehouse
Get-AzSqlDatabaseTransparentDataEncryptionActivity -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 в случае угрозы безопасности, вы найдете в этой статье.