فعال کردن رمزگذاری شفاف داده‌ها (TDE) در AlloyDB Omni RPM

۱. مقدمه

این آزمایشگاه کد، نحوه پیکربندی و فعال‌سازی رمزگذاری شفاف داده‌ها (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 مخزن به آدرس ایمیل ثبت شده شما ارسال خواهد شد.
  • یک ترمینال فعال با دسترسی به گوگل کلود (کلود شل توصیه می‌شود).

۲. تنظیمات و الزامات

راه‌اندازی پروژه

ایجاد یک پروژه ابری گوگل

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید .
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .

شروع پوسته ابری

اگرچه می‌توانید گوگل کلود را از راه دور از طریق لپ‌تاپ خود مدیریت کنید، اما در این آزمایشگاه کد از پوسته گوگل کلود ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده می‌کنید.

آیکون برای فعال کردن Cloud Shell

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

ترمینال Google Cloud Shell که محیط متصل را نشان می‌دهد

۳. ماشین مجازی موتور محاسباتی را ایجاد کنید

در این بخش، شما یک ماشین مجازی (VM) با موتور محاسباتی (GCE) ایجاد می‌کنید که سیستم عامل Rocky Linux 9 را اجرا می‌کند و دیسک‌های دائمی اختصاصی برای داده‌های پایگاه داده ( /data1 )، پشتیبان‌گیری‌ها/مشاهده‌پذیری ( /obs ) و فضای swap دارد.

  1. متغیرهای محیطی را برای شناسه پروژه، نام ماشین مجازی، منطقه و ناحیه خود تعریف کنید.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. پروژه پیش‌فرض خود را پیکربندی کنید.
    gcloud config set project $PROJECT
    
  3. ایجاد قوانین فایروال شبکه برای ترافیک 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"
    
  4. از آنجایی که ماشین مجازی بدون آدرس IP عمومی ایجاد می‌شود، یک روتر ابری و دروازه Cloud NAT را پیکربندی کنید تا دسترسی به اینترنت خروجی برای دانلود بسته‌های RPM فراهم شود. اگر Cloud 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
    
    توجه: اگر یک دروازه Cloud NAT از قبل در منطقه شما وجود داشته باشد، GCP پیامی را نشان می‌دهد که نشان می‌دهد NAT از قبل برای همه زیرشبکه‌ها پیکربندی شده است. می‌توانید با خیال راحت این خطا را نادیده بگیرید و ادامه دهید.
  5. دیسک‌های دائمی اضافی برای داده‌های پایگاه داده، پشتیبان‌گیری‌ها و فضای 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
    
  6. نمونه ماشین مجازی 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) را تولید می‌کنید.

  1. از طریق پروکسی آگاه از هویت (IAP) به ماشین مجازی SSH وصل شوید.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. درایو داده ( /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
    
  3. فضای 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
    
  4. متغیرهای محیطی را برای دایرکتوری پایگاه داده و فایل کلید 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>"
    
  5. دایرکتوری‌های ذخیره‌سازی برای پایگاه داده و فایل ذخیره‌سازی کلید KMS ایجاد کنید.
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. با استفاده از OpenSSL برای File KMS، یک کلید رمزگذاری (KEK) 32 بایتی با امنیت رمزنگاری ایجاد کنید.
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. ابزارهای مدیریتی مورد نیاز 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 مراجعه کنید.

  1. فایل پیکربندی مخزن 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
    
  2. حافظه نهان مخزن YUM را به‌روزرسانی کنید و بسته‌های RPM سرور AlloyDB Omni 18 را نصب کنید.
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. مخزن رسمی 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
    
  4. مالکیت /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" ) مقداردهی اولیه کنید.

  1. SELinux را روی حالت مجاز تنظیم کنید و قوانین فایروال میزبان را برای PostgreSQL پیکربندی کنید.
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. پارامترهای لغو سرویس 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
    
  3. متغیرهای محیطی مدیر را تنظیم کنید و خوشه پایگاه داده 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
    
  4. پورت سرور ۵۴۳۲ را در postgresql.conf پیکربندی کنید.
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. آماده‌سازی کاتالوگ‌ها و افزونه‌های سیستم با استفاده از alloydbomni18-setup preparedb .
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. سرویس systemd مربوط به alloydbomni18 را فعال و راه‌اندازی کنید.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    تأیید کنید که خروجی Active: active (running) را نشان می‌دهد.

۷. عملیات پایگاه داده و تأیید رمزگذاری دیسک TDE

به پایگاه داده TDE متصل شوید، رکوردهای نمونه را وارد کنید، یک CHECKPOINT را اجرا کنید تا نوشتن داده‌ها روی دیسک را اجباری کنید، و اسکن‌های مستقیم دیسک ( grep ) را برای اثبات رمزگذاری داده‌ها در حالت سکون اجرا کنید.

  1. با استفاده از psql به پایگاه داده alloydbadmin متصل شوید.
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. یک جدول آزمایشی ایجاد کنید، یک رشته محرمانه وارد کنید و یک نقطه بازرسی را برای نوشتن بافرهای کثیف در حافظه فعال کنید.
    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;
    
  3. برای تأیید وضعیت رمزگذاری فعال، مکان KEK و معیارهای بلوک، نمای آمار TDE داخلی AlloyDB به نام pgsnap.g$tde_stats را جستجو کنید.
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    نمونه خروجی که فعال بودن TDE ( 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)
    
  4. از psql خارج شوید.
    \q
    
  5. برای تأیید حفاظت TDE روی دیسک، فایل‌های خام ذخیره‌سازی پایگاه داده را در مسیر /data1/18/base/ به دنبال رشته کد عبور جستجو کنید.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

نکته کلیدی در مورد تأیید:

  • در یک نمونه پایگاه داده غیر TDE ، اجرای grep روی فایل‌های رابطه جدول، رشته متن ساده را روی دیسک نمایش می‌دهد.
  • در یک نمونه پایگاه داده TDE-Enabled ، grep هیچ تطابقی را برنمی‌گرداند زیرا تمام فایل‌های داده، ایندکس‌ها، گزارش‌های write-ahead (WAL) و داده‌های موقت در حالت استراحت به طور کامل با رمزهای بلوکی AES رمزگذاری شده‌اند.

۸. پاکسازی

پس از اتمام تمرین‌ها، منابع را پاکسازی کنید تا از هزینه‌های محاسباتی ناخواسته جلوگیری شود.

  1. اتصال خود را از جلسه SSH ماشین مجازی قطع کنید.
    exit
    
  2. ماشین مجازی 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
    
  3. قوانین فایروال و منابع دروازه 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 مراجعه کنید.

۱۰. نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرین‌ها را انجام دهید