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

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

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

始める前に

  • HashiCorp Vault の KV-V2 シークレット エンジンを構成して、鍵暗号鍵(KEK)パスと JSON Web Token(JWT)が使用可能であることを確認します。
  • 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 リソースを作成する Namespace に置き換えます。

Vault へのアクセスを構成する

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 をプロトコルとして使用して、KMS プロバイダとして HashiCorp Vault を指定します(例: vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek)。
  • JWT_TOKEN_PATH: ノード上の JWT トークンのパス。例: /tmp/tokenJWT トークンのアクセスパスは、クラスタ内のすべてのノードで一貫している必要があります。

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 シークレットの名前に置き換えます。この Secret 名は、TdeConfig カスタム リソースを作成するときに使用します。

TdeConfig CRD を作成する

AlloyDB Omni が KEK を取得するために Vault と通信する方法を定義する TdeConfig リソースを作成します。サポートされている認証タイプは jwt のみです。TdeConfig リソースは、DbCluster リソースと同じ Namespace に作成してください。

JWT トークンのパスが postgres ユーザーからアクセス可能であり、Vault インスタンスがネットワーク経由で到達可能であることを確認します。

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 の名前。例: vault-secret

DBCluster をデプロイする

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

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.3.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 リソースを作成する 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 指標のリファレンス

AlloyDB Omni のモニタリング エージェントで、すべての TDE 指標を確認できます。次の表に、各指標の意味を示します。

名前 説明 ラベル 単位 タイプ
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 ストレージにスピルされたカラム型キャッシュ ブロックの復号にかかった合計時間。 該当なし マイクロ秒 カウンタ