创建启用了 TDE 的集群

选择文档版本:

您可以在 AlloyDB Omni 中启用透明数据加密 (TDE),以保护静态数据并保护敏感信息。本文档介绍了如何创建启用 TDE 的集群,方法是在数据库初始化期间提供必需的密钥管理服务 (KMS) 环境变量(适用于 HashiCorp Vault 或 Thales CipherTrust Manager)以及 POSTGRES_INITDB_ARGS 环境变量中的 --tde-kek-url 标志。

准备工作

HashiCorp Vault KMS

Thales CipherTrust KMS

  • 配置 Thales CipherTrust Manager,以确保创建并导出您的 Secret 密钥加密密钥 (KEK)。
  • 验证您是否拥有 CipherTrust Manager 用户账号(username 和 password),并且该账号有权对 KEK Secret 进行身份验证和导出。

创建集群

如需创建启用 TDE 的集群,您必须在数据库初始化期间传递必要的密钥管理服务 (KMS) 配置和身份验证凭据。请按照 HashiCorp Vault KMS 部分(使用 jwt 身份验证)或 Thales CipherTrust KMS 部分(使用用户名和密码身份验证)中的说明操作。

HashiCorp Vault KMS

选择容器运行时的标签页,以使用 HashiCorp Vault 初始化 AlloyDB Omni。

Docker

docker run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \
-e VAULT_AUTH_TYPE=jwt \
-e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \
-e VAULT_JWT_PATH=JWT_FILE_PATH \
-e VAULT_ROLE=VAULT_ROLE \
-e VAULT_CERT_PATH=VAULT_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Docker

docker run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \
-e VAULT_AUTH_TYPE=jwt \
-e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \
-e VAULT_JWT_PATH=JWT_FILE_PATH \
-e VAULT_ROLE=VAULT_ROLE \
-e VAULT_CERT_PATH=VAULT_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Podman

podman run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \
-e VAULT_AUTH_TYPE=jwt \
-e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \
-e VAULT_JWT_PATH=JWT_FILE_PATH \
-e VAULT_ROLE=VAULT_ROLE \
-e VAULT_CERT_PATH=VAULT_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Podman

podman run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v VAULT_CERT_PATH_ON_DISK:VAULT_CERT_PATH \
-e VAULT_AUTH_TYPE=jwt \
-e VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \
-e VAULT_JWT_PATH=JWT_FILE_PATH \
-e VAULT_ROLE=VAULT_ROLE \
-e VAULT_CERT_PATH=VAULT_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

替换以下内容:

  • CONTAINER_NAME:要创建的容器的名称。 例如,alloydb-tde。
  • DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录。例如,/local/data。
  • 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_ON_DISK:主机上 Vault 证书的路径。例如,/local/vault/config。
  • VAULT_CERT_PATH:容器中 Vault 连接的证书所在路径。例如,/tde-tls。如果未设置,则使用默认受信任证书存储区中的证书。
  • KEK_URL:HashiCorp Vault 中 KEK 的完全限定网址。使用 vault 作为协议,将 HashiCorp Vault 指定为 KMS 提供方,例如 vault://127.0.0.1:8200/v1/secret/data/alloydb_kek。
  • IMAGE_TAG:使用 18.4.0 表示最新的 Debian 映像,使用 18.4.0-ubi 表示最新的 UBI 映像。

Thales CipherTrust KMS

选择容器运行时的标签页,以使用 Thales CipherTrust Manager 初始化 AlloyDB Omni。

Docker

docker run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \
-e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \
-e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \
-e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Docker

docker run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \
-e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \
-e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \
-e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Podman

podman run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \
-e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \
-e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \
-e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

Podman

podman run -d --name CONTAINER_NAME \
--network host \
-v DATA_DIR:/var/lib/postgresql/data \
-v CIPHERTRUST_CERT_PATH_ON_DISK:CIPHERTRUST_CERT_PATH \
-e CIPHERTRUST_USER=CIPHERTRUST_USERNAME \
-e CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \
-e CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \
-e POSTGRES_INITDB_ARGS=" \
--tde-kek-url=KEK_URL" \
google/alloydbomni:IMAGE_TAG

替换以下内容:

  • CONTAINER_NAME:要创建的容器的名称。 例如,alloydb-tde。
  • DATA_DIR:要装载为 AlloyDB Omni 数据卷的本地目录。例如,/local/data。
  • CIPHERTRUST_USERNAME:用于向 Thales CipherTrust Manager 进行身份验证的用户名。
  • CIPHERTRUST_PASSWORD:Thales CipherTrust Manager 用户的密码。
  • CIPHERTRUST_CERT_PATH_ON_DISK:宿主机上 CipherTrust Manager TLS 证书的路径。例如,/local/ciphertrust/certs。
  • CIPHERTRUST_CERT_PATH:容器中 CipherTrust Manager 连接的证书(ca.crt、tls.crt 和 tls.key)所在路径。例如,/tde-tls。如果未设置,则使用默认受信任证书存储区中的证书。
  • KEK_URL:Thales CipherTrust Manager 中 KEK 的完全限定网址。使用 ciphertrust 作为协议,将 Thales CipherTrust Manager 指定为 KMS 提供方,例如 ciphertrust://10.0.0.1:443/api/v1/vault/secrets/alloydb_kek。
  • IMAGE_TAG:使用 18.4.0 表示最新的 Debian 映像,使用 18.4.0-ubi 表示最新的 UBI 映像。

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

ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';

重启数据库服务器以使更改生效。

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 加密的冷缓存块数。 不适用 计数器
tde_chill_cache_blocks_decrypted 解密的冷缓存块数。 不适用 计数器
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 存储空间的列式缓存块所用的总时间。 不适用 微秒 计数器