TDE 지원 클러스터 만들기

문서 버전을 선택합니다.

AlloyDB Omni Kubernetes 연산자는 TdeConfig 커스텀 리소스를 사용하여 투명 데이터 암호화 (TDE) 클러스터의 수명 주기를 자동화합니다. 이 리소스는 Key Management Service (KMS) 연결 세부정보를 저장하여 운영자가 필요한 사용자 인증 정보를 데이터베이스 포드에 안전하게 삽입할 수 있도록 합니다.

시작하기 전에

  • 키 암호화 키 (KEK) 경로와 JSON 웹 토큰 (JWT)을 사용할 수 있도록 HashiCorp Vault의 KV-V2 보안 비밀 엔진을 구성합니다.
  • AlloyDB Omni에 JWT 토큰 파일을 읽을 권한이 있는지 확인합니다.
  • 선택사항: OpenShift에 TDE 지원 클러스터를 배포하려면 데이터베이스 클러스터를 실행하는 DBCluster 서비스 계정에 hostmount-anyuid 보안 컨텍스트 제약조건 (SCC)을 부여합니다.

    oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE

    DBCLUSTER_NAMEDBCluster의 이름으로 바꾸고 DBCLUSTER_NAMESPACEDBCluster 리소스를 만들려는 네임스페이스로 바꿉니다.

보관 파일 액세스 구성

KEK 경로와 인증 사용자 인증 정보를 포함하는 보안 비밀 리소스를 만듭니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
  token_path: "JWT_TOKEN_PATH"

다음을 바꿉니다.

  • CONFIG_MAP_NAME: 구성 맵의 이름입니다. kek_urltoken_path에 정의된 값은 TdeConfig 리소스 정의에 사용됩니다.
  • KEK_URL: HashiCorp Vault의 KEK에 대한 정규화된 URL입니다. vault를 프로토콜로 사용하여 HashiCorp Vault를 KMS 제공업체로 지정합니다(예: vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek).
  • JWT_TOKEN_PATH: 노드의 JWT 토큰 경로입니다. 예를 들면 /tmp/token입니다. JWT 토큰 액세스 경로는 클러스터의 모든 노드에서 일관되어야 합니다.

TLS 보안 비밀 만들기

인증서를 저장하는 TLS 보안 비밀을 만들려면 다음 명령어를 실행하세요.

kubectl create secret tls VAULT_SECRET_NAME \
    --cert=vault.crt \
    --key=vault.key

kubectl patch secret VAULT_SECRET_NAME \
    -p '{"data":{"ca.crt":"'$(base64 -w 0 vault.crt)'"}}' \
    --type=merge

VAULT_SECRET_NAME을 TLS 보안 비밀 이름으로 바꿉니다. TdeConfig 커스텀 리소스를 만들 때 이 보안 비밀 이름을 사용합니다.

TdeConfig CRD 만들기

AlloyDB Omni가 KEK를 가져오기 위해 볼트와 통신하는 방법을 정의하는 TdeConfig 리소스를 만듭니다. 지원되는 유일한 인증 유형은 jwt입니다. TdeConfig 리소스는 DbCluster 리소스와 동일한 네임스페이스에 만들어야 합니다.

JWT 토큰 경로가 postgres 사용자가 액세스할 수 있고 볼트 인스턴스가 네트워크를 통해 연결할 수 있는지 확인합니다.

TdeConfig 리소스를 만들려면 다음 단계를 따르세요.

TdeConfig 리소스의 매니페스트를 만들고 적용합니다.

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: TdeConfig
  metadata:
    name: TDE_CONFIG_NAME
  spec:
    kekUrlRef:
      name: CONFIG_MAP_NAME
      key: kek_url
    kmsProvider:
      vault:
        authType: "jwt"
        authMount: "JWT_AUTH_MOUNT_PATH"
        jwt:
          pathRef:
            name: "CONFIG_MAP_NAME"
            key: "token_path"
          role: "VAULT_ROLE"
    tls:
      certSecret:
        name: "VAULT_SECRET_NAME"

다음을 바꿉니다.

  • TDE_CONFIG_NAME: TdeConfig 리소스의 이름입니다.
  • JWT_AUTH_MOUNT_PATH: 구성에 따라 HashiCorp Vault 내에서 인증 엔진이 마운트되는 경로입니다. 예를 들면 auth/kms입니다.
  • (선택사항) VAULT_ROLE: Vault 설정에 정의된 클라이언트 역할입니다. 클라이언트 역할은 JWT를 검증하고 HashiCorp Vault 내에서 역할에 부여된 특정 액세스 권한과 ID를 반영합니다.
  • VAULT_SECRET_NAME: 볼트 연결을 위한 인증서가 포함된 보안 비밀의 이름입니다. 예를 들면 vault-secret입니다.

DBCluster 배포

  1. 매니페스트를 만들어 적용하여 TdeConfig 리소스를 참조하는 DBCluster 리소스를 만듭니다. 데이터베이스 클러스터 만들기에 대한 자세한 내용은 데이터베이스 클러스터 만들기를 참고하세요.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.1.0"
      features:
        transparentDataEncryption:
          tdeConfigRef:
            name: "TDE_CONFIG_NAME"
    
    [...]
    

    TDE_CONFIG_NAMETdeConfig 리소스의 이름으로 바꾸고 DBCLUSTER_NAME을 만들려는 DBCluster의 이름으로 바꿉니다.

  2. 선택사항: Openshift 환경에 DBCluster를 배포하는 경우 hostmount-anyuid 주석으로 DBCluster 리소스에 주석을 달아야 합니다.

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid
    

    DBCLUSTER_NAMEDBCluster 리소스의 이름으로 바꾸고 DBCLUSTER_NAMESPACEDBCluster 리소스를 만들려는 네임스페이스로 바꿉니다.

TDE 측정항목 보기

클러스터가 초기화된 후 다음 단계를 완료하여 TDE가 사용 설정되었는지 확인하고 관련 TDE 측정항목을 확인합니다.

  1. psql 또는 원하는 클라이언트를 사용하여 데이터베이스에 연결합니다. 인스턴스 연결에 관한 자세한 안내는 AlloyDB Omni 실행 및 연결을 참고하세요.
  2. 다음 명령어를 실행합니다.

    select * FROM pgsnap.g$tde_stats;
    

    출력에는 TDE 사용 설정 여부, KEK URL, KEK 버전, KEK 생성 타임스탬프와 같은 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