Compartilhar via

Azure Synapse Analytics工作区的加密

本文介绍:

  • Synapse Analytics 工作区中静态数据的加密。
  • 配置 Synapse 工作区以便启用使用客户管理的密钥进行加密。
  • 管理用于对工作区中的数据进行加密的密钥。

静态数据加密

完整的静态加密解决方案可确保数据从不以未加密形式持久保存。 对静态数据进行双重加密可以减轻威胁,这种加密采用两个独立的加密层,防止任何一个加密层遭受威胁。 Azure Synapse Analytics为工作区中的数据提供第二层加密,其中包含客户管理的密钥。 此密钥在 Azure 密钥保管库 中受到保护,使你能够拥有密钥管理和轮换。

使用平台管理的密钥启用Azure服务的第一层加密。 默认情况下,Azure磁盘和Azure 存储帐户中的数据会自动静态加密。 在 Azure 加密概述 中详细了解加密在 Microsoft Azure 中的应用方式。

注意

某些被视为客户内容的项目(例如表名称、对象名称和索引名称)可能会在日志文件中传输,以便通过Azure进行支持和故障排除。

Azure Synapse加密

本部分将帮助你更好地了解如何在 Synapse 工作区中启用并强制实施客户管理的密钥加密。 此加密使用Azure 密钥保管库中生成的现有密钥或新密钥。 使用单个密钥对工作区中的所有数据进行加密。 Synapse 工作区支持具有 2048 和 3072 字节大小的 RSA 密钥。

注意

Synapse 工作区不支持使用 EC 密钥进行加密。

以下 Synapse 组件中的数据是通过在工作区级别配置的客户管理的密钥加密的:

  • SQL 池
    • 专用 SQL 池
    • 无服务器 SQL 池
  • Apache Spark 池
  • Azure 数据工厂集成运行时、管道、数据集。

工作区加密配置

可将工作区配置为在创建工作区时启用使用客户管理的密钥的双重加密。 创建新工作区时,请在“安全性”选项卡上启用使用客户管理的密钥进行双重加密的功能。 你可以选择输入密钥标识符 URI,或从工作区所在的区域中的密钥保管库列表中进行选择。 密钥保管库本身需要启用清除保护

重要

创建工作区后,无法更改双重加密的配置设置。

此示意图展示的是要为工作区启用使用客户管理的密钥进行双重加密所必须选择的选项。

先决条件:密钥轮换和 SQL 池状态

警告

更改工作区的加密密钥之前:

  • 确保所有专用 SQL 池都处于联机状态。 脱机池不会重新加密,如果旧密钥或密钥版本已删除、禁用或过期,则无法恢复。
  • 保留用于加密的所有旧密钥和密钥版本,直到每个 SQL 池联机并使用新密钥重新加密。 仅在所有池成功轮换到新密钥后禁用或删除旧密钥。

⚠️ 未能遵循这些先决条件可能会导致 SQL 池永久无法访问,或者无法恢复备份数据。

密钥轮换清单

步骤 行动 状态
1 确认所有 SQL 池处于联机状态
2 确保保留并启用旧密钥
3 轮换客户主密钥 (CMK)
4 验证是否已重新加密所有池
5 在所有池完成后,安全地禁用旧密钥或密钥版本。

密钥管理最佳做法

重要

更改工作区的加密密钥时, 请保留旧密钥 ,直到将旧密钥替换为新密钥。 这样,可在用新密钥重新加密数据之前使用旧密钥解密数据。

SQL 池(联机/脱机)的状态 不会影响 工作区客户管理的密钥(CMK)轮换过程,但 脱机池将仍然使用旧密钥或密钥版本进行加密

如果旧密钥或密钥版本已禁用或过期, 则无法恢复脱机池 ,因为无法进行解密。 恢复这些池后,必须启用旧密钥或密钥版本(1),并且(2)在将来设置过期日期,以允许使用新的密钥或密钥版本进行解密和后续重新加密。

为确保 CMK 轮换顺利, 如果某些 SQL 池在此过程中处于脱机状态,旧的密钥或密钥版本应保持启用状态,并在将来设置其到期日期。 在成功恢复脱机池并使用新密钥或密钥版本重新加密之前,这样做至关重要。

在成功重新加密和验证所有池和备份之前,请勿删除旧密钥或密钥版本。 仅在满足所有要求后 禁用 旧密钥。

密钥轮换故障排除

如果 SQL 池在密钥轮换后处于脱机状态:

  1. 使用 PowerShell 检查 SQL 池密钥版本,确认池需要哪个密钥或密钥版本:

    Get-AzSqlServerTransparentDataEncryptionProtector -ServerName 'ContosoServer' -ResourceGroupName 'WORKSPACE_MANAGED_RESOURCE_GROUP'
    

注意

ResourceGroupName 工作区的 托管资源组。 可以通过选择 Synapse 工作区并在 JSON 视图中查看 managedResourceGroup 值,在 Azure 门户中找到此值。

  1. 在 Azure 密钥保管库 中启用所需的旧密钥或版本。

  2. 为旧密钥或密钥版本设置将来的到期日期

  3. 恢复 SQL 池。

  4. 池恢复在线后,允许其使用新密钥重新加密。

  5. 通过在 SQL 池中运行以下 T-SQL 查询来验证每个数据库的加密状态

    SELECT
        [name],
        [is_encrypted]
    FROM
        sys.databases;
    
    • is_encrypted 列将显示加密状态(1 = 加密, 0 =未加密)。
  6. 确认所有池和备份都可访问并加密后,可以安全地禁用旧密钥或密钥版本(不删除)。

密钥访问和工作区激活

使用客户管理的密钥的Azure Synapse加密模型涉及工作区访问Azure 密钥保管库中的密钥,以便根据需要加密和解密。 可通过访问策略或 Azure 密钥保管库 RBAC 将密钥提供给工作区。 通过Azure 密钥保管库访问策略授予权限时,请在创建策略期间选择“仅限应用程序”选项(选择工作区托管标识,不将其添加为授权应用程序)。

在激活工作区之前,必须向工作区托管标识授予访问密钥保管库所需的权限。 这种分阶段的工作区激活方法可以确保工作区中的数据是通过客户管理的密钥进行加密的。 可以为单个专用 SQL 池启用或禁用加密。 默认情况下,每个专用池均未启用加密。

使用用户分配的托管标识

工作区可配置为使用 User 分配的托管标识访问存储在Azure 密钥保管库中的客户管理的密钥。 配置用户指定的托管身份,以避免在使用客户管理的密钥进行双重加密时,分阶段激活 Azure Synapse 工作区。 需要“托管标识参与者”内置角色,才能将用户分配的托管标识分配给 Azure Synapse 工作区。

注意

当Azure 密钥保管库位于防火墙后面时,无法将用户分配的托管标识配置为访问客户管理的密钥。

此图显示了为了使工作区能够将用户分配的托管标识用于通过客户管理的密钥进行的双重加密而必须选择的选项。

权限

若要加密或解密静态数据,托管标识必须具有以下权限。 同样,如果使用资源管理器模板创建新密钥,模板的“keyOps”参数必须具有以下权限:

  • WrapKey (在创建新密钥时将密钥插入密钥保管库)。
  • 解包密钥(用于获取解密所需的密钥)。
  • 获取(用于读取密钥的公共部分)

工作区激活

如果在创建工作区期间未将用户分配的托管标识配置为访问客户管理的密钥,则工作区会保持“挂起”状态,直到激活成功为止。 必须先激活工作区,然后才能使用完整的功能。 例如,激活成功后,只能创建新的专用 SQL 池。 授予工作区托管标识对密钥保管库的访问权限,并在工作区Azure门户横幅中选择激活链接。 激活成功完成后,工作区便可供使用并保证其中的所有数据都使用客户管理的密钥进行保护。 如前文所述,密钥保管库必须启用清除保护才能激活成功。

此示意图展示的是带有工作区激活链接的横幅。

管理工作区客户管理的密钥

可以在 Azure 门户中更改用于加密 Encryption 页中的数据的客户管理的密钥。 你还可以在此处使用密钥标识符来选择新密钥,或者从工作区所在的区域里自己有权访问的密钥保管库中进行选择。 如果没有从之前使用的那些密钥保管库中选择密钥,请授予工作区托管标识对新的密钥保管库中的密钥进行“获取”、“包装”和“解包”操作的权限。 工作区将验证其对新密钥保管库的访问权限,并使用新密钥重新加密工作区中的所有数据。

此图显示了 Azure portal 中的工作区加密部分。

Azure密钥保管库的策略可用于自动和定期轮换密钥,或对密钥执行操作,这可能会导致创建新的密钥版本。 你可以选择使用最新版本的有效密钥对工作区中的所有数据进行重新加密。 若要重新加密,请将Azure门户中的密钥更改为临时密钥,然后切换回要用于加密的密钥。 例如,若要使用最新版本的有效密钥 Key1 对数据加密进行更新,请将工作区客户管理的密钥更改为临时密钥 Key2。 等待直到使用 Key2 的加密操作完成。 然后将工作区客户管理的密钥切换回 Key1,系统将使用最新版本的 Key1 重新加密工作区中的数据。

注意

密钥轮换是一个三步过程:

  1. 将工作区客户管理的 密钥从主密钥 更改为 临时密钥
  2. 等待 15-30 分钟 重新加密过程完成。
  3. 将工作区客户管理的密钥更改回 主密钥 (现在使用新版本)。

此过程可确保使用最新密钥版本安全地重新加密所有工作区数据。

注意

创建新密钥版本时,Azure Synapse Analytics不会自动重新加密数据。 若要确保工作区的一致性,请使用上述过程强制对数据进行重新加密。

使用服务管理密钥的 SQL 透明数据加密

SQL 透明数据加密(TDE)适用于未启用双重加密的工作区中的专用 SQL 池。 在此类型的工作区中,服务管理的密钥用于为专用 SQL 池中的数据提供双重加密。 可以为单个专用 SQL 池启用或禁用使用服务管理的密钥的 TDE。

用于 Azure SQL 数据库 和 Azure Synapse 的 Cmdlet

若要通过 PowerShell 配置 TDE,必须作为Azure所有者、参与者或 SQL 安全管理器进行连接。

将以下 cmdlet 用于Azure Synapse工作区。

Cmdlet 说明
Set-AzSynapseSqlPoolTransparentDataEncryption 为 SQL 池启用或禁用透明数据加密。
Get-AzSynapseSqlPoolTransparentDataEncryption 获取 SQL 池的透明数据加密状态。
New-AzSynapseWorkspaceKey 将密钥保管库密钥添加到工作区。
Get-AzSynapseWorkspaceKey 获取密钥库中的工作区密钥
Update-AzSynapseWorkspace 为工作区设置透明数据加密保护器。
Get-AzSynapseWorkspace 获取透明数据加密保护器
Remove-AzSynapseWorkspaceKey (删除 AzSynapse 工作区的密钥) 从工作区中删除“密钥保管库”密钥。