Spring Security
Spring Vault は、BytesKeyGenerator
および BytesEncryptor
の実装を提供することで Spring Security と統合します。どちらの実装も Vault の transit
バックエンドを使用します。
例 1:
VaultBytesKeyGenerator
の例 VaultOperations operations = …;
VaultBytesKeyGenerator generator = new VaultBytesKeyGenerator(operations);
byte[] key = generator.generateKey();
例 2:
VaultBytesEncryptor
の例 VaultTransitOperations transit = …;
VaultBytesEncryptor encryptor = new VaultBytesEncryptor(transit, "my-key-name");
byte[] ciphertext = encryptor.encrypt(plaintext);
byte[] result = encryptor.decrypt(ciphertext);
Vault は、サーバー側のキー管理とともに JVM から切り離されたエントロピーソースをカプセル化します。これにより、アプリケーション開発者からの適切な暗号化 / 復号化の負担が軽減され、Vault のオペレータに負担が課せられます。Vault のオペレーターには通常、組織のセキュリティチームが含まれており、データが適切に暗号化 / 復号化されていることを保証できます。さらに、暗号化 / 復号化操作は監査ログに記録される必要があるため、復号化イベントはすべて記録されます。
バックエンドはキーのローテーションもサポートしているため、名前付きキーの新しいバージョンを生成できます。キーで暗号化されたすべてのデータは、最新バージョンのキーを使用します。以前に暗号化されたデータは、古いバージョンのキーを使用して復号化できます。管理者は、攻撃者が暗号文の古いコピーを取得して暗号文を正常に復号化できないように、復号化に使用できるキーの以前のバージョンを制御できます。
結局のところ、Vault はネットワーク化されたサービスであり、各操作に遅延が発生します。暗号化やランダムなバイト生成を多用するコンポーネントでは、スループットとパフォーマンスに違いが生じる可能性があります。