Using a key store#

外部キー管理システムのキーストアを使用して、データ暗号化キーを管理できます。テストおよびサポートされているキーストアは次のとおりです。

  • Amazon AWS Key Management ServiceKMS

  • Microsoft Azure Key Vault

  • Google Cloud - Cloud Key Management Service

  • HashiCorp Vault KMIP SecretsエンジンおよびTransit Secretsエンジン

  • Thales CipherTrust Manager

  • Fortanixデータセキュリティマネージャー

  • Entrust KeyControl

使用可能なキーストアのいずれかを使用するには、構成例を参照してください。

AWS Key Management Serviceの例#

AWS Key Management Service でキーを作成します。

aws kms create-key
aws kms create-alias --alias-name alias/pg-tde-master-1 --target-key-id "..."

aws kms コマンドとalias/pg-tde-master-1 キーを使用して、データ暗号化キーをラップおよびラップ解除します。

PGDATAKEYWRAPCMD=aws kms encrypt --key-id alias/pg-tde-master-1 --plaintext fileb:///dev/stdin --output text --query CiphertextBlob | base64 -d > "%p"
PGDATAKEYUNWRAPCMD=aws kms decrypt --key-id alias/pg-tde-master-1 --ciphertext-blob fileb://"%p" --output text --query Plaintext | base64 -d

注釈

この例のようなパイプを使用したシェルコマンドは、パイプの終了ステータスが最後のコマンドの終了ステータスであるため、問題があります。最初のより興味深いコマンドの失敗は、適切に報告されません。 Postgresは、wrapまたはunwrapコマンドが何も書き込んだかどうかを認識することにより、これをある程度処理します。ただし、これをより堅牢にすることをお勧めします。たとえば、一部のシェルで使用可能な`pipefail` オプション、または一部のオペレーティングシステムで使用可能な`mispipe` コマンドを使用します。より複雑なコマンドをインラインで定義するのではなく、外部シェルスクリプトまたは他のプログラムに配置します。

Azure Key Vaultの例#

Azure Key Vault でキーを作成します。

az keyvault key create --vault-name pg-tde --name pg-tde-master-1

az keyvault key コマンドとpg-tde-master-1 キーを使用して、データ暗号化キーをラップおよびラップ解除します。

PGDATAKEYWRAPCMD=az keyvault key encrypt --name pg-tde-master-1 --vault-name pg-tde --algorithm A256GCM --value @- --data-type plaintext --only-show-errors --output json | jq -r .result > "%p"
PGDATAKEYUNWRAPCMD=az keyvault key decrypt --name pg-tde-master-1 --vault-name pg-tde --algorithm A256GCM --value @"%p" --data-type plaintext --only-show-errors --output json | jq -r .result

注釈

この例のようなパイプを使用したシェルコマンドは、パイプの終了ステータスが最後のコマンドの終了ステータスであるため、問題があります。最初のより興味深いコマンドの失敗は、適切に報告されません。 Postgresは、wrapまたはunwrapコマンドが何も書き込んだかどうかを認識することにより、これをある程度処理します。ただし、これをより堅牢にすることをお勧めします。たとえば、一部のシェルで使用可能な`pipefail` オプション、または一部のオペレーティングシステムで使用可能な`mispipe` コマンドを使用します。より複雑なコマンドをインラインで定義するのではなく、外部シェルスクリプトまたは他のプログラムに配置します。

Google Cloud KMSの例#

Google Cloud KMS でキーを作成します。

gcloud kms keys create pg-tde-master-1 --location=global --keyring=pg-tde --purpose=encryption

gcloud kms コマンドとpg-tde-master-1 キーを使用して、データ暗号化キーをラップおよびラップ解除します。

PGDATAKEYWRAPCMD=gcloud kms encrypt --plaintext-file=- --ciphertext-file=%p --location=global --keyring=pg-tde --key=pg-tde-master-1
PGDATAKEYUNWRAPCMD=gcloud kms decrypt --plaintext-file=- --ciphertext-file=%p --location=global --keyring=pg-tde --key=pg-tde-master-1

HashiCorp Vault Transit Secrets Engineの例#

HashiCorp Vault Transit Secrets Engine でトランジットを有効にします

vault secrets enable transit

キーを作成し、名前を付けます。

vault write -f transit/keys/pg-tde-master-1

vault write コマンドとpg-tde-master-1 キーを使用して、データ暗号化キーをラップおよびラップ解除します。

PGDATAKEYWRAPCMD=base64 | vault write -field=ciphertext transit/encrypt/pg-tde-master-1 plaintext=- > %p
PGDATAKEYUNWRAPCMD=vault write -field=plaintext transit/decrypt/pg-tde-master-1 ciphertext=- < %p | base64 -d

Thales CipherTrust Managerの例#

データ暗号化キーをThalesキーストアのキーでラップする方法については、 Implementing Thales CipherTrust Manager ドキュメントの Using TDE initialization options セクションを参照してください。

Fortanix Data Security Managerの例#

ステップバイステップの構成チュートリアルについては、 Using Fortanix Data Security Manager with EDB Postgres for TDE を参照してください。

Entrust KeyControl統合ガイド#

インストール、構成、および使用手順キーのローテーションを含むについては、 EDB Postgres and Entrust KeyControl 統合ガイドを参照してください。