概要
S3ではオブジェクトを暗号化して安全に保存することが可能。
暗号化する場所とキーによって使い分けを行う。
暗号化の場所
暗号化の場所は以下の2箇所で実施できる
- クライアントサイド暗号化(CSE:Client Side Encryption)
- サーバーサイド(SSE:Server Side Encryption)
以下、それぞれを詳しく整理する。
クライアントサイド暗号化
実施方法
オブジェクトをS3へ保存する際に暗号化を行う。
アップロードをリクエストする際にパラメータとして指定して実施する。
キーの種類
キーは自由に選択できる。
オンプレミスのキー、AWS KMSので管理するキーでも暗号化が可能。
サーバーサイド暗号化
実施方法
オブジェクトをS3へアップロードする前に暗号化を行う。
EC2やLambda、オンプレミスのアプリケーションなどで処理にて暗号化を実施する実施する。
キーの種類
以下の3種類がある。
キー | 管理場所 | 説明 | 操作 | 使用時 |
---|---|---|---|---|
SSE-S3 | S3 | オブジェクトにアクセスできる権限があればキーへのアクセスは可能。 | - s3:PutObject :アップロード- s3:GetObject :複合されたオブジェクトがダウンロード可能 |
オブジェクトが実際に保存されているディスク上で暗号化されていれば良い場合 |
SSE-KMS | AWS KMSのCMK(Customer Master Key) | ローテーション、無効化、削除などの操作が可能。 CMKにアクセスできるユーザーは以下で制御ができる。 - リソースベースのキーポリシー - AIMポリシー |
アップロード時には以下の制御が必要 - s3:PutObject - kms:GenerateDataKey の許可ダウンロード時には以下の制御が必要 - s3:GetObject - kms:Decrypt の許可 |
暗号化キーの管理、制御が必要な場合 |
SSE-C | オンプレミス | オンプレミスで生成したキーを使用してS3が暗号化を実施 | - アップロード時:リクエストで暗号化に使用するキーを指定 - ダウンロード時:リクエストで暗号化に使用したキーを指定 |
- 組織のポリシーで独自に生成したキーを使用する必要がある - AWSには暗号化キーを保存したくない場合 |