密钥层次结构
AlloyDB Omni 实现了双层密钥层次结构,可在数据库和用户管理的安全基础架构之间保持严格的职责分离。
- 数据加密密钥 (DEK):由 AlloyDB Omni 生成和拥有的密钥。这些密钥会对实际数据文件、WAL、 和临时文件进行加密。AlloyDB Omni 会将 DEK 存储在磁盘上,但会使用您的 KEK 对其进行封装。
-
密钥加密密钥 (KEK):您在外部密钥管理服务 (KMS) 中管理的主密钥。AlloyDB Omni 使用您的 KEK 对 DEK 进行加密。
AlloyDB Omni 仅在启动时访问此密钥以解封装
DEK。您的 KEK 绝不会永久存储在数据库磁盘上。
-
KEK 的位置和访问参数通过
环境变量和
--tde-kek-url初始化 标志提供。
-
KEK 的位置和访问参数通过
环境变量和
TDE 如何与 AlloyDB Omni 搭配使用
启用 TDE 后,AlloyDB Omni 会使用与外部 KMS 集成的分层加密模型来保护您的数据。
- 初始化和密钥检索:在集群的启动或初始化阶段,AlloyDB Omni 引擎会与您的 KMS 建立安全连接。它会使用 HashiCorp Vault 的 JSON Web 令牌 (JWT) 或 Thales CipherTrust Manager 的用户名和密码凭据进行身份验证,并检索 KEK。
- 解封装 DEK:AlloyDB Omni 使用您的 KEK 解封装 DEK,这些 DEK 以封装状态存储在本地存储空间中。然后,这些 DEK 会加载到内存中。
- 透明数据操作:
- 写入磁盘:当数据库将数据块、WAL 记录或临时文件写入物理磁盘时,它会在写入之前使用 AES-256 算法自动加密数据。
- 从磁盘读取:当数据库需要将数据读取到内存中时,它会使用内存中保存的 DEK 自动解密这些块。
- 缓存加密:TDE 还支持磁盘缓存,包括存储在缓存中的列式引擎信息。写入冷缓存存储层的数据会加密,溢出到列式引擎的 SSD 缓存的数据在写入 SSD 之前会加密,并在读取时解密。
性能优化:TDE 包含优化功能,可在保护数据的同时保持高性能。它使用针对数据块和缓存进行了优化的
AES-256-XTS保护,并具有同步写入优化功能,可最大限度地减少快速路径上的延迟。安全边界:您的 KEK 绝不会存储在本地数据库磁盘上,确保即使物理存储介质遭到入侵,在未经授权访问外部 KMS 的情况下,数据仍无法读取。
加密范围和规范
AlloyDB Omni 使用行业标准的 AES-256 算法来保护您的数据。
- 数据文件(表和索引): AES-256-XTS。
- 预写式日志 (WAL): AES-256-CTR。
- 临时文件: AES-256-XTS 或 AES-256-CTR,具体取决于临时数据的类型。
- 列式引擎缓存文件: AES-256-XTS。
- 冷缓存文件: AES-256-XTS。
- 密钥封装: AES-256-KWP。
备份和高可用性
启用 TDE 后,使用 pgBackRest 创建的备份会继承源集群的加密配置。这可确保您的备份数据与主数据库保持相同的安全级别。
对于 HA 设置,必须使用相同的 KMS 环境变量初始化恢复环境。KMS 环境变量必须在所有参与的主机上可用。
支持的 KMS 和身份验证
AlloyDB Omni 支持以下外部 KMS 提供商和身份验证方法:
- HashiCorp Vault:
支持使用 JSON Web 令牌 (
jwt) 身份验证的 KV-V2 密钥引擎。 - Thales CipherTrust Manager:
支持使用用户名和密码 (
password) 身份验证的密钥管理。
PostgreSQL 工具兼容性
已启用 TDE 的集群通过环境变量透明地支持所有内置 PostgreSQL 工具,但initdb 除外。
如果您使用的是 initdb,请确保明确传递 KEK 网址。
如需了解详情,请参阅
创建已启用 TDE 的集群。
限制
- 您无法在现有集群上启用 TDE。
- 启用 TDE 后,您无法将其停用。
- 不支持对已启用 TDE 的集群进行主要版本升级。
- 您无法将加密备份恢复到未加密的服务器,也无法将未加密的备份恢复到加密的服务器。
- 不支持 DEK 轮替。
- 只要 KEK 网址路径保持不变,就支持 KEK 轮替。
- 您无法使用
FILE_COPY策略CREATE DATABASE。 - 在已启用 TDE 的集群上,Barman 备份仅支持
rsync模式。不支持postgres备份方法。
后续步骤
- 了解如何创建已启用 TDE 的集群。
- 排查透明数据加密问题。