Включите прозрачное шифрование данных (TDE) в AlloyDB Omni RPM.

1. Введение

В этом практическом занятии показано, как настроить и включить прозрачное шифрование данных (TDE) в AlloyDB Omni с помощью RPM-пакетов. TDE шифрует файлы данных, журналы предварительной записи (WAL) и временные файлы данных в состоянии покоя, обеспечивая защиту данных от несанкционированного доступа к базовым физическим носителям информации.

В этом практическом занятии вы узнаете, как выделять тома хранения, инициализировать и запускать кластер AlloyDB Omni с поддержкой TDE с использованием File KMS , а также проверять шифрование данных в состоянии покоя на дисковых файлах.

Предварительные требования

  • Доступ к проекту Google Cloud и оболочке Cloud Shell из консоли Google Cloud.
  • Google Cloud SDK ( gcloud ) установлен и настроен. Подробную информацию об установке gcloud см. в инструкции по установке gcloud.

Что вы узнаете

  • Как создать виртуальную машину Compute Engine с выделенными дисками для базы данных, резервного копирования и подкачки.
  • Как отформатировать тома хранения (XFS), настроить файл /etc/fstab и подготовить пути к данным.
  • Как генерировать и управлять ключами шифрования (KEK) с помощью File KMS.
  • Как установить RPM-пакеты AlloyDB Omni и клиентские утилиты PostgreSQL.
  • Как инициализировать кластер AlloyDB Omni с поддержкой TDE, используя инструменты настройки RPM ( alloydbomni18-setup ) и --tde-kek-url .
  • Как проверить шифрование на диске с помощью анализа необработанных файлов ( grep ).

Что вам понадобится

  • Чтобы получить ссылку на RPM-пакеты AlloyDB Omni, заполните регистрационную форму AlloyDB Omni RPM или ознакомьтесь с обзором AlloyDB Omni для Linux . Ссылка на репозиторий будет отправлена ​​на ваш зарегистрированный адрес электронной почты.
  • Рабочий терминал с доступом к Google Cloud (рекомендуется Cloud Shell).

2. Setup and Requirements

Настройка проекта

Создайте проект в Google Cloud.

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud .
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .

Запустить Cloud Shell

Хотя вы можете управлять Google Cloud удаленно со своего ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

Значок для активации Cloud Shell

  1. Откройте консоль Google Cloud и щелкните значок Cloud Shell на панели инструментов в правом верхнем углу. Вы также можете открыть Cloud Shell, нажав клавишу G , а затем S в консоли, или перейдя по адресу shell.cloud.google.com .
  2. Обычно подготовка и подключение к среде занимают несколько минут. После завершения вы увидите приглашение терминала, готовое для ввода данных.

Терминал Google Cloud Shell, отображающий подключенную среду.

3. Создайте виртуальную машину Compute Engine.

В этом разделе вы создадите виртуальную машину Compute Engine (GCE) под управлением Rocky Linux 9 с выделенными постоянными дисками для данных базы данных ( /data1 ), резервного копирования/мониторинга ( /obs ) и пространства подкачки.

  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. Создайте дополнительные постоянные диски для хранения данных базы данных, резервных копий и пространства подкачки.
    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
    

4. Подготовка дисков, настройка системы и файла ключа KMS.

В этом разделе вы подключаетесь к виртуальной машине, форматируете и монтируете тома постоянного хранения, настраиваете файл подкачки, оптимизируете SELinux и генерируете ключ шифрования TDE (KEK) с помощью File KMS.

  1. Подключение к виртуальной машине по SSH через Identity-Aware Proxy (IAP).
    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_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. Сгенерируйте 32-байтовый криптографически защищенный ключ шифрования (KEK) с помощью OpenSSL для файлового KMS.
    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
    

5. Установите RPM-пакеты AlloyDB Omni.

Настройте репозитории пакетов и установите сервер базы данных AlloyDB Omni вместе со стандартными инструментами PostgreSQL 18.

Примечание: Замените $ALLOYDB_OMNI_REPOSITORY_URL на URL-адрес репозитория, полученный по электронной почте после заполнения формы регистрации RPM-пакета AlloyDB Omni . Для получения дополнительной информации см. Обзор AlloyDB Omni для Linux .

  1. Create the YUM repository configuration file for 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. Назначьте пользователю postgres права собственности на каталог /data1 и каталог ключей KMS.
    sudo chown -R postgres:postgres /data1 $KMS_DIR
    sudo chmod 755 /data1 $PGDATA
    

6. Инициализация кластера с поддержкой TDE.

Настройте квоты ресурсов, откройте порты брандмауэра хоста и инициализируйте кластер AlloyDB Omni с включенным прозрачным шифрованием данных с помощью ключа 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 для назначения ограничений на использование памяти и ресурсов ЦП.
    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. Настройте серверный порт 5432 в 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) .

7. Операции с базой данных и проверка шифрования диска TDE.

Подключитесь к базе данных TDE, вставьте тестовые записи, выполните CHECKPOINT , чтобы принудительно записать данные на диск, и запустите прямое сканирование диска ( grep ), чтобы доказать шифрование данных в состоянии покоя.

  1. Подключитесь к базе данных alloydbadmin с помощью psql .
    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. Найдите строку пароля в необработанных файлах хранилища базы данных в каталоге /data1/18/base/ , чтобы проверить защиту TDE на диске.
    sudo grep -a -rn "UNENCRYPTED_DEMO_SECRET_98765" /data1/18/base/
    

Главный вывод по проверке ключа:

  • В экземпляре базы данных без TDE запуск grep по файлам связей таблиц отображает строку в виде обычного текста, находящуюся на диске.
  • On a TDE-Enabled database instance, grep returns zero matches because all data files, indexes, write-ahead logs (WAL), and temporary data are fully encrypted with AES block ciphers at rest.

8. Уборка

После завершения упражнений освободите ресурсы, чтобы предотвратить нежелательные расходы на вычислительные мощности.

  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
    

9. Поздравляем!

Поздравляем! Вы успешно завершили практическое занятие по AlloyDB Omni RPM в рамках программы TDE.

Что мы рассмотрели

  • Как выделить дисковое пространство для хранения ( /data1 , /obs ), настроить файл подкачки и отформатировать файловую систему XFS.
  • How to generate and manage Key Encryption Keys using File KMS .
  • Как инициализировать и запустить кластер AlloyDB Omni с поддержкой TDE с помощью инструментов RPM.
  • Как проверить шифрование данных в состоянии покоя с помощью прямого анализа необработанных данных на диске ( grep ).

Для получения дополнительной информации обратитесь к документации AlloyDB Omni .

10. Опрос

Как вы будете использовать этот учебный материал?

Прочитайте только до конца. Прочитайте текст и выполните упражнения.