您可以在 AlloyDB Omni 中启用透明数据加密 (TDE),以保护静态数据并保护敏感信息。本文档介绍了如何创建启用 TDE 的集群,方法是在数据库初始化期间提供必需的密钥管理服务 (KMS) 环境变量(适用于 HashiCorp Vault 或 Thales CipherTrust Manager)以及 POSTGRES_INITDB_ARGS 环境变量中的 --tde-kek-url 标志。
准备工作
HashiCorp Vault KMS
- 配置 HashiCorp Vault 的 KV-V2 Secret 引擎,以确保密钥加密密钥 (KEK) 路径和 JSON Web 令牌 (JWT) 可用。
- 验证 AlloyDB Omni 是否有权读取 JSON Web 令牌 (JWT) 文件(即身份验证令牌)。
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 信息。 |
|
读数 | |
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 存储空间的列式缓存块所用的总时间。 | 不适用 | 微秒 | 计数器 |