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 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 をデプロイする
マニフェストを作成して適用し、
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_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 に置き換えます。
TDE 指標を表示する
クラスタを初期化したら、次の手順で TDE が有効になっていることを確認し、関連する TDE 指標を表示します。
psqlまたは任意のクライアントを使用してデータベースに接続します。インスタンスへの接続の詳細な手順については、AlloyDB Omni を実行して接続するをご覧ください。次のコマンドを実行します。
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_enabledTDE の有効ステータス。 該当なし ゲージ alloydb_omni_database_tde_kek_infoTDE 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_totalWAL ブロックの復号に費やした合計時間。 該当なし マイクロ秒 カウンタ alloydb_omni_database_tde_wal_encryption_time_us_totalWAL ブロックの暗号化に費やされた合計時間。 該当なし マイクロ秒 カウンタ