创建启用了 TDE 的集群

选择文档版本:

您可以在 AlloyDB Omni 中启用透明数据加密 (TDE),以保护静态数据并防止敏感信息泄露。本文档介绍了如何在数据库初始化期间通过在 POSTGRES_INITDB_ARGS 环境变量中提供所需的保险库环境变量和 --tde-kek-url 标志来创建启用 TDE 的集群。

准备工作

  • 请参阅规划 AlloyDB Omni 安装
  • 规划启用 TDE 的 AlloyDB Omni 部署时,请务必根据预期工作负载和数据量考虑额外的 CPU 使用量。加密和解密是计算密集型操作。

创建集群

如需创建启用 TDE 的集群,您必须在数据库初始化期间传递必要的密钥管理服务 (KMS) 配置和身份验证凭据。唯一支持的身份验证类型是 jwt

  1. 使用 RPM 安装 AlloyDB Omni,以准备环境并安装 AlloyDB Omni RPM 软件包。

  2. 初始化数据库。

    HashiCorp Vault KMS

    此方法适用于生产工作负载。

    1. 运行以下命令以初始化已启用 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/alloydbomniproduct_major_version_numeric-setup initdb

      替换以下内容:

      • POSTGRES_PASSWORD:数据库用户的密码。
      • DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录,例如 /local/data
      • JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 身份验证引擎的装载路径,例如 /auth/jwt
      • JWT_FILE_PATH:节点上存储库 JWT 的路径,例如 tde-tls/jwt-token
      • (可选)VAULT_ROLE:在保险柜设置中定义的客户端角色,可让 HashiCorp Vault 验证 JWT 令牌的真实性。
      • VAULT_CERT_PATH:节点上用于保险库连接的证书所在的路径,例如 /tde-tls。如果未设置,则使用默认受信任证书存储区中的证书。
      • KEK_URL:HashiCorp Vault 中 KEK 的完全限定网址。使用 vault 作为协议来指定 HashiCorp Vault 作为 KMS 提供方,例如 vault://127.0.0.1:8200/v1/secrets/data/alloydb_kek
    2. 如需在 /etc/systemd/system/alloydbomni18.service.d/override.conf 中为 alloydbomni18.service 创建替换文件,请将以下内容添加到 override.conf 文件中:

      [Service]
      Environment="VAULT_AUTH_TYPE=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"

      替换以下内容:

      • VAULT_AUTH_TYPE:用于保险柜连接的身份验证类型。仅支持 jwt
      • JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 身份验证引擎的装载路径,例如 /auth/jwt
      • JWT_FILE_PATH:节点上存储库 JWT 的路径,例如 tde-tls/jwt-token
      • (可选)VAULT_ROLE:在保险柜设置中定义的客户端角色,可让 HashiCorp Vault 验证 JWT 令牌的真实性。
      • VAULT_CERT_PATH:节点上用于保险库连接的证书所在的路径,例如 /tde-tls。如果未设置,则使用默认受信任证书存储区中的证书。
    3. 如需应用更改,请重新加载 systemd 守护进程。

      sudo systemctl daemon-reload

    基于文件的 KMS

    此方法仅用于测试目的。

    如需使用基于文件的密钥在本地测试 TDE,您必须先在机器上生成一个 32 字节的 KEK。

    1. 创建目录、生成密钥并设置适当的权限。

      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
    2. 通过将本地文件 URI 作为 KEK 网址传递来初始化数据库。

      sudo PGPASSWORD=POSTGRES_PASSWORD \
      PGDATA=DATA_DIR \
      POSTGRES_INITDB_ARGS="--tde-kek-url=file:///$KEK_DIR/key" \
      /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb

      替换以下内容:

      • POSTGRES_PASSWORD:数据库用户的密码。
      • DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录,例如 /local/data
      • KEK_DIR:存储基于本地文件的 KEK 的目录,例如 /tmp/alloydb/kms
  3. 初始化数据库后,请按照使用 RPM 安装 AlloyDB Omni 中的说明准备数据库、设置主机并启动 systemd 服务。

  4. 如需为溢出到 SSD 存储空间的列式引擎缓存数据启用 TDE,请连接到数据库实例并运行以下查询:

    ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';
    
  5. 重启数据库服务器以使更改生效。

TDE 指标参考

您可以在 AlloyDB Omni 的监控代理中查看所有 TDE 指标。 下表介绍了各项指标。

名称 说明 标签 单位 类型
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_enabled TDE 启用状态。 不适用 读数
alloydb_omni_database_tde_kek_info TDE 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_total 在 WAL 块解密中花费的总时间。 不适用 微秒 计数器
alloydb_omni_database_tde_wal_encryption_time_us_total 在 WAL 块加密中花费的总时间。 不适用 微秒 计数器
tde_chill_cache_blocks_encrypted 加密的 chill 缓存块数。 不适用 计数器
tde_chill_cache_blocks_decrypted 已解密的 chill 缓存块数。 不适用 计数器
tde_chill_cache_blocks_total_encryption_time_us 在冷缓存块加密中花费的总时间。 不适用 微秒 计数器
tde_chill_cache_blocks_total_decryption_time_us 在冷缓存块解密中花费的总时间。 不适用 微秒 计数器
tde_ce_cache_ssd_blocks_encrypted 溢出到 SSD 存储空间且已加密的列式缓存块的数量。 不适用 计数器
tde_ce_cache_ssd_blocks_decrypted 溢出到 SSD 存储空间并已解密的列式缓存块的数量。 不适用 计数器
tde_ce_cache_ssd_blocks_total_encryption_time_us 将列式缓存块溢出到 SSD 存储空间所用的加密总时间。 不适用 微秒 计数器
tde_ce_cache_ssd_blocks_total_decryption_time_us 解密溢出到 SSD 存储空间的列式缓存块所用的总时间。 不适用 微秒 计数器