メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

暗号化されたデータを Amazon S3 にアップロードする

Amazon S3 は、サーバー側の暗号化とクライアント側の暗号化のどちらもサポートします。このトピックでは、サーバー側暗号化とクライアント側暗号化の違いを説明し、Amazon Redshift でクライアント側暗号化を使用するステップを紹介します。サーバー側暗号化は Amazon Redshift に対して透過的です。

サーバー側の暗号化

サーバー側の暗号化は、保管時のデータ暗号化に関するものです。つまり、Amazon S3 は、アップロードするデータを暗号化し、お客様がデータにアクセスするときに復号します。COPY コマンドを使用してテーブルをロードする場合には、Amazon S3 にあるサーバー側で暗号化したオブジェクトや暗号化していないオブジェクトからロードする場合との間に差はありません。 のサーバー側の暗号化の詳細については、Amazon Simple Storage Service 開発者ガイド の「サーバー側の暗号化を使用したデータの保護」を参照してください。

クライアント側の暗号化

クライアント側の暗号化の場合、データの暗号化、暗号化キー、および関連ツールを管理するのはクライアントアプリケーションです。クライアント側の暗号化を使って Amazon S3 バケットにデータをアップロードし、その後、COPY コマンド (ENCRYPTED オプション) とプライベート暗号化キーを使ってデータをより安全にロードすることができます。

エンベロープ暗号化を使い、データを暗号化します。エンベロープ暗号化を使うと、アプリケーションですべての暗号化が排他的に処理されます。プライベート暗号化キーと暗号化されていないデータは AWS には送信されません。したがって、暗号化キーを安全に管理することが重要です。暗号化キーをなくした場合、データを復号できません。AWS から暗号化キーを復元することはできません。エンベロープ暗号化では、非同期キーによるキー管理によりセキュリティを高めながら、高速の同期暗号化のパフォーマンスを実現します。Amazon S3 暗号化クライアントはデータを暗号化するためにワンタイム使用の同期キー (エンベロープ同期キー) を生成します。その後、そのキーはマスターキーにより暗号化され、データとともに Amazon S3 に保存されます。Amazon Redshift がロード時にデータにアクセスするとき、暗号化された同期キーが取得され、本物のキーで復号され、その後、データが復号されます。

Amazon Redshift で Amazon S3 のクライアント側暗号化データを利用する方法と、次を使用する場合の追加の要件については、Amazon Simple Storage Service 開発者ガイド の「クライアント側の暗号化を使用したデータの保護」を参照してください。

  • 対称暗号化 – AWS SDK for Java AmazonS3EncryptionClient クラスは、対称キー暗号化に基づく前述のエンベロープ暗号化を使用します。このクラスを使用して、Amazon S3 クライアントを作成し、クライアント側暗号化データをアップロードします。

  • 256 ビット AES マスター対称キー - マスターキーでエンベロープキーを暗号化します。マスターキーを AmazonS3EncryptionClient クラスのインスタンスに渡します。このキーは、Amazon Redshift にデータをコピーするときに必要になるので、キーを保存する必要があります。

  • 暗号化されたエンベロープキーを保存するオブジェクトメタデータ – Amazon S3 のデフォルトでは、エンベロープキーは AmazonS3EncryptionClient クラスのオブジェクトメタデータとして保存されます。オブジェクトメタデータとして保存された暗号化されたエンベロープキーは、復号プロセスで使用されます。

注記

初めて暗号化 API を使用するときに暗号の暗号化エラーメッセージが表示される場合、使用する JDK のバージョンに、暗号化/復号変換に使用する最大キー長を 128 ビットに制限する Java Cryptography Extension (JCE) 管轄ポリシーファイルが含まれている可能性があります。この問題の対処方法については、Amazon Simple Storage Service 開発者ガイド の「Specifying Client-Side Encryption Using the AWS SDK for Java」を参照してください。

クライアント側で暗号化したファイルを COPY コマンドを使用して Amazon Redshift テーブルにロードする方法については、「暗号化されたデータファイルを Amazon S3 からロードする」を参照してください。

例: クライアント側暗号化データのアップロード

AWS SDK for Java を使用してクライアント側暗号化データをアップロードする方法の例については、Amazon Simple Storage Service 開発者ガイド の「例 1: クライアント側の対称マスターキーを使用したファイルの暗号化とアップロード」を参照してください。

この例は、データを Amazon Redshift にロードできるようにクライアント側暗号化時に選択するオプションを示しています。具体的には、メタデータを使用して暗号化されたエンベロープキーを格納する方法と、256 ビット AES マスター対称キーを使用する方法です。

この例では、AWS SDK for Java を使用して 256 ビット AES 対称マスターキーを作成し、ファイルに保存するコード例を示します。次に、この例ではサンプルデータを S3 暗号化クライアントを使用してクライアント側で最初に暗号化し、オブジェクトを Amazon S3 にアップロードします。この例ではオブジェクトもダウンロードして、データが同じであることを確認します。