1. 简介
此 Codelab 演示了如何使用 RPM 软件包在 AlloyDB Omni 上配置和启用透明数据加密 (TDE)。TDE 会对静态数据文件、预写式日志 (WAL) 和临时数据文件进行加密,从而提供数据保护,以防未经授权访问底层物理存储介质。
在此 Codelab 中,您将学习如何预配存储卷、使用 File KMS 初始化和运行已启用 TDE 的 AlloyDB Omni 集群,以及验证磁盘文件上的静态数据加密。
前提条件
- 从 Google Cloud 控制台访问 Google Cloud 项目和 Cloud Shell。
- 已安装并配置 Google Cloud SDK (
gcloud)。如需详细了解如何安装 gcloud,请参阅 gcloud-install
学习内容
- 如何创建具有专用数据库、备份和交换磁盘的 Compute Engine 虚拟机。
- 如何格式化存储卷 (XFS)、配置
/etc/fstab和准备数据路径。 - 如何使用 File KMS 生成和管理密钥加密密钥 (KEK)。
- 如何安装 AlloyDB Omni RPM 软件包和 PostgreSQL 客户端实用程序。
- 如何使用 RPM 设置工具 (
alloydbomni18-setup) 和--tde-kek-url启动已启用 TDE 的 AlloyDB Omni 集群。 - 如何使用原始文件检查 (
grep) 验证磁盘加密。
所需条件
- 填写 AlloyDB Omni RPM 注册表单或参阅 AlloyDB Omni on Linux 概览,获取 AlloyDB Omni RPM 的网址链接。系统会将代码库网址发送到您注册的电子邮件地址。
- 可访问 Google Cloud 的工作终端(建议使用 Cloud Shell)。
2. 设置和要求
项目设置
创建 Google Cloud 项目
- 在 Google Cloud 控制台 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的云项目已启用结算功能。了解如何检查项目是否已启用结算功能。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

- 打开 Google Cloud 控制台,然后点击右上角工具栏中的 Cloud Shell 图标。您还可以在控制台中按
G,然后按S,或者访问 shell.cloud.google.com 来打开 Cloud Shell。 - 预配并连接到环境通常需要一些时间。完成后,您将看到一个终端提示符,表示可以输入内容了。

3. 创建 Compute Engine 虚拟机
在本部分中,您将创建一个运行 Rocky Linux 9 的 Compute Engine (GCE) 虚拟机,该虚拟机具有用于数据库数据
(/data1)、备份/可观测性 (/obs) 和交换空间的专用永久性磁盘。
- 为项目 ID、虚拟机名称、可用区和区域定义环境变量。
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-tde-vm" export ZONE="us-central1-c" export REGION="us-central1" - 配置默认项目。
gcloud config set project $PROJECT - 为 SSH 流量创建网络防火墙规则。
gcloud compute firewall-rules create allow-ssh-alloydb-omni-tde \ --project=$PROJECT \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges="0.0.0.0/0" - 由于虚拟机是在没有公共 IP 地址的情况下创建的,因此请配置 Cloud Router 路由器和 Cloud NAT 网关,以便提供出站互联网访问权限来下载 RPM 软件包。如果您的项目区域中已存在 Cloud NAT,则可以继续。
注意:如果您的区域中已存在 Cloud NAT 网关,GCP 将返回一条消息,指明已为所有子网配置 NAT。您可以放心地忽略此错误并继续。gcloud compute routers create alloydb-omni-tde-router \ --project=$PROJECT \ --network=default \ --region=$REGION 2>/dev/null || true gcloud compute routers nats create alloydb-omni-tde-nat \ --project=$PROJECT \ --router=alloydb-omni-tde-router \ --region=$REGION \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips 2>/dev/null || true - 为数据库数据、备份和交换空间创建其他永久性磁盘。
gcloud compute disks create $INSTANCE_NAME-data \ --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced gcloud compute disks create $INSTANCE_NAME-obs \ --project=$PROJECT --zone=$ZONE --size=50GB --type=pd-balanced gcloud compute disks create $INSTANCE_NAME-swap \ --project=$PROJECT --zone=$ZONE --size=10GB --type=pd-balanced - 使用所挂接的存储卷预配 Rocky Linux 9 虚拟机实例。
gcloud compute instances create $INSTANCE_NAME \ --project=$PROJECT \ --zone=$ZONE \ --machine-type=n2-highmem-16 \ --image-family=rocky-linux-9 \ --image-project=rocky-linux-cloud \ --boot-disk-size=30GB \ --boot-disk-type=pd-balanced \ --disk=name=$INSTANCE_NAME-data,device-name=db-data,mode=rw \ --disk=name=$INSTANCE_NAME-obs,device-name=obs,mode=rw \ --disk=name=$INSTANCE_NAME-swap,device-name=swap,mode=rw \ --no-address
4. 准备磁盘、系统调整和 File KMS 密钥
在本部分中,您将连接到虚拟机、格式化和装载永久性存储卷、配置交换、调整 SELinux,并使用 File KMS 生成 TDE 密钥加密密钥 (KEK)。
- 通过 Identity-Aware Proxy (IAP) 通过 SSH 连接到虚拟机。
gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - 格式化并装载数据卷 (
/data1) 和可观测性/备份卷 (/obs)。sudo mkdir -p /data1 /obs sudo parted /dev/disk/by-id/google-db-data mklabel gpt sudo parted /dev/disk/by-id/google-db-data mkpart primary 0% 100% sudo parted /dev/disk/by-id/google-obs mklabel gpt sudo parted /dev/disk/by-id/google-obs mkpart primary 0% 100% sleep 3 sudo mkfs.xfs -L data /dev/disk/by-id/google-db-data-part1 sudo mkfs.xfs -L obs /dev/disk/by-id/google-obs-part1 echo -e "LABEL=data\t/data1\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab echo -e "LABEL=obs\t/obs\txfs\tdefaults\t0 0" | sudo tee -a /etc/fstab sudo systemctl daemon-reload sudo mount /data1 sudo mount /obs - 在专用交换磁盘上创建并启用交换空间。
SWAP_UUID=$(sudo mkswap /dev/disk/by-id/google-swap 2>/dev/null | awk '$0 ~ "UUID" {print $NF}') echo -e "${SWAP_UUID}\tswap\tswap\tdefaults\t0 0" | sudo tee -a /etc/fstab sudo swapon -a - 为数据库目录和 File KMS 密钥文件定义环境变量。
export PGDATA="/data1/18" export KMS_DIR="/data1/kms" export KEK_FILE="$KMS_DIR/tde_key" export ALLOYDB_OMNI_REPOSITORY_URL="<your-repository-url>" - 为数据库和 File KMS 密钥存储创建存储目录。
sudo mkdir -p $PGDATA sudo mkdir -p $KMS_DIR - 使用 OpenSSL 为 File KMS 生成 32 字节的加密安全密钥加密密钥 (KEK)。
sudo openssl rand -base64 32 | sudo tee $KEK_FILE sudo chmod 700 $KMS_DIR sudo chmod 600 $KEK_FILE - 安装所需的 SELinux 管理实用程序。
sudo dnf install -y policycoreutils-python-utils
5. 安装 AlloyDB Omni RPM 软件包
配置软件包代码库,并安装 AlloyDB Omni 数据库服务器以及标准 PostgreSQL 18 工具。
注意:填写AlloyDB Omni RPM 注册表单后,将$ALLOYDB_OMNI_REPOSITORY_URL 替换为通过电子邮件收到的代码库网址。如需了解详情,请参阅 AlloyDB Omni on Linux 概览。
- 为 AlloyDB Omni 创建 YUM 代码库配置文件。
sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF [alloydbomni] name=alloydbomni baseurl=$ALLOYDB_OMNI_REPOSITORY_URL enabled=1 repo_gpgcheck=0 gpgcheck=1 gpgkey=https://dl.google.com/linux/linux_signing_key.pub EOF - 更新 YUM 代码库缓存并安装 AlloyDB Omni 18 服务器 RPM 软件包。
sudo yum makecache sudo dnf install -y alloydbomni18 - 安装官方 PostgreSQL PGDG RPM 代码库,并安装标准 PostgreSQL 18 客户端软件包 (
psql)。sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf install -y postgresql18 - 将
/data1和 KMS 密钥目录的所有权分配给postgres用户。sudo chown -R postgres:postgres /data1 $KMS_DIR sudo chmod 755 /data1 $PGDATA
6. 启动已启用 TDE 的集群
配置资源配额、打开主机防火墙端口,并使用 File KMS 密钥 (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE") 启用透明数据加密,以初始化 AlloyDB Omni 集群。
- 将 SELinux 设置为宽容模式,并为 PostgreSQL 配置主机防火墙规则。
sudo setenforce 0 sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload - 配置 systemd 服务替换参数,以分配内存和 CPU 资源限制。
sudo mkdir -p /etc/systemd/system/alloydbomni18.service.d sudo tee /etc/systemd/system/alloydbomni18.service.d/override.conf << EOF [Service] CPUQuota=90% MemoryMax=80% EOF sudo chown root:root /etc/systemd/system/alloydbomni18.service.d/override.conf sudo chmod 644 /etc/systemd/system/alloydbomni18.service.d/override.conf sudo systemctl daemon-reload - 设置管理员环境变量,并使用
alloydbomni18-setup initdb初始化 TDE 数据库集群。export PGPASSWORD="YourStrongPassword123!" export POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE" sudo POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS" PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - 在
postgresql.conf中配置服务器端口 5432。sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf - 使用
alloydbomni18-setup preparedb准备系统目录和扩展程序。sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb - 启用并启动
alloydbomni18systemd 服务。 验证输出是否显示sudo systemctl enable alloydbomni18 sudo systemctl start alloydbomni18 sudo systemctl status alloydbomni18Active: active (running)。
7. 数据库操作和 TDE 磁盘加密验证
连接到 TDE 数据库,插入示例记录,执行 CHECKPOINT 以强制将数据写入磁盘,并运行直接磁盘扫描 (grep) 以证明静态数据加密。
- 使用
psql连接到alloydbadmin数据库。PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin - 创建测试表,插入机密字符串,并触发检查点以将脏缓冲区写入存储空间。
CREATE TABLE customer_credentials ( id SERIAL PRIMARY KEY, username TEXT, secret_passcode TEXT ); INSERT INTO customer_credentials (username, secret_passcode) VALUES ('alice_user', 'UNENCRYPTED_DEMO_SECRET_98765'); CHECKPOINT; - 查询内部 AlloyDB TDE 统计信息视图
pgsnap.g$tde_stats,以验证活跃加密状态、KEK 位置和块指标。 确认活跃 TDE (SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted FROM pgsnap.g$tde_stats;is_tde_enabled = t)、KEK 文件路径和加密块计数器的示例输出:is_tde_enabled | tde_kek_url | tde_data_blocks_encrypted | tde_wal_blocks_encrypted ----------------+---------------------------+---------------------------+-------------------------- t | file:///data1/kms/tde_key | 2023 | 2717 (1 row) - 退出
psql。\q - 在
/data1/18/base/下搜索原始数据库存储文件中的密码字符串,以验证 TDE 磁盘保护。sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
密钥验证要点 :
- 在 非 TDE 数据库实例上,针对表关系文件运行
grep会在磁盘上显示纯文本字符串。 - 在已启用 TDE 的数据库实例上,
grep会返回零个匹配项 ,因为所有数据文件、索引、预写式日志 (WAL) 和临时数据在静态时都使用 AES 块密码完全加密。
8. 清理
完成练习后,请清理资源,以防止产生不必要的计算费用。
- 断开与虚拟机 SSH 会话的连接。
exit - 移除 GCE 虚拟机和所挂接的永久性磁盘。
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet gcloud compute disks delete $INSTANCE_NAME-data $INSTANCE_NAME-obs $INSTANCE_NAME-swap --zone=$ZONE --project=$PROJECT --quiet - 删除防火墙规则和 Cloud NAT 网关资源。
gcloud compute firewall-rules delete allow-ssh-alloydb-omni-tde --project=$PROJECT --quiet gcloud compute routers nats delete alloydb-omni-tde-nat --router=alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet gcloud compute routers delete alloydb-omni-tde-router --region=$REGION --project=$PROJECT --quiet
9. 恭喜
恭喜!您已成功完成 AlloyDB Omni RPM 上的 TDE Codelab。
所学内容
- 如何预配存储磁盘 (
/data1、/obs)、设置交换空间和格式化 XFS 文件系统。 - 如何使用 File KMS 生成和管理密钥加密密钥。
- 如何使用 RPM 工具初始化和启动已启用 TDE 的 AlloyDB Omni 集群。
- 如何使用直接原始磁盘检查 (
grep) 验证静态加密。
如需了解详情,请参阅AlloyDB Omni 文档。