S3でのデータ保護は2パターン
- 転送時(S3との間での送受信)
- SSLを使用
-
クライアント側で暗号化
- AWS KMSで管理されたCMK(カスタマーマスターキー)を使用
- KMS CMK IDを使用
- クライアント側のマスターキーを使用
- AWS KMSで管理されたCMK(カスタマーマスターキー)を使用
- 保管時(S3データセンター内のディスクに格納されている時)
- S3で管理されたキーによるサーバー側の暗号化SSE-S3
- キーが定期的に更新されるマスターキーで暗号化
- AES-256を使用して暗号化
- オブジェクトデータのみが暗号化。オブジェクトメタデータは暗号化されない
- x-amz-server-side-encryptionというリクエストヘッダーを使用
- KMSで管理されたキーによるサーバー側の暗号化SSE-KMS
- SSE-S3と同様だが下記の利点がある
- エンベロープキーを使用するための個別アクセス制限がある。
エンベロープキー: データの暗号化キーを保護するキー - いつ、誰によってキーが使用されたか監査証跡も提供されている
- 暗号化キーを自分で作成し管理したり、ユーザー、サービス、リージョンごとに一意のデフォルトキーを使用できる
- エンベロープキーを使用するための個別アクセス制限がある。
- SSE-S3と同様だが下記の利点がある
- 自前で用意した暗号化キーによるサーバー側の暗号化SSE-C
- S3側でAES-256を使用し暗号化される
- S3側で暗号化キーを保存しない。代わりにランダムなSALT値を付加したHMAC値を保存する。
- httpsを使用する必要がある
- レスポンスのETagはオブジェクトデータのMD5ではない
- ETag(エンティティタグ): レスポンスヘッダの1つ。キャッシュの有効性確認の手段の1つ
- 使用した暗号化キーと暗号化したオブジェクトのマッピングはクライアント側で行う
- バージョニングが有効時、各バージョンに独自の暗号化キーを使用出来る。
- コンソールでオブジェクトをアップロードした場合は使えない。またSSE-Cで保存したオブジェクトの更新をコンソールですることは出来ない。
- S3で管理されたキーによるサーバー側の暗号化SSE-S3
SSE = Server Side Encryption
バケット内オブジェクトを一覧表示するときに、リストAPIは暗号化されていても表示する