Membuat cluster yang mendukung TDE

Pilih versi dokumentasi:

Operator Kubernetes AlloyDB Omni mengotomatiskan siklus proses cluster enkripsi data transparan (TDE) menggunakan resource kustom TdeConfig. Resource ini menyimpan detail koneksi Key Management Service (KMS) untuk HashiCorp Vault atau Thales CipherTrust Manager, sehingga operator dapat menyuntikkan kredensial yang diperlukan ke dalam pod database dengan aman.

Sebelum memulai

KMS HashiCorp Vault

  • Konfigurasi mesin secret KV-V2 HashiCorp Vault untuk memastikan jalur Kunci Enkripsi Kunci (KEK) dan Token Web JSON (JWT) tersedia.
  • Pastikan AlloyDB Omni memiliki izin untuk membaca file Token Web JSON (JWT), yang merupakan token autentikasi.
  • Opsional: Untuk men-deploy cluster yang mendukung TDE di OpenShift, berikan Batasan Konteks Keamanan (SCC) hostmount-anyuid ke akun layanan DBCluster yang menjalankan cluster database.

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

    Ganti DBCLUSTER_NAME dengan nama DBCluster dan DBCLUSTER_NAMESPACE dengan namespace tempat Anda ingin membuat resource DBCluster.

KMS Thales CipherTrust

  • Konfigurasi Thales CipherTrust Manager untuk memastikan Kunci Enkripsi Kunci (KEK) rahasia Anda dibuat dan dapat diekspor.
  • Pastikan Anda memiliki akun pengguna CipherTrust Manager (username dan password) dengan izin untuk mengautentikasi dan mengekspor secret KEK.
  • Opsional: Untuk men-deploy cluster yang mendukung TDE di OpenShift, berikan Batasan Konteks Keamanan (SCC) hostmount-anyuid ke akun layanan DBCluster yang menjalankan cluster database.

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

    Ganti DBCLUSTER_NAME dengan nama DBCluster dan DBCLUSTER_NAMESPACE dengan namespace tempat Anda ingin membuat resource DBCluster.

Mengonfigurasi akses KMS

Buat resource Kubernetes ConfigMap dan Secret yang berisi jalur KEK dan kredensial autentikasi KMS Anda. Pastikan untuk membuat resource ini di namespace yang sama tempat Anda berencana men-deploy DBCluster.

KMS HashiCorp Vault

Buat resource ConfigMap yang berisi URL KEK dan jalur host ke token JWT Anda:

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

Ganti kode berikut:

  • CONFIG_MAP_NAME: nama ConfigMap. Nilai yang ditentukan dalam kek_url dan token_path digunakan dalam definisi resource TdeConfig.
  • KEK_URL: URL yang sepenuhnya memenuhi syarat ke KEK di HashiCorp Vault. Gunakan vault sebagai protokol untuk menentukan HashiCorp Vault sebagai penyedia KMS—misalnya, vault://vault.default.svc:8200/v1/secret/data/alloydb_kek.
  • JWT_TOKEN_PATH: jalur ke token JWT di node—misalnya, /tmp/token. Jalur akses token JWT harus konsisten di semua node dalam cluster.

KMS Thales CipherTrust

Buat resource ConfigMap yang berisi URL KEK dan resource Secret yang berisi kredensial autentikasi Thales CipherTrust Manager Anda:

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
---
apiVersion: v1
kind: Secret
metadata:
  name: CREDENTIALS_SECRET_NAME
type: Opaque
stringData:
  username: "CIPHERTRUST_USERNAME"
  password: "CIPHERTRUST_PASSWORD"

Ganti kode berikut:

  • CONFIG_MAP_NAME: nama ConfigMap. Nilai yang ditentukan dalam kek_url digunakan dalam definisi resource TdeConfig.
  • KEK_URL: URL yang sepenuhnya memenuhi syarat ke KEK di Thales CipherTrust Manager. Gunakan ciphertrust sebagai protokol untuk menentukan Thales CipherTrust Manager sebagai penyedia KMS—misalnya, ciphertrust://ciphertrust.default.svc:443/api/v1/vault/secrets/alloydb_kek.
  • CREDENTIALS_SECRET_NAME: nama Secret Kubernetes yang menyimpan kredensial CipherTrust Manager Anda—misalnya, ciphertrust-credentials.
  • CIPHERTRUST_USERNAME: nama pengguna yang digunakan untuk mengautentikasi dengan Thales CipherTrust Manager.
  • CIPHERTRUST_PASSWORD: sandi untuk pengguna Thales CipherTrust Manager.

Membuat secret TLS

Untuk membuat secret TLS guna menyimpan sertifikat untuk memverifikasi koneksi server KMS Anda (HashiCorp Vault atau Thales CipherTrust Manager), jalankan perintah berikut:

kubectl create secret tls TLS_SECRET_NAME \
    --cert=CLIENT_CERT_FILE \
    --key=CLIENT_KEY_FILE

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

Ganti kode berikut:

  • TLS_SECRET_NAME: nama untuk secret TLS (misalnya, vault-secret atau ciphertrust-tls-secret). Anda menggunakan nama secret ini saat membuat resource kustom TdeConfig.
  • CLIENT_CERT_FILE: jalur ke file sertifikat TLS klien Anda (disimpan sebagai tls.crt di secret).
  • CLIENT_KEY_FILE: jalur ke file kunci pribadi TLS klien Anda (disimpan sebagai tls.key di secret).
  • CA_CERT_FILE: jalur ke file sertifikat Certificate Authority (CA) yang digunakan untuk memverifikasi sertifikat server KMS (disimpan sebagai ca.crt di secret).

Membuat resource kustom TdeConfig

Buat resource TdeConfig yang menentukan cara AlloyDB Omni berkomunikasi dengan penyedia KMS eksternal Anda untuk mengambil KEK. Pastikan Anda membuat resource TdeConfig di namespace yang sama dengan resource DBCluster.

Pastikan instance KMS Anda dapat dijangkau melalui jaringan dari pod database Anda.

KMS HashiCorp Vault

Pastikan jalur ke token JWT Anda di node host dapat diakses oleh pengguna postgres. Buat dan terapkan manifes untuk resource 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: "TLS_SECRET_NAME"

Ganti kode berikut:

  • TDE_CONFIG_NAME: nama resource TdeConfig.
  • CONFIG_MAP_NAME: nama ConfigMap yang dibuat pada langkah sebelumnya.
  • JWT_AUTH_MOUNT_PATH: jalur tempat mesin autentikasi dipasang dalam HashiCorp Vault, seperti yang ditentukan oleh konfigurasi Anda—misalnya, auth/kms.
  • Opsional: VAULT_ROLE: peran klien yang ditentukan dalam penyiapan Vault Anda. Peran klien memvalidasi JWT dan mencerminkan hak akses dan identitas tertentu yang diberikan peran dalam HashiCorp Vault.
  • TLS_SECRET_NAME: nama secret yang berisi sertifikat TLS untuk koneksi Vault—misalnya, vault-secret.

KMS Thales CipherTrust

Buat dan terapkan manifes untuk resource TdeConfig menggunakan penyedia ciphertrust:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: TdeConfig
metadata:
  name: TDE_CONFIG_NAME
spec:
  kekUrlRef:
    name: CONFIG_MAP_NAME
    key: kek_url
  kmsProvider:
    ciphertrust:
      authType: "password"
      credentialsSecretRef:
        name: "CREDENTIALS_SECRET_NAME"
  tls:
    certSecret:
      name: "TLS_SECRET_NAME"

Ganti kode berikut:

  • TDE_CONFIG_NAME: nama resource TdeConfig.
  • CONFIG_MAP_NAME: nama ConfigMap yang berisi kek_url.
  • CREDENTIALS_SECRET_NAME: nama Secret Kubernetes yang berisi kunci username dan password CipherTrust Manager Anda—misalnya, ciphertrust-credentials.
  • TLS_SECRET_NAME: nama secret yang berisi sertifikat TLS untuk koneksi CipherTrust Manager—misalnya, ciphertrust-tls-secret.

Men-deploy DBCluster

  1. Buat dan terapkan manifes untuk membuat resource DBCluster yang mereferensikan resource TdeConfig Anda. Untuk mengetahui informasi selengkapnya tentang cara membuat cluster database, lihat Membuat cluster database.

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

    Ganti TDE_CONFIG_NAME dengan nama resource TdeConfig Anda dan DBCLUSTER_NAME dengan nama DBCluster yang ingin Anda buat.

  2. Opsional: Jika Anda men-deploy DBCluster di lingkungan OpenShift, Anda harus menambahkan anotasi resource DBCluster dengan anotasi hostmount-anyuid.

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

    Ganti DBCLUSTER_NAME dengan nama resource DBCluster Anda dan DBCLUSTER_NAMESPACE dengan namespace tempat Anda ingin membuat resource DBCluster.

Untuk mengaktifkan TDE untuk cache kolom yang tumpah ke SSD, patch DBCluster Anda sebagai berikut:

kubectl patch dbcluster DBCLUSTER_NAME \
  -n DBCLUSTER_NAMESPACE \
  -p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
  --type=merge

Referensi metrik TDE

Anda dapat melihat semua metrik TDE di agen pemantauan AlloyDB Omni. Tabel berikut menjelaskan setiap metrik.

Nama Deskripsi Label Unit Jenis
alloydb_omni_database_tde_data_blocks_decrypted_count_total Jumlah blok data yang didekripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_data_blocks_encrypted_count_total Jumlah blok data yang dienkripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_data_decryption_time_us_total Total waktu yang dihabiskan dalam dekripsi blok data. Tidak berlaku mikrodetik penghitung
alloydb_omni_database_tde_data_encryption_time_us_total Total waktu yang dihabiskan dalam enkripsi blok data. Tidak berlaku mikrodetik penghitung
alloydb_omni_database_tde_enabled Status TDE diaktifkan. Tidak berlaku pengukur
alloydb_omni_database_tde_kek_info Informasi KEK TDE.
  • kek_version: Versi KEK yang digunakan untuk key wrapping.
  • kek_url: Jalur yang sepenuhnya memenuhi syarat ke KEK di KMS.
  • kek_creation_timestamp: Waktu pembuatan versi KEK yang digunakan.
pengukur
alloydb_omni_database_tde_temp_blocks_decrypted_count_total Jumlah blok sementara yang didekripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_temp_blocks_encrypted_count_total Jumlah blok sementara yang dienkripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_temp_decryption_time_us_total Total waktu yang dihabiskan dalam dekripsi blok sementara. Tidak berlaku mikrodetik penghitung
alloydb_omni_database_tde_temp_encryption_time_us_total Total waktu yang dihabiskan dalam enkripsi blok sementara. Tidak berlaku mikrodetik penghitung
alloydb_omni_database_tde_wal_blocks_decrypted_count_total Jumlah blok WAL yang didekripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_wal_blocks_encrypted_count_total Jumlah blok WAL yang dienkripsi. Tidak berlaku penghitung
alloydb_omni_database_tde_wal_decryption_time_us_total Total waktu yang dihabiskan dalam dekripsi blok WAL. Tidak berlaku mikrodetik penghitung
alloydb_omni_database_tde_wal_encryption_time_us_total Total waktu yang dihabiskan dalam enkripsi blok WAL. Tidak berlaku mikrodetik penghitung
tde_chill_cache_blocks_encrypted Jumlah blok cache dingin yang dienkripsi. Tidak berlaku penghitung
tde_chill_cache_blocks_decrypted Jumlah blok cache dingin yang didekripsi. Tidak berlaku penghitung
tde_chill_cache_blocks_total_encryption_time_us Total waktu yang dihabiskan dalam enkripsi blok cache dingin. Tidak berlaku mikrodetik penghitung
tde_chill_cache_blocks_total_decryption_time_us Total waktu yang dihabiskan dalam dekripsi blok cache dingin. Tidak berlaku mikrodetik penghitung
tde_ce_cache_ssd_blocks_encrypted Jumlah blok cache kolom yang tumpah ke penyimpanan SSD yang dienkripsi. Tidak berlaku penghitung
tde_ce_cache_ssd_blocks_decrypted Jumlah blok cache kolom yang tumpah ke penyimpanan SSD yang didekripsi. Tidak berlaku penghitung
tde_ce_cache_ssd_blocks_total_encryption_time_us Total waktu yang dihabiskan untuk mengenkripsi blok cache kolom yang tumpah ke penyimpanan SSD. Tidak berlaku mikrodetik penghitung
tde_ce_cache_ssd_blocks_total_decryption_time_us Total waktu yang dihabiskan untuk mendekripsi blok cache kolom yang tumpah ke penyimpanan SSD. Tidak berlaku mikrodetik penghitung