TDE 지원 클러스터 만들기

문서 버전을 선택합니다.

AlloyDB Omni에서 TDE (Transparent Data Encryption)를 사용 설정하여 저장 데이터를 보호하고 민감한 정보를 보호할 수 있습니다. 이 문서에서는 데이터베이스 초기화 중에 POSTGRES_INITDB_ARGS 환경 변수에 필요한 Vault 환경 변수와 --tde-kek-url 플래그를 제공하여 TDE 지원 클러스터를 만드는 방법을 설명합니다.

시작하기 전에

  • AlloyDB Omni 설치 계획을 읽습니다.
  • TDE를 사용 설정한 AlloyDB Omni 배포를 계획할 때는 예상 워크로드와 데이터 볼륨을 기반으로 추가 CPU 사용량을 고려해야 합니다. 암호화 및 복호화는 컴퓨팅 집약적인 작업입니다.

클러스터 만들기

TDE 지원 클러스터를 만들려면 데이터베이스 초기화 중에 필요한 KMS (Key Management Service) 구성 및 인증 사용자 인증 정보를 전달해야 합니다. 지원되는 인증 유형은 jwt뿐입니다.

  1. RPM을 사용하여 AlloyDB Omni를 설치 하여 환경을 준비하고 AlloyDB Omni RPM 패키지를 설치합니다.

  2. 데이터베이스를 초기화합니다.

    HashiCorp Vault KMS

    프로덕션 워크로드에 이 방식을 사용합니다.

    1. 다음 명령어를 실행하여 TDE를 사용 설정한 데이터베이스를 초기화합니다.

      sudo PGPASSWORD=POSTGRES_PASSWORD \
      PGDATA=DATA_DIR \
      VAULT_AUTH_TYPE=jwt \
      VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT \
      VAULT_JWT_PATH=JWT_FILE_PATH \
      VAULT_ROLE=VAULT_ROLE \
      VAULT_CERT_PATH=VAULT_CERT_PATH \
      POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \
      /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb

      다음을 바꿉니다.

      • POSTGRES_PASSWORD: 데이터베이스 사용자의 비밀번호입니다.
      • DATA_DIR: AlloyDB Omni의 데이터 볼륨으로 마운트할 로컬 디렉터리입니다(예: /local/data).
      • JWT_AUTH_ENGINE_MOUNT: HashiCorp Vault 인증 엔진이 마운트되는 경로입니다(예: /auth/jwt).
      • JWT_FILE_PATH: Vault JWT가 노드에 저장되는 경로입니다(예: tde-tls/jwt-token).
      • (선택사항) VAULT_ROLE: HashiCorp Vault에서 JWT 토큰의 진위 여부를 확인할 수 있도록 Vault 설정에 정의된 클라이언트 역할입니다.
      • VAULT_CERT_PATH: Vault 연결의 인증서가 노드에 있는 경로입니다(예: /tde-tls). 설정하지 않으면 기본 트러스트 저장소의 인증서가 사용됩니다.
      • KEK_URL: HashiCorp Vault의 KEK에 대한 정규화된 URL입니다. vault를 프로토콜로 사용하여 HashiCorp Vault를 KMS 제공업체로 지정합니다(예: vault://127.0.0.1:8200/v1/secrets/data/alloydb_kek).
    2. /etc/systemd/system/alloydbomni18.service.d/override.conf에서 alloydbomni18.service의 재정의 파일을 만들려면 override.conf 파일에 다음을 추가합니다.

      [Service]
      Environment="VAULT_AUTH_TYPE=VAULT_AUTH_TYPE"
      Environment="VAULT_AUTH_MOUNT=JWT_AUTH_ENGINE_MOUNT"
      Environment="VAULT_JWT_PATH=JWT_FILE_PATH"
      Environment="VAULT_ROLE=VAULT_ROLE"
      Environment="VAULT_CERT_PATH=VAULT_CERT_PATH"

      다음을 바꿉니다.

      • VAULT_AUTH_TYPE: Vault 연결에 사용할 인증 유형입니다. jwt만 지원됩니다.
      • JWT_AUTH_ENGINE_MOUNT: HashiCorp Vault 인증 엔진이 마운트되는 경로입니다(예: /auth/jwt).
      • JWT_FILE_PATH: Vault JWT가 노드에 저장되는 경로입니다(예: tde-tls/jwt-token).
      • (선택사항) VAULT_ROLE: HashiCorp Vault에서 JWT 토큰의 진위 여부를 확인할 수 있도록 Vault 설정에 정의된 클라이언트 역할입니다.
      • VAULT_CERT_PATH: Vault 연결의 인증서가 노드에 있는 경로입니다(예: /tde-tls). 설정하지 않으면 기본 트러스트 저장소의 인증서가 사용됩니다.
    3. 변경사항을 적용하려면 systemd 데몬을 다시 로드합니다.

      sudo systemctl daemon-reload

    파일 기반 KMS

    이 방식은 테스트 목적으로만 사용하세요.

    파일 기반 키를 사용하여 로컬에서 TDE를 테스트하려면 먼저 머신에서 32바이트 KEK를 생성해야 합니다.

    1. 디렉터리를 만들고 키를 생성하고 적절한 권한을 설정합니다.

      KEK_DIR=KEK_DIR
      mkdir -p $KEK_DIR
      sudo chown 999:999 $KEK_DIR
      openssl rand -base64 32 | sudo tee $KEK_DIR/key
      sudo chmod 0755 $KEK_DIR/key
    2. 로컬 파일 URI를 KEK URL로 전달하여 데이터베이스를 초기화합니다.

      sudo PGPASSWORD=POSTGRES_PASSWORD \
      PGDATA=DATA_DIR \
      POSTGRES_INITDB_ARGS="--tde-kek-url=file:///$KEK_DIR/key" \
      /usr/lib/postgresql/18/bin/alloydbomniproduct_major_version_numeric-setup initdb

      다음을 바꿉니다.

      • POSTGRES_PASSWORD: 데이터베이스 사용자의 비밀번호입니다.
      • DATA_DIR: AlloyDB Omni의 데이터 볼륨으로 마운트할 로컬 디렉터리입니다(예: /local/data).
      • KEK_DIR: 로컬 파일 기반 KEK가 저장되는 디렉터리입니다(예: /tmp/alloydb/kms).
  3. 데이터베이스가 초기화된 후 RPM을 사용하여 AlloyDB Omni 설치의 안내에 따라 데이터베이스를 준비하고 호스트를 설정하고 systemd 서비스를 시작합니다.

  4. SSD 스토리지로 유출된 열 기반 엔진 캐시 데이터에 TDE를 사용 설정하려면 데이터베이스 인스턴스에 연결하고 다음 쿼리를 실행합니다.

    ALTER SYSTEM SET google_columnar_engine.enable_tde_for_storage_cache = 'on';
    
  5. 변경사항이 적용되도록 데이터베이스 서버를 다시 시작합니다.

TDE 측정항목 참조

AlloyDB Omni의 모니터링 에이전트에서 모든 TDE 측정항목을 볼 수 있습니다. 다음 표에서는 각 측정항목을 설명합니다.

이름 설명 라벨 단위 유형
alloydb_omni_database_tde_data_blocks_decrypted_count_total 복호화된 데이터 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_data_blocks_encrypted_count_total 암호화된 데이터 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_data_decryption_time_us_total 데이터 블록 복호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
alloydb_omni_database_tde_data_encryption_time_us_total 데이터 블록 암호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
alloydb_omni_database_tde_enabled TDE 사용 설정 상태입니다. 해당 없음 gauge
alloydb_omni_database_tde_kek_info TDE KEK 정보입니다.
  • kek_version: 키 래핑에 사용 중인 KEK
    버전입니다.
  • kek_url: KMS의 KEK에 대한 정규화된 경로입니다.
  • kek_creation_timestamp:
    사용 중인 KEK 버전의 생성 시간입니다.
gauge
alloydb_omni_database_tde_temp_blocks_decrypted_count_total 복호화된 임시 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_temp_blocks_encrypted_count_total 암호화된 임시 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_temp_decryption_time_us_total 임시 블록 복호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
alloydb_omni_database_tde_temp_encryption_time_us_total 임시 블록 암호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
alloydb_omni_database_tde_wal_blocks_decrypted_count_total 복호화된 WAL 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_wal_blocks_encrypted_count_total 암호화된 WAL 블록 수입니다. 해당 없음 counter
alloydb_omni_database_tde_wal_decryption_time_us_total WAL 블록 복호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
alloydb_omni_database_tde_wal_encryption_time_us_total WAL 블록 암호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
tde_chill_cache_blocks_encrypted 암호화된 칠 캐시 블록 수입니다. 해당 없음 counter
tde_chill_cache_blocks_decrypted 복호화된 칠 캐시 블록 수입니다. 해당 없음 counter
tde_chill_cache_blocks_total_encryption_time_us 칠 캐시 블록 암호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
tde_chill_cache_blocks_total_decryption_time_us 칠 캐시 블록 복호화에 걸린 총 시간입니다. 해당 없음 마이크로초 counter
tde_ce_cache_ssd_blocks_encrypted 암호화된 SSD 스토리지로 유출된 열 기반 캐시 블록 수입니다. 해당 없음 counter
tde_ce_cache_ssd_blocks_decrypted 복호화된 SSD 스토리지로 유출된 열 기반 캐시 블록 수입니다. 해당 없음 counter
tde_ce_cache_ssd_blocks_total_encryption_time_us SSD 스토리지로 유출된 열 기반 캐시 블록을 암호화하는 데 걸린 총 시간입니다. 해당 없음 마이크로초 counter
tde_ce_cache_ssd_blocks_total_decryption_time_us SSD 스토리지로 유출된 열 기반 캐시 블록을 복호화하는 데 걸린 총 시간입니다. 해당 없음 마이크로초 counter