AWS RDSでPostgresを使用しています。
私のアプリケーションは、AWS KMS暗号化を使用してテーブル内の選択した列を暗号化しています。
KMSキーを構成し、選択クエリでdecrypt()
を使用する方法を試しましたが見つかりませんでした。
たとえば、私のアプリはmyTable.secureColumn
KMSを使用します。
今、私はクエリの下で発射しようとしています:
select * from myTable where decrypt(secureColumn, 'key', 'aes') = 'data';
PgCryptoでKMSキーを構成し、上記のクエリで使用する方法が見つかりませんでした。
誰かがこれを試しましたか?
前もって感謝します。
pgcrypto
のdecrypt
関数が、データの暗号化に使用したKMSキーを受信しないため、実行しようとしていることが機能しません。
基本的に、KMSを設定すると、公開鍵と秘密鍵で構成される鍵ペアが生成されます。これらはハードウェアセキュリティモジュール(HSM)で生成され、公開鍵はKMS APIにクエリできるものです。秘密鍵はHSMに残り、決して離れることはありません。 APIを使用して復号化のためにデータを渡すことができますが、キーを受け取ることはできません。 KMSを使用する重要な点は、秘密鍵はあなたからであっても秘密のままであることです。
RDS postgresでKMSを設定すると、テーブルスペースとバックアップが暗号化されます。 --storage-encrypted True
フラグを設定してデータベースを作成するときに提供される保存時データ保護に加えて、行レベルの暗号化も行いたい場合。そのためには、別のキーのセットを管理する必要があります。
これを行う正しい方法は、対称暗号化キーを生成し、それをKMSマスターキーで暗号化することです。アプリケーションはAPIを使用してこれらのキーを起動時に解読し、メモリに保持して、解読操作を必要とするすべてのクエリでデータベースに渡します。
暗号化された列のインデックス付けは、cryptextがキーを持っていない人にはランダムに見えるため、定義上不可能です。上記で投稿したクエリは、列を確認するキーがあったとしても、すべての行に対して復号化操作を実行する必要があるため、遅くなります。一般的に、行レベルの暗号化を使用している場合は、キー属性ではなく依存属性を暗号化する必要があります。選択、ソート、検索はすべて、値の平文へのアクセスを必要とするためです。