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 をデプロイする
マニフェストを作成して適用し、
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の名前に置き換えます。省略可: OpenShift 環境に
DBClusterをデプロイする場合は、DBClusterリソースにhostmount-anyuidアノテーションを付加する必要があります。kubectl annotate dbclusters.alloydbomni.dbadmin.goog DBCLUSTER_NAME -n DBCLUSTER_NAMESPACE openshift.io/scc=anyuidDBCLUSTER_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 情報。 |
|
ゲージ | |
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 ストレージにスピルされたカラム型キャッシュ ブロックの復号に費やした合計時間。 | 該当なし | マイクロ秒 | カウンタ |