您可以在 AlloyDB Omni 中启用透明数据加密 (TDE),以保护静态数据并防止敏感信息泄露。本文档介绍了如何在数据库初始化期间通过在 POSTGRES_INITDB_ARGS 环境变量中提供所需的保险库环境变量和 --tde-kek-url 标志来创建启用 TDE 的集群。
准备工作
- 配置 HashiCorp Vault 的 KV-V2 Secret 引擎,以确保密钥加密密钥 (KEK) 路径和 JSON Web 令牌 (JWT) 可用。
- 验证 AlloyDB Omni 是否有权读取 JSON Web 令牌 (JWT) 文件(即身份验证令牌)。
创建集群
如需创建启用 TDE 的集群,您必须在数据库初始化期间传递必要的密钥管理服务 (KMS) 配置和身份验证凭据。唯一支持的身份验证类型是 jwt。
选择容器运行时对应的标签页。
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。VAULT_AUTH_TYPE:用于保险柜连接的身份验证类型。仅支持jwt。JWT_AUTH_ENGINE_MOUNT:HashiCorp Vault 身份验证引擎的装载路径。例如/auth/jwt。JWT_FILE_PATH:节点上存储 Vault JWT 的路径。例如tde-tls/jwt-token。- (可选)
VAULT_ROLE:在保险柜设置中定义的客户端角色,可让 HashiCorp Vault 验证 JWT 令牌的真实性。 VAULT_CERT_PATH_ON_DISK:宿主机上保险柜证书的路径。例如/local/vault/config。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。IMAGE_TAG:使用18.3.0表示最新的 Debian 映像,使用18.3.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 信息。 |
|
读数 | |
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 存储空间的列式缓存块所用的总时间。 | 不适用 | 微秒 | 计数器 |