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资源的命名空间。
配置 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:配置映射的名称。TdeConfig资源定义中使用了kek_url和token_path中定义的值。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.1.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资源的命名空间。
查看 TDE 指标
集群初始化后,请完成以下步骤以验证是否已启用 TDE 并查看相关的 TDE 指标。
- 使用
psql或您偏好的客户端连接到数据库。如需详细了解如何连接到实例,请参阅 运行并连接到 AlloyDB Omni。 运行以下命令:
select * FROM pgsnap.g$tde_stats;如果 TDE 已成功启用,则输出会显示 TDE 指标,例如 TDE 是否已启用、KEK 网址、KEK 版本和 KEK 创建时间戳。
下表介绍了各项指标的含义。
名称 说明 标签 单位 类型 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_enabledTDE 启用状态。 不适用 读数 alloydb_omni_database_tde_kek_infoTDE 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_totalWAL 块解密所用的总时间。 不适用 微秒 计数器 alloydb_omni_database_tde_wal_encryption_time_us_totalWAL 块加密所用的总时间。 不适用 微秒 计数器