AlloyDB Omni Kubernetes 操作器使用 TdeConfig 自定义资源自动执行透明数据加密 (TDE) 集群的生命周期。此资源用于存储密钥管理服务 (KMS) 连接详细信息,使操作员能够安全地将所需凭据注入数据库 pod。
准备工作
- 配置 HashiCorp Vault 的 KV-V2 Secret 引擎,以确保密钥加密密钥 (KEK) 路径和 JSON Web 令牌 (JWT) 可用。
- 确保 AlloyDB Omni 有权读取 JWT 令牌文件。
可选:如需在 OpenShift 上部署启用 TDE 的集群,请向运行数据库集群的
DBCluster服务账号授予hostmount-anyuid安全上下文限制条件 (SCC)。oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE
将 DBCLUSTER_NAME 替换为
DBCluster的名称,并将 DBCLUSTER_NAMESPACE 替换为您要创建DBCluster资源的命名空间。
配置保险库访问权限
创建一个包含 KEK 路径和身份验证凭据的 Secret 资源。
apiVersion: v1
kind: ConfigMap
metadata:
name: CONFIG_MAP_NAME
data:
kek_url: "KEK_URL"
token_path: "JWT_TOKEN_PATH"
替换以下内容:
CONFIG_MAP_NAME:配置映射的名称。kek_url和token_path中定义的值用于TdeConfig资源定义中。KEK_URL:HashiCorp Vault 中 KEK 的完全限定网址。使用vault作为协议来指定 HashiCorp Vault 作为 KMS 提供方,例如vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek。JWT_TOKEN_PATH:节点上 JWT 令牌的路径。例如/tmp/token。JWT 令牌访问路径必须在集群中的所有节点上保持一致。
创建 TLS Secret
如需创建用于存储证书的 TLS Secret,请运行以下命令:
kubectl create secret tls VAULT_SECRET_NAME \
--cert=vault.crt \
--key=vault.key
kubectl patch secret VAULT_SECRET_NAME \
-p '{"data":{"ca.crt":"'$(base64 -w 0 vault.crt)'"}}' \
--type=merge
将 VAULT_SECRET_NAME 替换为 TLS Secret 的名称。
您可以在创建 TdeConfig 自定义资源时使用此 Secret 名称。
创建 TdeConfig CRD
创建 TdeConfig 资源,用于定义 AlloyDB Omni 如何与保险库通信以检索 KEK。唯一支持的身份验证类型是 jwt。请确保在与 DbCluster 资源相同的命名空间中创建 TdeConfig 资源。
确保 postgres 用户可以访问 JWT 令牌的路径,并且您的保险库实例可以通过网络访问。
如需创建 TdeConfig 资源,请按以下步骤操作:
为 TdeConfig 资源创建并应用清单。
apiVersion: alloydbomni.dbadmin.goog/v1
kind: TdeConfig
metadata:
name: TDE_CONFIG_NAME
spec:
kekUrlRef:
name: CONFIG_MAP_NAME
key: kek_url
kmsProvider:
vault:
authType: "jwt"
authMount: "JWT_AUTH_MOUNT_PATH"
jwt:
pathRef:
name: "CONFIG_MAP_NAME"
key: "token_path"
role: "VAULT_ROLE"
tls:
certSecret:
name: "VAULT_SECRET_NAME"
替换以下内容:
TDE_CONFIG_NAME:TdeConfig资源的名称。JWT_AUTH_MOUNT_PATH:身份验证引擎在 HashiCorp Vault 中的装载路径,由您的配置定义。 例如auth/kms。- (可选)
VAULT_ROLE:保险库设置中定义的客户端角色。客户端角色会验证 JWT,并反映在 HashiCorp Vault 中授予该角色的特定访问权限和身份。 VAULT_SECRET_NAME:包含保险库连接证书的 Secret 的名称。例如:vault-secret。
部署 DBCluster
创建并应用清单,以创建引用
TdeConfig资源的DBCluster资源。如需详细了解如何创建数据库集群,请参阅创建数据库集群。apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: "DBCLUSTER_NAME" spec: databaseVersion: "18.3.0" features: transparentDataEncryption: tdeConfigRef: name: "TDE_CONFIG_NAME" [...]将
TDE_CONFIG_NAME替换为TdeConfig资源的名称,并将DBCLUSTER_NAME替换为您要创建的DBCluster的名称。可选:如果您要在 OpenShift 环境中部署
DBCluster,则需要使用hostmount-anyuid注解来注解DBCluster资源。kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid将
DBCLUSTER_NAME替换为DBCluster资源的名称,将DBCLUSTER_NAMESPACE替换为您要创建DBCluster资源的命名空间。
如需为溢出到 SSD 的列式缓存启用 TDE,请按如下方式修补您的 DBCluster:
kubectl patch dbcluster `DBCLUSTER_NAME` \
-n `DBCLUSTER_NAMESPACE` \
-p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
--type=merge
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 |
已解密的 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 存储空间的列式缓存块所用的总时间。 | 不适用 | 微秒 | 计数器 |