web-dev-qa-db-ja.com

個別の顧客のデータを個別の鍵で暗号化する方が安全ですか?

AWS S3バケットなどのクラウドベースのファイルストレージに複数の顧客のデータを保存し、AWS KMSなどの暗号化サービスを使用して保存時の暗号化を行う場合、各顧客のデータを個別のバケットに保存し、顧客ごとに個別の暗号化キーを使用することで、セキュリティが強化されますか?

または、同じ暗号化キーですべての顧客データを暗号化するのと同じくらい安全ですか(もちろん、キーが定期的にローテーションされる場合)。

3
CFL_Jeff

残念ながら、答えは「場合によります」です。

ただし、最初に、KMSキーとバケットが相互に独立していること、1つのKMSキー(CMKと呼ばれる)を複数のバケットに関連付け、1つのバケットに複数のCMKで暗号化されたオブジェクトを含めることができることを明確にする必要があります。

2つ目は、KMSとS3が緊密に統合されているため、実際のアクセス制御は、キーの付与またはIAM権限のみです(つまり、S3で暗号化されたオブジェクトを取得するには、IAMロールにs3:GetObjectandkms:decrypt)オブジェクトのキーマテリアルまたは暗号化された暗号文を取得して、AWSの外部で復号化/暗号化を実行する方法はありません。

さて、単一またはマルチキー戦略をより適切にする要因は何ですか?

このデータを手動で取得するために保存している場合、それらを別のバケットに保持することは完全に理にかなっています。バケットは無料です。異なるバケットを異なるバケットポリシーで保護して、特定のユーザー/ロールへのアクセスを制限できます。そこから、各バケットに専用のCMKを作成し、顧客間のデータをさらに分離することはそれほど複雑ではありません。

複数のアプリケーション(顧客ごとに1つ)がアクセスできるようにデータを格納している場合は、顧客ごとに別々のバケットとCMKを使用することも適切なアプローチです。バケットとCMKの両方を分離することで、各顧客のデータを互いに分離できますが、さらに重要なことに、アプリケーションも分離したままにします。

このデータを1つのアプリケーションでアクセスできるように保存している場合、複数のバケットを保持するとオーバーヘッドが増加します。定義上、そのアプリケーションはすべてのCMKとすべてのバケットへのアクセスを必要とし、アプリケーションの侵害はそれらすべてを侵害します。このシナリオでは、マルチCMKはお勧めしません。バケットを維持するための追加のオーバーヘッドがもたらすメリットはほとんどありません。

nlessアプリケーションは、ログイン時にさまざまなユーザーにさまざまなIAMロールを付与します。ほとんどのアプリはユーザーごとのIAMロールではなく、アプリケーションレベルのIAMロールを持っているため、これはまれです。ただし、これを実行してから、1つのバケットを異なるKMSキーで暗号化し、個々のIAMロールにキーグラントを提供することは、完全に理にかなっています。これはかなり洗練された領域であり、あなたのアプリがすでにこれをしているなら、あなたはこの質問をしないでしょう:)

3
keithRozario

個別のキーを支持する1つの議論:将来のある時点で、アプリにSQLInjectionまたはサーバー側のリクエストフォージェリ(SSRF)の脆弱性があり、CustomerAとしてログインしたユーザーが通常のアクセス制御ルールをバイパスして所属するデータをフェッチできるようにするCustomerBに。

すべての顧客が同じキーを使用する場合、アプリケーションレイヤーサーバーはUIを介して問題なく復号化し、それを提供します。ただし、各顧客が独自のキーを持っている場合、サーバーはCustomerAのキーを使用してCustomerBのデータを復号化しようとし、復号化エラーをスローします。それは徹底的な防御の勝利でしょう。


一般に、顧客ごとの暗号化キーを使用してもあまり効果はありませんが(すべてのキーを同じ場所に保存する場合など)、お尻を節約できる特定のケースがあります。

4
Mike Ounsworth

私見、あなたは費用/便益とリスク/軽減の観点から全体を調べるべきです。

管理されていないストレージにデータを保存するときは、暗号化された形式で保存します。 OK:

  • リスクは、誰か(おそらくホスティングサービスのスタッフ)がデータにアクセスできることです。
  • 緩和策はデータを暗号化することです
  • コストは、暗号化を実装し、サーバーに暗号化キーを維持することです
  • 利点は、キーがないとデータを読み取れないことです

クライアントごとに1つのキーを使用することを検討します。軽減したい前のシナリオでカバーされていないリスクは何ですか?誰かが1つのキーを盗むことができましたが、それらはおそらく同じ方法で同じ場所に格納されますが、すべてのキーを盗むことはできませんか?攻撃者のタスクを強化したい場合は、キーの保存とアクセスにさまざまな方法を使用する必要があります。これは、開発と保守に多大なコストがかかることになります。別のリスクを特定していない限り、ここでそれが価値があるかどうかは不明です。

一般的に言えば、クライアントごとに異なるキーを使用することが一般的に使用されますキーがクライアント側で所有されている場合。別の言い方をすると、サーバープラットフォームの管理者に対してもクライアントデータを保護する必要がある場合です。これには複雑なコストがかかりますが、機密性の高いデータには必要です。

私のアドバイスだけですが、ランダムセキュリティ技術を使用するだけではなく、脅威/リスク/緩和の観点から考えてください。

1
Serge Ballesta