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_NAME は
DBClusterの名前に置き換え、DBCLUSTER_NAMESPACE はDBClusterリソースを作成する 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_urlとtoken_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 をデプロイする
マニフェストを作成して適用し、
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_NAMEはTdeConfigリソースの名前に、DBCLUSTER_NAMEは作成するDBClusterの名前に置き換えます。省略可: OpenShift 環境に
DBClusterをデプロイする場合は、hostmount-anyuidアノテーションでDBClusterリソースにアノテーションを付ける必要があります。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 指標のリファレンス
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 情報。 |
|
ゲージ | |
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 ストレージにスピルされたカラム型キャッシュ ブロックの復号にかかった合計時間。 | 該当なし | マイクロ秒 | カウンタ |