1. 소개
이 Codelab에서는 RPM 패키지를 사용하여 AlloyDB Omni에서 투명 데이터 암호화 (TDE)를 구성하고 사용 설정하는 방법을 보여줍니다. TDE는 저장 데이터 파일, 미리 쓰기 로그 (WAL), 임시 데이터 파일을 암호화하여 기본 물리적 스토리지 미디어에 대한 무단 액세스로부터 데이터를 보호합니다.
이 Codelab에서는 스토리지 볼륨을 프로비저닝하고 파일 KMS를 사용하여 TDE 지원 AlloyDB Omni 클러스터를 초기화하고 실행하며 디스크 파일에서 저장 데이터 암호화를 확인하는 방법을 알아봅니다.
기본 요건
- Google Cloud 콘솔에서 Google Cloud 프로젝트 및 Cloud Shell에 액세스할 수 있어야 합니다.
- Google Cloud SDK (
gcloud)가 설치되고 구성되어 있어야 합니다. gcloud 설치에 대한 자세한 내용은 gcloud-install을 참고하세요.
학습할 내용
- 전용 데이터베이스, 백업, 스왑 디스크로 Compute Engine VM을 만드는 방법
- 스토리지 볼륨 (XFS)을 포맷하고
/etc/fstab을 구성하며 데이터 경로를 준비하는 방법 - 파일 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을 사용합니다.

- Google Cloud 콘솔을 열고 오른쪽 상단 툴바에서 Cloud Shell 아이콘을 클릭합니다. 콘솔에서
G를 누른 다음S를 누르거나 shell.cloud.google.com을 방문하여 Cloud Shell을 열 수도 있습니다. - 일반적으로 환경을 프로비저닝하고 연결하는 데 몇 분 정도 걸립니다. 완료되면 입력을 받을 준비가 된 터미널 프롬프트가 표시됩니다.

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를 조정하고, 파일 KMS를 사용하여 TDE 키 암호화 키 (KEK)를 생성합니다.
- IAP (Identity-Aware Proxy)를 통해 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 - 파일 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_REPOSITORY_URL을(를) AlloyDB Omni RPM 등록 양식을 작성한 후 이메일로 수신한 저장소 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 postgres사용자에게/data1및 KMS 키 디렉터리의 소유권을 할당합니다.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/
주요 확인 사항:
- 비 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 Codelab에서 TDE를 완료했습니다.
학습한 내용
- 스토리지 디스크 (
/data1,/obs)를 프로비저닝하고, 스왑을 설정하고, XFS 파일 시스템을 포맷하는 방법 - 파일 KMS 를 사용하여 키 암호화 키를 생성하고 관리하는 방법
- RPM 도구를 사용하여 TDE 지원 AlloyDB Omni 클러스터를 초기화하고 시작하는 방법
- 직접 원시 디스크 검사 (
grep)를 사용하여 저장 데이터 암호화를 확인하는 방법
자세한 내용은 AlloyDB Omni 문서를 참고하세요.