TDE 지원 클러스터 만들기

문서 버전을 선택합니다.

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

시작하기 전에

HashiCorp Vault KMS

  • AlloyDB Omni 설치 계획을 읽습니다.
  • TDE를 사용 설정한 AlloyDB Omni 배포를 계획할 때는 예상 워크로드와 데이터 볼륨을 기반으로 추가 CPU 사용량을 고려합니다. 암호화 및 복호화는 컴퓨팅 집약적인 작업입니다.
  • 키 암호화 키 (KEK) 경로와 JSON 웹 토큰 (JWT)을 사용할 수 있도록 HashiCorp Vault의 KV-V2 보안 비밀 엔진을 구성합니다.
  • AlloyDB Omni에 인증 토큰인 JSON 웹 토큰 (JWT) 파일을 읽을 권한이 있는지 확인합니다.

Thales CipherTrust KMS

  • AlloyDB Omni 설치 계획을 읽습니다.
  • TDE를 사용 설정한 AlloyDB Omni 배포를 계획할 때는 예상 워크로드와 데이터 볼륨을 기반으로 추가 CPU 사용량을 고려합니다. 암호화 및 복호화는 컴퓨팅 집약적인 작업입니다.
  • 보안 비밀 키 암호화 키 (KEK)가 생성되고 내보낼 수 있도록 Thales CipherTrust Manager를 구성합니다.
  • KEK 보안 비밀을 인증하고 내보낼 수 있는 권한이 있는 CipherTrust Manager 사용자 계정 (username 및 password)이 있는지 확인합니다.

클러스터 만들기

TDE 지원 클러스터를 만들려면 데이터베이스 초기화 중에 필요한 Key Management Service (KMS) 구성 및 인증 사용자 인증 정보를 전달해야 합니다. jwt 인증을 사용하여 HashiCorp Vault 를 구성하거나 사용자 이름 및 비밀번호 인증을 사용하여 Thales CipherTrust Manager 를 구성할 수 있습니다.

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

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

    HashiCorp Vault KMS

    HashiCorp Vault를 사용하는 프로덕션 워크로드에 이 접근 방식을 사용합니다.

    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/alloydbomni18-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/secret/data/alloydb_kek).
    2. /etc/systemd/system/alloydbomni18.service.d/override.conf에서 alloydbomni18.service의 재정의 파일을 만들려면 override.conf 파일에 다음을 추가합니다.

      [Service]
      Environment="VAULT_AUTH_TYPE=jwt"
      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"

      다음을 바꿉니다.

      • 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

    Thales CipherTrust KMS

    Thales CipherTrust Manager를 사용하는 프로덕션 워크로드에 이 접근 방식을 사용합니다.

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

      sudo PGPASSWORD=POSTGRES_PASSWORD \
      PGDATA=DATA_DIR \
      CIPHERTRUST_USER=CIPHERTRUST_USERNAME \
      CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD \
      CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH \
      POSTGRES_INITDB_ARGS="--tde-kek-url=KEK_URL" \
      /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb

      다음을 바꿉니다.

      • POSTGRES_PASSWORD: 데이터베이스 사용자의 비밀번호입니다.
      • DATA_DIR: AlloyDB Omni의 데이터 볼륨으로 마운트할 로컬 디렉터리입니다(예: /local/data).
      • CIPHERTRUST_USERNAME: Thales CipherTrust Manager로 인증하는 데 사용되는 사용자 이름입니다.
      • CIPHERTRUST_PASSWORD: Thales CipherTrust Manager 사용자의 비밀번호입니다.
      • CIPHERTRUST_CERT_PATH: 노드에 CipherTrust Manager 연결 인증서(ca.crt, tls.crt, tls.key)가 있는 경로입니다(예: /tde-tls). 설정하지 않으면 기본 트러스트 저장소의 인증서가 사용됩니다.
      • KEK_URL: Thales CipherTrust Manager의 KEK에 대한 정규화된 URL입니다. ciphertrust를 프로토콜로 사용하여 Thales CipherTrust Manager를 KMS 제공업체로 지정합니다(예: ciphertrust://10.0.0.1:443/api/v1/vault/secrets/alloydb_kek).
    2. /etc/systemd/system/alloydbomni18.service.d/override.conf에서 alloydbomni18.service의 재정의 파일을 만들려면 override.conf 파일에 다음을 추가합니다.

      [Service]
      Environment="CIPHERTRUST_USER=CIPHERTRUST_USERNAME"
      Environment="CIPHERTRUST_PASSWORD=CIPHERTRUST_PASSWORD"
      Environment="CIPHERTRUST_CERT_PATH=CIPHERTRUST_CERT_PATH"

      다음을 바꿉니다.

      • CIPHERTRUST_USERNAME: Thales CipherTrust Manager로 인증하는 데 사용되는 사용자 이름입니다.
      • CIPHERTRUST_PASSWORD: Thales CipherTrust Manager 사용자의 비밀번호입니다.
      • CIPHERTRUST_CERT_PATH: 노드에 CipherTrust Manager 연결 인증서(ca.crt, tls.crt, tls.key)가 있는 경로입니다(예: /tde-tls). 설정하지 않으면 기본 트러스트 저장소의 인증서가 사용됩니다.
    3. 변경사항을 적용하려면 systemd 데몬을 새로고침합니다.

      sudo systemctl daemon-reload

    파일 기반 KMS

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

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

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

      KEK_DIR=KEK_DIR
      sudo mkdir -p $KEK_DIR
      openssl rand -base64 32 | sudo tee $KEK_DIR/key >/dev/null
      sudo chown -R postgres:postgres $KEK_DIR
      sudo chmod 0700 $KEK_DIR
      sudo chmod 0600 $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/alloydbomni18-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 암호화된 chill 캐시 블록 수입니다. 해당사항 없음 counter
tde_chill_cache_blocks_decrypted 복호화된 chill 캐시 블록 수입니다. 해당사항 없음 counter
tde_chill_cache_blocks_total_encryption_time_us chill 캐시 블록 암호화에 소비한 총 시간입니다. 해당사항 없음 마이크로초 counter
tde_chill_cache_blocks_total_decryption_time_us chill 캐시 블록 복호화에 소비한 총 시간입니다. 해당사항 없음 마이크로초 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