🦔

S3のデータの暗号化

2022/03/06に公開

S3のデータを暗号化する方法についてまとめました。
大きく分けてデータをS3で暗号化して保存するサーバ側の暗号化と、あらかじめ暗号化してデータをS3に保存するクライアント側の暗号化があります。前者の暗号化についてはSSE-XXXという名前で呼ばれますが、SSEとは「Server Side Encryption」の略です。

SSE-S3

S3側で管理するキーを使って暗号化を行います。
オブジェクトを作成時にAWSのコンソール上で暗号化の設定をすることができます。

オブジェクトを作成した後からでも暗号化の変更をすることが可能です。

SSE-KMS

AWS KMSで作成したキーを使って暗号化を行います。AWS KMS Keyを使用するための追加料金が発生します。
SSE-KMSもオブジェクト作成時にAWSのコンソール上で暗号化の設定をすることができますが、オブジェクトを作成した後からでも暗号化の設定をすることもできます。

AWS KMS Keyを指定時に、バケットキーの有効化をすることが可能です。これを使うことでAWS KMSへのリクエストを減らしてコスト削減を行うことができます。
S3バケットキーがない場合、S3は暗号化のたびに各オブジェクトへのリクエストが行われるたびにAWS KMSへリクエストを行います。S3バケットキーを作ることで、AWS KMSでバケットレベルの暗号化キーが作成され、KMSへのトラフィックを減らすことができます。

SSE-S3とは違い、ユーザ側で独自の暗号化キーを利用することが可能です。また、AWS KMSのキー管理のサービスを使えるため、暗号化キーを一元管理ができたり、暗号化キーの使用方法をポリシーで制御することができます。

SSE-C

ユーザが指定したキーを使って暗号化を行います。S3は指定したキーでオブジェクトを作成する時の暗号化と、オブジェクトにアクセスした時の復号化を実施します。ユーザ側で暗号化、復号化のプログラムを書く必要はありません。
AWSのコンソール上でSSE-Cを指定してオブジェクトを作成したり、アクセスすることはできません。S3のAPIを使って、リクエストヘッダーで暗号化キーを指定します。

SSE-KMSと同様に、ユーザ側で独自の暗号化キーを利用することが可能ですが、暗号化キーの管理もユーザ側で行う必要があります。

クライアントサイド暗号化(CSE)

S3にデータを渡すときにユーザ側で暗号化する方法です。S3ではデータの暗号化、復号化は実施しません。
クライアント側での暗号化方法は、AWS KMSの暗号化キーを使う方法や、アプリケーション内のキーを使う方法が考えられます。

Discussion