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 Secret を作成するには、次のコマンドを実行します。

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 を取得する方法を定義する 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.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 リソースを作成する Namespace に置き換えます。

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 復号されたデータブロックの数。 該当なし カウンタ
    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 ブロックの暗号化に費やされた合計時間。 該当なし マイクロ秒 カウンタ