Włącz przezroczyste szyfrowanie danych (TDE) w AlloyDB Omni RPM

1. Wprowadzenie

W tym ćwiczeniu pokazujemy, jak skonfigurować i włączyć szyfrowanie przezroczyste danych (TDE) w AlloyDB Omni za pomocą pakietów RPM. TDE szyfruje pliki danych, dzienniki WAL i tymczasowe pliki danych w spoczynku, zapewniając ochronę danych przed nieuprawnionym dostępem do bazowych fizycznych nośników danych.

W tym ćwiczeniu dowiesz się, jak udostępnić woluminy pamięci masowej, zainicjować i uruchomić klaster AlloyDB Omni z włączonym TDE za pomocą File KMS oraz sprawdzić szyfrowanie danych w stanie spoczynku w plikach na dysku.

Wymagania wstępne

  • Dostęp do projektu Google Cloud i Cloud Shell w konsoli Google Cloud.
  • Zainstalowany i skonfigurowany pakiet Google Cloud SDK (gcloud). Szczegółowe informacje o instalowaniu gcloud znajdziesz w artykule gcloud-install.

Czego się nauczysz

  • Jak utworzyć maszynę wirtualną Compute Engine z dedykowanymi dyskami bazy danych, kopii zapasowej i wymiany.
  • Jak sformatować woluminy pamięci masowej (XFS), skonfigurować /etc/fstab i przygotować ścieżki danych.
  • Jak generować klucze szyfrujące klucze (KEK) i zarządzać nimi za pomocą File KMS.
  • Jak zainstalować pakiety RPM AlloyDB Omni i narzędzia klienta PostgreSQL.
  • Jak uruchomić klaster AlloyDB Omni z włączonym TDE za pomocą narzędzi instalacyjnych RPM (alloydbomni18-setup) i --tde-kek-url.
  • Jak sprawdzić szyfrowanie na dysku za pomocą inspekcji plików w postaci nieprzetworzonej (grep).

Czego potrzebujesz

2. Konfiguracja i wymagania

Konfiguracja projektu

Utwórz projekt Google Cloud

  1. W konsoli Google Cloud na stronie wyboru projektu wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie w chmurze włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.

Uruchom Cloud Shell

Chociaż możesz zdalnie korzystać z Google Cloud na laptopie, w tym ćwiczeniu użyjesz Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

Ikona aktywowania Cloud Shell

  1. Otwórz konsolę Google Cloud i kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu. Możesz też otworzyć Cloud Shell, naciskając w konsoli klawisze G i S, lub otwierając stronę shell.cloud.google.com.
  2. Uzyskanie dostępu do środowiska i połączenie się z nim może zająć kilka chwil. Gdy to się uda, zobaczysz w terminalu wiersz poleceń gotowy do wprowadzania danych.

Terminal Google Cloud Shell pokazujący połączone środowisko

3. Tworzenie maszyny wirtualnej Compute Engine

W tej sekcji utworzysz maszynę wirtualną Compute Engine (GCE) z systemem Rocky Linux 9 i dedykowanymi dyskami trwałymi na dane bazy danych (/data1), kopie zapasowe/dostrzegalność (/obs) i przestrzeń wymiany.

  1. Zdefiniuj zmienne środowiskowe dla identyfikatora projektu, nazwy maszyny wirtualnej, strefy i regionu.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-tde-vm"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Skonfiguruj projekt domyślny.
    gcloud config set project $PROJECT
    
  3. Utwórz reguły zapory sieciowej dla ruchu 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. Ponieważ maszyna wirtualna jest tworzona bez publicznego adresu IP, skonfiguruj Cloud Router i bramę Cloud NAT, aby zapewnić dostęp do internetu na potrzeby pobierania pakietów RPM. Jeśli w regionie projektu istnieje już usługa Cloud NAT, możesz kontynuować.
    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
    
    Uwaga: jeśli w regionie istnieje już brama Cloud NAT, GCP zwróci komunikat informujący, że usługa NAT jest już skonfigurowana dla wszystkich podsieci. Możesz bezpiecznie zignorować ten błąd i kontynuować.
  5. Utwórz dodatkowe dyski trwałe na dane bazy danych, kopie zapasowe i miejsce wymiany.
    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. Udostępnij instancję maszyny wirtualnej z systemem Rocky Linux 9 z dołączonymi woluminami pamięci masowej.
    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. Przygotowywanie dysków, dostrajanie systemu i klucza File KMS

W tej sekcji połączysz się z maszyną wirtualną, sformatujesz i zamontujesz trwałe woluminy pamięci masowej, skonfigurujesz miejsce wymiany, dostroisz SELinux i wygenerujesz klucz szyfrujący klucze (KEK) TDE za pomocą File KMS.

  1. Połącz się z maszyną wirtualną przez Identity-Aware Proxy (IAP).
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Sformatuj i zamontuj wolumin danych (/data1) oraz wolumin obserwacji/kopii zapasowej (/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. Utwórz i włącz miejsce wymiany na dedykowanym dysku wymiany.
    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. Zdefiniuj zmienne środowiskowe dla katalogu bazy danych i pliku klucza 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>"
    
  5. Utwórz katalogi pamięci masowej na potrzeby bazy danych i klucza File KMS.
    sudo mkdir -p $PGDATA
    sudo mkdir -p $KMS_DIR
    
  6. Wygeneruj 32-bajtowy, kryptograficznie bezpieczny klucz szyfrujący klucze (KEK) za pomocą OpenSSL dla File KMS.
    sudo openssl rand -base64 32 | sudo tee $KEK_FILE
    sudo chmod 700 $KMS_DIR
    sudo chmod 600 $KEK_FILE
    
  7. Zainstaluj wymagane narzędzia do zarządzania SELinux.
    sudo dnf install -y policycoreutils-python-utils
    

5. Instalowanie pakietów RPM AlloyDB Omni

Skonfiguruj repozytoria pakietów i zainstaluj serwer bazy danych AlloyDB Omni wraz ze standardowymi narzędziami PostgreSQL 18.

Uwaga: zastąp $ALLOYDB_OMNI_REPOSITORY_URL adresem URL repozytorium otrzymanym e-mailem po wypełnieniu formularza rejestracji pakietów RPM AlloyDB Omni. Więcej informacji znajdziesz w omówieniu AlloyDB Omni w systemie Linux.

  1. Utwórz plik konfiguracyjny repozytorium YUM dla 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. Zaktualizuj pamięć podręczną repozytorium YUM i zainstaluj pakiety RPM serwera AlloyDB Omni 18.
    sudo yum makecache
    sudo dnf install -y alloydbomni18
    
  3. Zainstaluj oficjalne repozytorium RPM PostgreSQL PGDG i standardowy pakiet klienta 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. Przypisz użytkownikowi postgres własność katalogu /data1 i katalogu klucza KMS.
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. Uruchamianie klastra z włączonym TDE

Skonfiguruj limity zasobów, otwórz porty zapory sieciowej hosta i zainicjuj klaster AlloyDB Omni z włączonym szyfrowaniem przezroczystym danych za pomocą klucza File KMS (POSTGRES_INITDB_ARGS="--tde-kek-url=file://$KEK_FILE").

  1. Ustaw SELinux w trybie zezwalającym i skonfiguruj reguły zapory sieciowej hosta dla PostgreSQL.
    sudo setenforce 0
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Skonfiguruj parametry zastępowania usługi systemd, aby przypisać limity pamięci i zasobów procesora.
    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. Ustaw zmienne środowiskowe administratora i zainicjuj klaster bazy danych TDE za pomocą 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. Skonfiguruj port serwera 5432 w postgresql.conf.
    sudo sed -i "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5432/" $PGDATA/postgresql.conf
    
  5. Przygotuj katalogi systemowe i rozszerzenia za pomocą alloydbomni18-setup preparedb.
    sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \
        /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  6. Włącz i uruchom usługę systemd alloydbomni18.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Sprawdź, czy w danych wyjściowych widoczny jest komunikat Active: active (running).

7. Operacje na bazie danych i weryfikacja szyfrowania dysku TDE

Połącz się z bazą danych TDE, wstaw przykładowe rekordy, wykonaj CHECKPOINT, aby wymusić zapisywanie danych na dysku, i uruchom bezpośrednie skanowanie dysku (grep), aby sprawdzić szyfrowanie w spoczynku.

  1. Połącz się z bazą danych alloydbadmin za pomocą psql.
    PGPASSWORD="YourStrongPassword123!" /usr/lib/postgresql/18/bin/psql -h localhost -p 5432 -U postgres -d alloydbadmin
    
  2. Utwórz tabelę testową, wstaw poufny ciąg znaków i uruchom punkt kontrolny, aby zapisać zmodyfikowane bufory w pamięci masowej.
    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. Wyślij zapytanie do wewnętrznego widoku statystyk TDE AlloyDB pgsnap.g$tde_stats, aby sprawdzić aktywny stan szyfrowania, lokalizację KEK i wskaźniki bloków.
    SELECT is_tde_enabled, tde_kek_url, tde_data_blocks_encrypted, tde_wal_blocks_encrypted
    FROM pgsnap.g$tde_stats;
    
    Przykładowe dane wyjściowe potwierdzające aktywny TDE (is_tde_enabled = t), ścieżkę pliku KEK i liczniki zaszyfrowanych bloków:
     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. Zakończ działanie psql.
    \q
    
  5. Wyszukaj ciąg znaków hasła w nieprzetworzonych plikach pamięci masowej bazy danych w katalogu /data1/18/base/, aby sprawdzić ochronę TDE na dysku.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

Kluczowe informacje dotyczące weryfikacji:

  • W instancji bazy danych bez TDE uruchomienie grep w plikach relacji tabeli spowoduje wyświetlenie na dysku ciągu znaków w postaci zwykłego tekstu.
  • W instancji bazy danych z włączonym TDE grep zwróci zero dopasowań , ponieważ wszystkie pliki danych, indeksy, dzienniki WAL i dane tymczasowe są w spoczynku w pełni zaszyfrowane za pomocą szyfrów blokowych AES.

8. Czyszczenie

Po wykonaniu ćwiczeń zwalniaj miejsce, aby uniknąć niechcianych opłat za obliczenia.

  1. Odłącz się od sesji SSH maszyny wirtualnej.
    exit
    
  2. Usuń maszynę wirtualną GCE i dołączone dyski trwałe.
    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. Usuń reguły zapory sieciowej i zasoby bramy 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. Gratulacje

Gratulacje! Udało Ci się ukończyć ćwiczenie TDE w AlloyDB Omni RPM.

Omówione zagadnienia

  • Jak udostępnić dyski pamięci masowej (/data1, /obs), skonfigurować miejsce wymiany i sformatować systemy plików XFS.
  • Jak generować klucze szyfrujące klucze i zarządzać nimi za pomocą File KMS.
  • Jak zainicjować i uruchomić klaster AlloyDB Omni z włączonym TDE za pomocą narzędzi RPM.
  • Jak sprawdzić szyfrowanie w spoczynku za pomocą bezpośredniej inspekcji dysku w postaci nieprzetworzonej (grep).

Więcej informacji znajdziesz w dokumentacji AlloyDB Omni.

10. Ankieta

Jak będziesz korzystać z tego samouczka?

Tylko przeczytam Przeczytam i wykonam ćwiczenia