准备工作
配置 HashiCorp Vault 的 KV-V2 Secret 引擎,确保密钥加密密钥 (KEK) 路径和 JSON Web 令牌 (JWT) 可用。
验证 AlloyDB Omni 是否有权读取 JWT 令牌文件。
创建集群
如需创建启用 TDE 的集群,您必须在初始化数据库期间传递必要的密钥管理服务 (KMS) 配置和身份验证凭据。唯一支持的身份验证类型是 jwt。
使用 RPM 安装 AlloyDB Omni 以准备环境并安装 AlloyDB Omni RPM 软件包。
初始化数据库。
HashiCorp Vault KMS
此方法适用于生产工作负载。
运行以下命令以初始化启用 TDE 的数据库:
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ VAULT_AUTH_TYPE=jwt \ VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \ VAULT_JWT_PATH=JWT_FILE_PATH \ VAULT_ROLE=VAULT_ROLE \ VAULT_CERT_PATH=VAULT_CERT_PATH \ POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
替换以下内容:
POSTGRES_PASSWORD:数据库用户的密码。DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录,例如/local/data。VAULT_AUTH_TYPE:用于 Vault 连接的身份验证类型。仅支持jwt。JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 身份验证引擎的装载路径,例如/auth/jwt。JWT_FILE_PATH:Vault JWT 在节点上的存储路径,例如tde-tls/jwt-token。- (可选)
VAULT_ROLE:在 Vault 设置中定义的客户端角色,用于让 HashiCorp Vault 验证 JWT 令牌的真实性。 VAULT_CERT_PATH:Vault 连接的证书在容器中的路径,例如/tde-tls。如果未设置,则使用默认受信任证书存储区中的证书。KEK_URL:HashiCorp Vault 中 KEK 的完全限定网址。使用vault作为协议,将 HashiCorp Vault 指定为 KMS 提供方,例如vault://127.0.0.1:8200/v1/secrets/data/alloydb_kek。
如需为
alloydbomni.service in /etc/systemd/system/alloydbomni18.service.d/override.conf创建替换文件,请将以下内容添加到override.conf文件:[Service] Environment="VAULT_AUTH_TYPE" Environment="VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT" Environment="VAULT_JWT_PATH=JWT_FILE_PATH" Environment="VAULT_ROLE=VAULT_ROLE" Environment="VAULT_CERT_PATH=VAULT_CERT_PATH"
如需应用更改,请重新加载 systemd 守护进程。
sudo systemctl daemon-reload
基于文件的 KMS
此方法仅用于测试目的。
如需使用基于文件的密钥在本地测试 TDE,您必须先在机器上生成 32 字节的 KEK。
创建目录,生成密钥,并设置适当的权限。
KEK_DIR=KEK_DIR mkdir -p $KEK_DIR sudo chown 999:999 $KEK_DIR openssl rand -base64 32 | sudo tee $KEK_DIR/key sudo chmod 0755 $KEK_DIR/key
通过将本地文件 URI 作为 KEK 网址传递来初始化数据库。
sudo PGPASSWORD=POSTGRES_PASSWORD \ PGDATA=DATA_DIR \ POSTGRES_INITDB_ARGS="--tde-kek-url=file:///$KEK_DIR/key" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
替换以下内容:
POSTGRES_PASSWORD:数据库用户的密码。DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录,例如/local/data。KEK_DIR:本地基于文件的 KEK 的存储目录,例如/tmp/alloydb/kms。
数据库初始化后,请按照使用 RPM 安装 AlloyDB Omni中的说明准备数据库、设置主机并启动
systemd服务。
查看 TDE 指标
集群初始化后,请完成以下步骤以验证 TDE 是否已启用并查看相关的 TDE 指标。
- 使用
psql或您偏好的客户端连接到数据库。如需详细了解如何连接到实例,请参阅 运行并连接到 AlloyDB Omni。 运行以下命令:
select * FROM pgsnap.g$tde_stats;如果 TDE 成功启用,输出会显示 TDE 指标,例如 TDE 是否已启用、KEK 网址、KEK 版本和 KEK 创建时间戳。
下表介绍了各项指标的含义。
名称 说明 标签 单位 类型 alloydb_omni_database_tde_data_blocks_decrypted_count_total解密的数据块数。 不适用 计数器 alloydb_omni_database_tde_data_blocks_encrypted_count_total加密的数据块数。 不适用 计数器 alloydb_omni_database_tde_data_decryption_time_us_total数据块解密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_data_encryption_time_us_total数据块加密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_enabledTDE 启用状态。 不适用 读数 alloydb_omni_database_tde_kek_infoTDE KEK 信息。 kek_version:用于密钥封装的 KEK 版本
。kek_url:KMS 中 KEK 的完全限定路径
。kek_creation_timestamp:
所用 KEK 版本的创建时间。
读数 alloydb_omni_database_tde_temp_blocks_decrypted_count_total解密的临时块数。 不适用 计数器 alloydb_omni_database_tde_temp_blocks_encrypted_count_total加密的临时块数。 不适用 计数器 alloydb_omni_database_tde_temp_decryption_time_us_total临时块解密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_temp_encryption_time_us_total临时块加密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_wal_blocks_decrypted_count_total解密的 WAL 块数。 不适用 计数器 alloydb_omni_database_tde_wal_blocks_encrypted_count_total加密的 WAL 块数。 不适用 计数器 alloydb_omni_database_tde_wal_decryption_time_us_totalWAL 块解密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_wal_encryption_time_us_totalWAL 块加密所用的总时间。 不适用 微秒 计数器