创建启用了 TDE 的集群

选择文档版本:

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_urltoken_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_NAMETdeConfig 资源的名称。
  • JWT_AUTH_MOUNT_PATH:身份验证引擎在 HashiCorp Vault 中的装载路径,由您的配置定义。 例如 auth/kms
  • (可选)VAULT_ROLE:保险库设置中定义的客户端角色。客户端角色会验证 JWT,并反映在 HashiCorp Vault 中授予该角色的特定访问权限和身份。
  • VAULT_SECRET_NAME:包含保险库连接证书的 Secret 的名称。例如:vault-secret

部署 DBCluster

  1. 创建并应用清单,以创建引用 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 的名称。

  2. 可选:如果您要在 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 信息。
  • 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_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 存储空间的列式缓存块所用的总时间。 不适用 微秒 计数器