1. はじめに
この Codelab では、RPM パッケージを使用して AlloyDB Omni で透過的データ暗号化(TDE)を構成して有効にする方法について説明します。TDE は、データファイル、write-ahead log(WAL)、一時データファイルを保存時に暗号化し、基盤となる物理ストレージ メディアへの不正アクセスからデータを保護します。
この Codelab では、ストレージ ボリュームをプロビジョニングし、File KMS を使用して TDE 対応の AlloyDB Omni クラスタを初期化して実行し、ディスク ファイルの保存データの暗号化を確認する方法を学習します。
前提条件
- Google Cloud コンソールから Google Cloud プロジェクトと Cloud Shell にアクセスできること。
- Google Cloud SDK(
gcloud)のインストールと構成。gcloud のインストールの詳細については、gcloud-install をご覧ください。
学習内容
- 専用のデータベース ディスク、バックアップ ディスク、スワップ ディスクを使用して Compute Engine VM を作成する方法。
- ストレージ ボリューム(XFS)のフォーマット、
/etc/fstabの構成、データパスの準備を行う方法。 - File KMS を使用して鍵暗号鍵(KEK)を生成して管理する方法。
- AlloyDB Omni RPM パッケージと PostgreSQL クライアント ユーティリティをインストールする方法。
- RPM 設定ツール(
alloydbomni18-setup)と--tde-kek-urlを使用して TDE 対応の AlloyDB Omni クラスタをブートストラップする方法。 - 生ファイル検査(
grep)を使用してディスク上の暗号化を検証する方法。
必要なもの
- AlloyDB Omni RPM 登録フォームに記入するか、Linux 版 AlloyDB Omni の概要を参照して、AlloyDB Omni RPM の URL リンクを取得します。リポジトリの URL は、登録済みのメールアドレスに送信されます。
- Google Cloud にアクセスできるターミナル(Cloud Shell を推奨)。
2. 設定と要件
プロジェクトのセットアップ
Google Cloud プロジェクトの作成
- Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。
- Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

- Google Cloud コンソールを開き、右上のツールバーにある Cloud Shell アイコンをクリックします。Cloud Shell は、コンソールで
Gを押してからSを押すか、shell.cloud.google.com にアクセスして開くこともできます。 - 通常、環境のプロビジョニングと接続には数分かかります。完了すると、入力可能なターミナル プロンプトが表示されます。

3. Compute Engine VM を作成する
このセクションでは、データベース データ(/data1)、バックアップ/オブザーバビリティ(/obs)、スワップ領域専用の永続ディスクを使用して Rocky Linux 9 を実行する Compute Engine(GCE)仮想マシン(VM)を作成します。
- プロジェクト ID、VM 名、ゾーン、リージョンの環境変数を定義します。
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" - VM はパブリック IP アドレスなしで作成されるため、RPM パッケージをダウンロードするためのアウトバウンド インターネット アクセスを提供するように Cloud Router と Cloud NAT ゲートウェイを構成します。プロジェクト リージョンに 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 VM インスタンスをプロビジョニングします。
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 鍵を準備する
このセクションでは、VM に接続し、永続ストレージ ボリュームのフォーマットとマウント、スワップの構成、SELinux の調整を行い、File KMS を使用して TDE 鍵暗号鍵(KEK)を生成します。
- Identity-Aware Proxy(IAP)を介して VM に 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 - データベース ディレクトリとファイル 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 - File KMS 用に OpenSSL を使用して、暗号学的に安全な 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 パッケージをインストールする
パッケージ リポジトリを構成し、標準の PostgreSQL 18 ツールとともに AlloyDB Omni データベース サーバーをインストールします。
注: AlloyDB Omni RPM 登録フォームの入力後にメールで送信されたリポジトリ URL を $ALLOYDB_OMNI_REPOSITORY_URL に置き換えます。詳細については、Linux 版 AlloyDB Omni の概要をご覧ください。
- 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 対応クラスタをブートストラップする
リソース割り当てを構成し、ホスト ファイアウォール ポートを開き、ファイル 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.confalloydbomni18-setup preparedbを使用してシステム カタログと拡張機能を準備します。sudo PGPORT=5432 PGPASSWORD="$PGPASSWORD" PGDATA="$PGDATA" \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedballoydbomni18systemd サービスを有効にして起動します。 出力に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/
検証に関する重要なポイント:
- Non-TDE データベース インスタンスで、テーブル関係ファイルに対して
grepを実行すると、ディスクにプレーン テキスト文字列が表示されます。 - TDE 対応データベース インスタンスでは、すべてのデータファイル、インデックス、ログ先行書き込み(WAL)、一時データが AES ブロック暗号で完全に暗号化されているため、
grepは一致なしを返します。
8. クリーンアップ
演習を完了したら、不要なコンピューティング料金が発生しないようにリソースをクリーンアップします。
- VM の 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 クラスタを初期化して起動する方法。
- 直接の RAW ディスク検査(
grep)を使用して保存データの暗号化を検証する方法。
詳細については、AlloyDB Omni のドキュメントをご覧ください。