AlloyDB Omni Kubernetes 操作器使用 TdeConfig 自定义资源自动执行透明数据加密 (TDE) 集群的生命周期。此资源存储密钥管理服务 (KMS) 连接详细信息,使操作器能够安全地将所需凭据注入数据库 pod。
准备工作
- 配置 HashiCorp Vault 的 KV-V2 Secret 引擎 以确保密钥加密密钥 (KEK) 路径和 JSON Web 令牌 (JWT) 可用。
- 验证 AlloyDB Omni 是否有权读取 JSON Web 令牌 (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资源的命名空间。
配置 Vault 访问权限
创建一个包含 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 如何与 Vault 通信以检索 KEK。唯一支持的身份验证类型是 jwt。请确保在与 DbCluster 资源相同的命名空间中创建 TdeConfig 资源。
确保 postgres 用户可以访问 JWT 令牌的路径,并且您的 Vault 实例可以通过网络访问。
如需创建 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:在您的 Vault 设置中定义的客户端角色。客户端角色会验证 JWT,并反映在 HashiCorp Vault 中授予该角色的特定 访问权限和身份。 VAULT_SECRET_NAME:包含 Vault 连接证书的 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 |
解密的冷缓存块数。 | 不适用 | 计数器 | |
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 存储空间的列式缓存块所用的总时间。 | 不适用 | 微秒 | 计数器 |