۱. مقدمه
این آزمایشگاه کد، نحوه پیکربندی و فعالسازی رمزگذاری شفاف دادهها (TDE) را در AlloyDB Omni با استفاده از بستههای RPM نشان میدهد. TDE فایلهای داده، گزارشهای پیش از نوشتن (WAL) و فایلهای داده موقت را رمزگذاری میکند و از دادهها در برابر دسترسی غیرمجاز به رسانههای ذخیرهسازی فیزیکی زیرین محافظت میکند.
در این آزمایشگاه کد، شما یاد خواهید گرفت که چگونه حجمهای ذخیرهسازی را آماده کنید، یک کلاستر AlloyDB Omni با قابلیت TDE را با استفاده از File KMS راهاندازی و اجرا کنید، و رمزگذاری دادهها در حالت استراحت (data-at-rest) را روی فایلهای دیسک تأیید کنید.
پیشنیازها
- دسترسی به پروژه و پوسته ابری گوگل (Google Cloud Project and Cloud Shell) از طریق کنسول گوگل کلود (Google Cloud Console).
- نصب و پیکربندی کیت توسعه نرمافزار گوگل کلود (
gcloud)
آنچه یاد خواهید گرفت
- نحوه ایجاد یک ماشین مجازی Compute Engine با پایگاه داده اختصاصی، پشتیبان گیری و دیسک های swap.
- نحوه قالببندی حجمهای ذخیرهسازی (XFS)، پیکربندی
/etc/fstabو آمادهسازی مسیرهای داده. - نحوه تولید و مدیریت کلیدهای رمزگذاری کلید (KEK) با استفاده از File KMS.
- نحوه نصب بستههای RPM مربوط به AlloyDB Omni و ابزارهای کلاینت PostgreSQL.
- چگونه یک کلاستر AlloyDB Omni با قابلیت TDE را با استفاده از ابزارهای راهاندازی RPM (
alloydbomni18-setup) و--tde-kek-urlبوتاسترپ کنیم. - نحوه تأیید رمزگذاری روی دیسک با استفاده از بازرسی فایل خام (
grep)
آنچه نیاز دارید
- با تکمیل فرم ثبت نام AlloyDB Omni RPM یا با مراجعه به AlloyDB Omni on Linux Overview ، یک لینک URL به RPM های AlloyDB Omni دریافت کنید. URL مخزن به آدرس ایمیل ثبت شده شما ارسال خواهد شد.
- یک ترمینال فعال با دسترسی به گوگل کلود (کلود شل توصیه میشود).
۲. تنظیمات و الزامات
راهاندازی پروژه
ایجاد یک پروژه ابری گوگل
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید .
- مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
شروع پوسته ابری
اگرچه میتوانید گوگل کلود را از راه دور از طریق لپتاپ خود مدیریت کنید، اما در این آزمایشگاه کد از پوسته گوگل کلود ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده میکنید.

- کنسول گوگل کلود را باز کنید و روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید. همچنین میتوانید با فشار دادن
Gو سپسSدر کنسول یا با مراجعه به shell.cloud.google.com ، Cloud Shell را باز کنید. - معمولاً چند لحظه طول میکشد تا آمادهسازی و اتصال به محیط انجام شود. پس از اتمام، یک اعلان ترمینال آماده برای ورودی خواهید دید.

۳. ماشین مجازی موتور محاسباتی را ایجاد کنید
در این بخش، شما یک ماشین مجازی (VM) با موتور محاسباتی (GCE) ایجاد میکنید که سیستم عامل Rocky Linux 9 را اجرا میکند و دیسکهای دائمی اختصاصی برای دادههای پایگاه داده ( /data1 )، پشتیبانگیریها/مشاهدهپذیری ( /obs ) و فضای swap دارد.
- متغیرهای محیطی را برای شناسه پروژه، نام ماشین مجازی، منطقه و ناحیه خود تعریف کنید.
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 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 - دیسکهای دائمی اضافی برای دادههای پایگاه داده، پشتیبانگیریها و فضای swap ایجاد کنید.
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
۴. آمادهسازی دیسکها، تنظیم سیستم و فایل KMS Key
در این بخش، شما به ماشین مجازی متصل میشوید، درایوهای ذخیرهسازی پایدار را فرمت و مانت میکنید، swap را پیکربندی میکنید، SELinux را تنظیم میکنید و با استفاده از File KMS، کلید رمزگذاری کلید TDE (KEK) را تولید میکنید.
- از طریق پروکسی آگاه از هویت (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 را روی دیسک swap اختصاصی ایجاد و فعال کنید.
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 - متغیرهای محیطی را برای دایرکتوری پایگاه داده و فایل کلید 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>" - دایرکتوریهای ذخیرهسازی برای پایگاه داده و فایل ذخیرهسازی کلید KMS ایجاد کنید.
sudo mkdir -p $PGDATA sudo mkdir -p $KMS_DIR - با استفاده از OpenSSL برای File KMS، یک کلید رمزگذاری (KEK) 32 بایتی با امنیت رمزنگاری ایجاد کنید.
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
۵. نصب پکیجهای RPM مربوط به AlloyDB Omni
مخازن بسته را پیکربندی کنید و سرور پایگاه داده AlloyDB Omni را در کنار ابزارهای استاندارد PostgreSQL 18 نصب کنید.
نکته: به جای $ALLOYDB_OMNI_REPOSITORY_URL ، آدرس مخزنی که پس از تکمیل فرم ثبت نام RPM در AlloyDB Omni از طریق ایمیل دریافت کردهاید را وارد کنید. برای اطلاعات بیشتر، به AlloyDB Omni on Linux Overview مراجعه کنید.
- فایل پیکربندی مخزن YUM را برای AlloyDB Omni ایجاد کنید.
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 را بهروزرسانی کنید و بستههای RPM سرور AlloyDB Omni 18 را نصب کنید.
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
۶. یک کلاستر با قابلیت TDE را بوتاسترپ کنید
سهمیه منابع را پیکربندی کنید، پورتهای فایروال میزبان را باز کنید و خوشه AlloyDB Omni را با رمزگذاری شفاف دادهها از طریق کلید File KMS ( POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE" ) مقداردهی اولیه کنید.
- 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 - متغیرهای محیطی مدیر را تنظیم کنید و خوشه پایگاه داده TDE را با استفاده از
alloydbomni18-setup initdbمقداردهی اولیه کنید.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پیکربندی کنید.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 - سرویس systemd مربوط به
alloydbomni18را فعال و راهاندازی کنید. تأیید کنید که خروجیsudo systemctl enable alloydbomni18 sudo systemctl start alloydbomni18 sudo systemctl status alloydbomni18Active: active (running)را نشان میدهد.
۷. عملیات پایگاه داده و تأیید رمزگذاری دیسک 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; - برای تأیید وضعیت رمزگذاری فعال، مکان KEK و معیارهای بلوک، نمای آمار TDE داخلی AlloyDB به نام
pgsnap.g$tde_statsرا جستجو کنید. نمونه خروجی که فعال بودن 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 - برای تأیید حفاظت TDE روی دیسک، فایلهای خام ذخیرهسازی پایگاه داده را در مسیر
/data1/18/base/به دنبال رشته کد عبور جستجو کنید.sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
نکته کلیدی در مورد تأیید:
- در یک نمونه پایگاه داده غیر TDE ، اجرای
grepروی فایلهای رابطه جدول، رشته متن ساده را روی دیسک نمایش میدهد. - در یک نمونه پایگاه داده TDE-Enabled ،
grepهیچ تطابقی را برنمیگرداند زیرا تمام فایلهای داده، ایندکسها، گزارشهای write-ahead (WAL) و دادههای موقت در حالت استراحت به طور کامل با رمزهای بلوکی AES رمزگذاری شدهاند.
۸. پاکسازی
پس از اتمام تمرینها، منابع را پاکسازی کنید تا از هزینههای محاسباتی ناخواسته جلوگیری شود.
- اتصال خود را از جلسه 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
۹. تبریک
تبریک! شما با موفقیت TDE را در آزمایشگاه کد AlloyDB Omni RPM به پایان رساندید.
آنچه ما پوشش دادهایم
- نحوهی آمادهسازی دیسکهای ذخیرهسازی (
/data1،/obs)، راهاندازی swap و قالببندی سیستمهای فایل XFS. - نحوه تولید و مدیریت کلیدهای رمزگذاری کلید با استفاده از File KMS .
- نحوه مقداردهی اولیه و شروع یک کلاستر AlloyDB Omni با قابلیت TDE با استفاده از ابزارهای RPM.
- نحوه تأیید رمزگذاری دادهها در حالت استراحت با استفاده از بازرسی مستقیم دیسک خام (
grep)
برای اطلاعات بیشتر، به مستندات AlloyDB Omni مراجعه کنید.