TDE 対応クラスタを作成する

ドキュメントのバージョンを選択してください。

AlloyDB Omni Kubernetes オペレーターは、TdeConfig カスタム リソースを使用して、透過的なデータ暗号化(TDE)クラスタのライフサイクルを自動化します。このリソースは、HashiCorp Vault または Thales CipherTrust Manager の鍵管理サービス(KMS)接続の詳細を保存し、オペレーターが必要な認証情報をデータベース Pod に安全に挿入できるようにします。

始める前に

HashiCorp Vault KMS

  • HashiCorp Vault の KV-V2 Secret エンジンを構成して、鍵暗号鍵(KEK)パスと JSON ウェブトークン(JWT)が使用可能になるようにします。
  • AlloyDB Omni に、認証トークンである JSON ウェブトークン(JWT)ファイルを読み取る権限があることを確認します。
  • 省略可: OpenShift に TDE 対応クラスタをデプロイするには、データベース クラスタを実行している DBCluster サービス アカウントに hostmount-anyuid セキュリティ コンテキスト制約(SCC)を付与します。

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

    DBCLUSTER_NAME は DBCluster の名前に、DBCLUSTER_NAMESPACE は DBCluster リソースを作成する Namespace に置き換えます。

Thales CipherTrust KMS

  • Secret 鍵暗号鍵(KEK)が作成され、エクスポート可能になるように Thales CipherTrust Manager を構成します。
  • KEK Secret の認証とエクスポートの権限を持つ CipherTrust Manager ユーザー アカウント(username と password)があることを確認します。
  • 省略可: OpenShift に TDE 対応クラスタをデプロイするには、データベース クラスタを実行している DBCluster サービス アカウントに hostmount-anyuid セキュリティ コンテキスト制約(SCC)を付与します。

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

    DBCLUSTER_NAME は DBCluster の名前に、DBCLUSTER_NAMESPACE は DBCluster リソースを作成する Namespace に置き換えます。

KMS アクセスを構成する

KEK パスと KMS 認証情報を含む Kubernetes ConfigMap リソースと Secret リソースを作成します。これらのリソースは、DBCluster をデプロイする予定の Namespace に作成してください。

HashiCorp Vault KMS

KEK URL と JWT トークンのホストパスを含む ConfigMap リソースを作成します。

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

次のように置き換えます。

  • CONFIG_MAP_NAME: ConfigMap の名前。kek_url と token_path で定義された値は、TdeConfig リソース定義で使用されます。
  • KEK_URL: HashiCorp Vault の KEK の完全修飾 URL。KMS プロバイダとして HashiCorp Vault を指定するには、プロトコルとして vault を使用します(例: vault://vault.default.svc:8200/v1/secret/data/alloydb_kek)。
  • JWT_TOKEN_PATH: ノード上の JWT トークンのパス(例: /tmp/token)。JWT トークンのアクセス パスは、クラスタ内のすべてのノードで一貫している必要があります。

Thales CipherTrust KMS

KEK URL を含む ConfigMap リソースと、Thales CipherTrust Manager 認証情報を含む Secret リソースを作成します。

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"

次のように置き換えます。

  • CONFIG_MAP_NAME: ConfigMap の名前。kek_url で定義された値は、TdeConfig リソース定義で使用されます。
  • KEK_URL: Thales CipherTrust Manager の KEK の完全修飾 URL。KMS プロバイダとして Thales CipherTrust Manager を指定するには、プロトコルとして ciphertrust を使用します(例: ciphertrust://ciphertrust.default.svc:443/api/v1/vault/secrets/alloydb_kek)。
  • CREDENTIALS_SECRET_NAME: CipherTrust Manager 認証情報を保存する Kubernetes Secret の名前(例: ciphertrust-credentials)。
  • CIPHERTRUST_USERNAME: Thales CipherTrust Manager での認証に使用するユーザー名。
  • CIPHERTRUST_PASSWORD: Thales CipherTrust Manager ユーザーのパスワード。

TLS Secret を作成する

KMS サーバー接続(HashiCorp Vault または Thales CipherTrust Manager)の検証に使用する証明書を保存する TLS Secret を作成するには、次のコマンドを実行します。

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

次のように置き換えます。

  • TLS_SECRET_NAME: TLS Secret の名前(vault-secret、ciphertrust-tls-secret など)。この Secret 名は、TdeConfig カスタム リソースを作成するときに使用します。
  • CLIENT_CERT_FILE: クライアント TLS 証明書ファイルのパス(Secret に tls.crt として保存されます)。
  • CLIENT_KEY_FILE: クライアント TLS 秘密鍵ファイルのパス(Secret に tls.key として保存されます)。
  • CA_CERT_FILE: KMS サーバー証明書の検証に使用する認証局(CA)証明書ファイルのパス(Secret に ca.crt として保存されます)。

TdeConfig カスタム リソースを作成する

AlloyDB Omni が外部 KMS プロバイダと通信して KEK を取得する方法を定義する TdeConfig リソースを作成します。TdeConfig リソースは、DBCluster リソースと同じ Namespace に作成してください。

KMS インスタンスがデータベース Pod からネットワーク経由で到達可能であることを確認します。

HashiCorp Vault KMS

ホストノード上の JWT トークンのパスに postgres ユーザーがアクセスできることを確認します。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"

次のように置き換えます。

  • TDE_CONFIG_NAME: TdeConfig リソースの名前。
  • CONFIG_MAP_NAME: 前の手順で作成した ConfigMap の名前。
  • JWT_AUTH_MOUNT_PATH: 構成で定義されている、HashiCorp Vault 内で認証エンジンがマウントされるパス(例: auth/kms)。
  • 省略可: VAULT_ROLE: Vault の設定で定義されているクライアント ロール。クライアント ロールは JWT を検証し、HashiCorp Vault 内でロールに付与された特定のアクセス権と ID を反映します。
  • TLS_SECRET_NAME: Vault 接続の TLS 証明書を含む Secret の名前(例: vault-secret)。

Thales CipherTrust KMS

ciphertrust プロバイダを使用して、TdeConfig リソースのマニフェストを作成して適用します。

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"

次のように置き換えます。

  • TDE_CONFIG_NAME: TdeConfig リソースの名前。
  • CONFIG_MAP_NAME: kek_url を含む ConfigMap の名前。
  • CREDENTIALS_SECRET_NAME: CipherTrust Manager の username 鍵と password 鍵を含む Kubernetes Secret の名前(例: ciphertrust-credentials)。
  • TLS_SECRET_NAME: CipherTrust Manager 接続の TLS 証明書を含む Secret の名前(例: ciphertrust-tls-secret)。

DBCluster をデプロイする

  1. マニフェストを作成して適用し、TdeConfig リソースを参照する DBCluster リソースを作成します。データベース クラスタの作成の詳細については、 データベース クラスタを作成するをご覧ください。

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

    TDE_CONFIG_NAME は TdeConfig リソースの名前に、DBCLUSTER_NAME は作成する DBCluster の名前に置き換えます。

  2. 省略可: OpenShift 環境に DBCluster をデプロイする場合は、DBCluster リソースに hostmount-anyuid アノテーションを付加する必要があります。

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

    DBCLUSTER_NAME は DBCluster リソースの名前に、DBCLUSTER_NAMESPACE は DBCluster リソースを作成する Namespace に置き換えます。

SSD にスピルされたカラム型キャッシュの TDE を有効にするには、次のように DBCluster にパッチを適用します。

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

TDE 指標のリファレンス

すべての TDE 指標は、AlloyDB Omni のモニタリング エージェントで確認できます。 次の表に、各指標について説明します。

名前 説明 ラベル 単位 種類
alloydb_omni_database_tde_data_blocks_decrypted_count_total 復号されたデータブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_data_blocks_encrypted_count_total 暗号化されたデータブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_data_decryption_time_us_total データブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ
alloydb_omni_database_tde_data_encryption_time_us_total データブロックの暗号化に費やした合計時間。 該当なし マイクロ秒 カウンタ
alloydb_omni_database_tde_enabled TDE の有効ステータス。 該当なし ゲージ
alloydb_omni_database_tde_kek_info TDE KEK 情報。
  • kek_version: 鍵のラッピングに使用されている KEK のバージョン。
  • kek_url: KMS の KEK の完全修飾パス。
  • kek_creation_timestamp: 使用中の KEK バージョンの作成時間。
ゲージ
alloydb_omni_database_tde_temp_blocks_decrypted_count_total 復号された一時ブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_temp_blocks_encrypted_count_total 暗号化された一時ブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_temp_decryption_time_us_total 一時ブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ
alloydb_omni_database_tde_temp_encryption_time_us_total 一時ブロックの暗号化に費やした合計時間。 該当なし マイクロ秒 カウンタ
alloydb_omni_database_tde_wal_blocks_decrypted_count_total 復号された WAL ブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_wal_blocks_encrypted_count_total 暗号化された WAL ブロックの数。 該当なし カウンタ
alloydb_omni_database_tde_wal_decryption_time_us_total WAL ブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ
alloydb_omni_database_tde_wal_encryption_time_us_total WAL ブロックの暗号化に費やした合計時間。 該当なし マイクロ秒 カウンタ
tde_chill_cache_blocks_encrypted 暗号化されたチル キャッシュ ブロックの数。 該当なし カウンタ
tde_chill_cache_blocks_decrypted 復号されたチル キャッシュ ブロックの数。 該当なし カウンタ
tde_chill_cache_blocks_total_encryption_time_us チル キャッシュ ブロックの暗号化に費やした合計時間。 該当なし マイクロ秒 カウンタ
tde_chill_cache_blocks_total_decryption_time_us チル キャッシュ ブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ
tde_ce_cache_ssd_blocks_encrypted SSD ストレージにスピルされたカラム型キャッシュ ブロックのうち、暗号化されたブロックの数。 該当なし カウンタ
tde_ce_cache_ssd_blocks_decrypted SSD ストレージにスピルされたカラム型キャッシュ ブロックのうち、復号されたブロックの数。 該当なし カウンタ
tde_ce_cache_ssd_blocks_total_encryption_time_us SSD ストレージにスピルされたカラム型キャッシュ ブロックの暗号化に費やした合計時間。 該当なし マイクロ秒 カウンタ
tde_ce_cache_ssd_blocks_total_decryption_time_us SSD ストレージにスピルされたカラム型キャッシュ ブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ