Azure 加密概述
本文概述了如何在 Azure 中使用加密。 其中涵盖了加密的主要领域,包括 Azure Key Vault 的静态加密、动态加密以及密钥管理。 每个部分包括更详细信息的链接。
静态数据加密
静态数据包括以任何数字格式驻留在物理介质上的永久性存储中的信息。 该介质可包括磁性介质或光学介质上的文件、归档数据和数据备份。 Microsoft Azure 提供各种数据存储解决方案,以满足不同需求,包括文件、磁盘、blob 和表存储。 Microsoft 还提供加密以保护 Azure SQL 数据库、Azure Cosmos DB 和 Azure Data Lake。
可使用 AES 256 数据加密进行静态数据加密,此功能可用于服务型软件 (SaaS)、平台即服务 (PaaS) 和基础结构即服务 (IaaS) 云模型中的服务。 本文总结并提供资源,以帮助使用 Azure 加密选项。
有关如何在 Azure 中加密静态数据的更详细的讨论,请参阅 Azure 静态数据加密。
Azure 加密模型
Azure 支持各种加密模型,包括使用服务托管密钥、Key Vault 中客户托管密钥或客户所控硬件上客户托管密钥的服务器端加密。 通过客户端加密,可在本地或另一个安全位置管理并存储密钥。
客户端加密
客户端加密在 Azure 之外执行。 其中包括:
- 由客户数据中心中运行的应用程序或服务应用程序加密的数据。
- 当 Azure 接收到数据时,数据已加密。
使用客户端加密时,云服务提供商无法访问加密密钥,因此无法解密该数据。 你完全控制了密钥。
服务器端加密
三个服务器端加密模型提供不同的密钥管理特性,可根据要求进行选择:
服务托管密钥:可带来低开销的控制和便利。
客户管理的密钥:可用于控制密钥,包括支持“创建自己的密钥”(BYOK) 或生成新密钥。
客户所控硬件上的服务托管密钥:可用于管理不受 Microsoft 控制的专有存储库中的密钥。 此特性称为自留密钥 (HYOK)。 但是,配置相当复杂,并且大多数 Azure 服务都不支持此模式。
Azure 磁盘加密
所有托管磁盘、快照和映像都通过服务管理的密钥使用存储服务加密进行加密。 Azure 还提供了选项来保护临时磁盘、保护缓存和管理 Azure Key Vault 中的密钥。 有关详细信息,请参阅托管磁盘加密选项概述。
Azure 存储服务加密
Azure Blob 存储和 Azure 文件共享中的静态数据都可以在服务器端和客户端方案中进行加密。
Azure 存储服务加密 (SSE) 可在数据存储前自动加密数据,并在检索数据时自动解密数据。 此过程对用户是完全透明的。 存储服务加密使用 256 位高级加密标准 (AES) 加密,这是可用的最强分组加密中的一种。 AES 采用透明方式处理加密、解密和密钥管理。
Azure blob 的客户端加密
可通过各种方式执行 Azure blob 的客户端加密。
可使用适用于 .NET NuGet 包的 Azure 存储客户端库在客户端应用程序内加密数据,然后再将其上传到 Azure 存储。
若要详细了解和下载适用于.NET NuGet 包的 Azure 存储客户端库,请参阅 Windows Azure 存储 8.3.0。
在 Key Vault 中使用客户端加密时,将使用 Azure 存储客户端 SDK 生成的一次性对称内容加密密钥 (CEK) 加密数据。 CEK 在使用密钥加密密钥 (KEK) 加密后,可以是对称密钥,也可以是非对称密钥对。 可在本地进行管理或将其存储在 Key Vault 中。 然后,将加密数据上传到 Azure 存储。
若要详细了解 Key Vault 的客户端加密和学习使用操作说明,请参阅教程:在 Azure 存储中使用 Key Vault 加密和解密 Blob。
最后,还可使用适用于 Java 的 Azure 存储客户端库执行客户端加密,之后再将数据上传到 Azure 存储,并在将数据下载到客户端时解密数据。 此库还支持与 Key Vault 集成,以便管理存储帐户密钥。
使用 Azure SQL 数据库加密静态数据
Azure SQL 数据库是 Azure 中通用的关系数据库服务,支持关系数据、JSON、空间和 XML 等结构。 SQL 数据库通过透明数据加密 (TDE) 功能支持服务器端加密,通过 Always Encrypted 功能支持客户端加密。
透明数据加密
TDE 可通过数据库加密密钥 (DEK) 实时加密 SQL Server、Azure SQL 数据库和 Azure Synapse Analytics 数据文件,该加密密钥存储在数据库启动记录中,可在恢复期间使用。
TDE 使用 AES 和三重数据加密标准 (3DES) 加密算法保护数据和日志文件。 数据库文件加密在页面级执行。 加密数据库中的页面在写入磁盘之前被加密,在读入内存后被解密。 默认情况下,新创建的 Azure SQL 数据库启用 TDE。
Always Encrypted 功能
借助 Azure SQL 中的 Always Encrypted 功能,可在客户端应用程序中加密数据,之后再将其存储在 Azure SQL 数据库中。 还可将本地数据库管理工作委派给第三方,并将数据拥有者和可查看数据的人员,以及管理数据但无权访问数据的人员分开。
单元级加密或列级加密
借助 Azure SQL 数据库,可使用 Transact-SQL 对数据列应用对称加密。 这种方法被称为单元级加密或列级加密 (CLE),因为可使用这种方法通过不同加密密钥来加密特定列,甚至是特定数据单元。 这样可以提供比 TDE 更加精细的加密功能,能够加密页面中的数据。
CLE 具有内置函数,可通过函数使用对称或非对称密钥、证书的公钥或 3DES 的密码来加密数据。
Azure Cosmos DB 数据库加密
Azure Cosmos DB 由 Microsoft 提供,是全球分布式多模型数据库。 存储在非易失性存储(固态硬盘)中的 Azure Cosmos DB 中的用户数据默认情况下已加密。 无法将其打开或关闭。 静态加密是使用许多安全技术实现的,其中包括安全的密钥存储系统、加密的网络以及加密 API。 加密密钥由 Microsoft 管理,并根据 Microsoft 的内部指南进行轮换。 你也可以选择使用客户管理的密钥或 CMK 功能,通过你管理的密钥添加另一层加密。
传输中的数据加密
Azure 提供了许多机制,用于在迁移数据时保持数据的私密性。
Azure 中的数据链路层加密
每当 Azure 客户流量在数据中心之间(在不受 Microsoft 或代表 Microsoft 的某方控制的物理边界之外)移动时,都会在底层网络硬件上点对点应用使用 IEEE 802.1AE MAC 安全标准(也称 MACsec)的数据链路层加密方法。 数据包会在发送之前在设备上进行加密,以防止物理上的“中间人”或窥探/窃听攻击。 由于此技术在网络硬件本身上集成,因此它会在网络硬件上提供线路速率加密,而不会增加可度量的链路延迟。 对于在区域内或区域之间传输的所有 Azure 流量,会默认启用此 MACsec 加密,客户无需执行任何操作。
Azure 中的 TLS 加密
Microsoft 让客户能够使用传输层安全性 (TLS) 协议来保护在云服务和客户之间传输的数据。 Microsoft 的数据中心与连接到 Azure 服务的客户端系统协商建立 TLS 连接。 TLS 提供严格的身份验证,消息隐私性和完整性强(允许检测消息篡改、拦截和伪造),具有良好的互操作性,算法灵活,易于部署和使用。
完美正向保密 (PFS) 通过唯一密钥保护客户的客户端系统与 Azure 云服务间的连接。 连接还支持基于 RSA 的 2,048 位密钥长度、ECC 256 位密钥长度、SHA-384 消息身份验证和 AES-256 数据加密。 此组合使得别人难以拦截和访问传输中的数据。
Azure 存储事务
当通过 Azure 门户与 Azure 存储交互时,所有事务都通过 HTTPS 发生。 也可根据 HTTPS 使用存储 REST API 与 Azure 存储交互。 在调用 REST API 来访问存储帐户中的对象时,可通过启用存储帐户所需的安全传输来强制使用 HTTPS。
使用共享访问签名 (SAS) 除了能委派对 Azure 存储对象的访问权限,还能包含一个选项,指定在使用共享访问签名时只能使用 HTTPS 协议。 通过此方法,可确保只能使用正确的协议发送有 SAS 令牌的链接。
用于访问 Azure 文件共享的 SMB 3.0 支持加密,并且可以在 Windows Server 2012 R2、Windows 8、Windows 8.1 和 Windows 10 中使用。 它允许跨区域访问,甚至在桌面上访问。
在将数据发送到 Azure 存储实例前,客户端加密会对数据加密,所以在通过网络传输时数据是加密的。
Azure 虚拟网络上的 SMB 加密
在运行 Windows Server 2012 或更高版本的 VM 中使用 SMB 3.0 后,可对在 Azure 虚拟网络上传输数据进行加密,以此确保数据安全传输。 加密数据有助于防止数据遭到篡改和窃听攻击。 管理员可以为整个服务器启用 SMB 加密,也可以启用特定的共享。
默认情况下,为共享或服务器启用 SMB 加密后,只允许 SMB 3.0 客户端访问加密共享。
VM 中的传输中加密
根据连接的性质,可通过多种方式对在运行 Windows 的 VM 间传输的数据进行加密。
RDP 会话
可以使用 Windows 客户端计算机或者安装了 RDP 客户端的 Mac 上的远程桌面协议 (RDP) 连接并登录 VM。 在 RDP 会话中通过网络传输的数据可以受到 TLS 的保护。
还可使用远程桌面连接到 Azure 中的 Linux VM。
使用 SSH 安全访问 Linux VM
若要进行远程管理,可以使用安全外壳 (SSH) 连接到在 Azure 中运行的 Linux VM。 SSH 是一种加密的连接协议,利用该协议可以通过未受保护的连接进行安全登录。 它是适用于 Azure 中托管的 Linux VM 的默认连接协议。 使用 SSH 密钥进行身份验证,无需使用密码即可登录。 SSH 使用公钥/私钥对(非对称加密)进行身份验证。
Azure VPN 加密
连接到 Azure 时可以使用虚拟专用网络,它可以创建安全通道以保护通过网络发送的数据的隐私。
Azure VPN 网关
可使用 Azure VPN 网关跨公共连接在虚拟网络和本地位置间发送加密流量,或在虚拟网络间发送流量。
站点到站点 VPN 使用 IPsec 进行传输加密。 Azure VPN网关使用一组默认提议。 可将 Azure VPN 网关配置为使用具有特定加密算法和关键优势的自定义 IPsec/IKE 策略,而不是 Azure 默认策略集。
点到站点 VPN
点到站点 VPN 允许单个客户端计算机访问 Azure 虚拟网络。 安全套接字隧道协议 (SSTP) 可用于创建 VPN 隧道。 它可遍历防火墙(隧道显示为 HTTPS 连接)。 你可使用自己的内部公钥基础结构 (PKI) 根证书颁发机构 (CA) 实现点到站点的连接。
可以使用具有证书身份验证或 PowerShell 的 Azure 门户,将点到站点 VPN 连接配置到虚拟网络。
若要详细了解点到站点 VPN 连接与 Azure 虚拟网络,请参阅:
使用证书身份验证将点到站点连接配置到虚拟网络:Azure 门户
使用证书身份验证将点到站点连接配置到虚拟网络:PowerShell
站点到站点 VPN
可使用站点到站点 VPN 网关连接,通过 IPsec/IKE(IKEv1 或 IKEv2)VPN 隧道将本地网络连接到 Azure 虚拟网络。 此类型的连接需要一个分配有面向外部的公共 IP 地址的本地 VPN 设备。
可以使用 Azure门户、PowerShell 或 Azure CLI 将站点到站点 VPN 连接配置到虚拟网络。
有关详细信息,请参阅:
使用 Key Vault 的密钥管理
如果没有适当地保护和管理密钥,加密会变得毫无用处。 Key Vault 是 Microsoft 推荐的解决方案,用于管理和控制云服务使用的对加密密钥的访问。 访问密钥的权限可以通过 Microsoft Entra 帐户分配给服务或用户。
Key Vault 可帮助组织减少对配置、修补以及维护硬件安全模块 (HSM) 和密钥管理软件的需求。 使用 Key Vault 时,一切由你控制。 Microsoft 永远看不到你的密钥,应用程序无法直接访问密钥。 也可以在 HSM 中导入或生成密钥。