AWS S3(Simple Storage Service)にはいくつか暗号化の種類があります。何となく名前が似ているのでどれがどれだったかどれだったかわからなくなってしまうことはないでしょうか?
今回は3つの暗号化の種類について、わかりやすく簡単に解説していきます。
暗号化のオプション
まず、暗号化の2種類のオプションについて説明していきます。
- サーバー側の暗号化
- クライアント側の暗号化
ざっくりと違いを言うと、前者が「アップロードされたオブジェクトに対し、保存する前に暗号化し、ダウンロードされる前に復号化」、後者は「ユーザが自身で暗号化の面倒を見る」です。
セキュリティ要件が厳しい場合はクライアント側の暗号化を選択する必要がありますが、基本はサーバ側の暗号化を使うことが多いでしょう。
サーバ側の暗号化の種類
S3で利用可能なサーバ側の暗号化の種類は以下の4つになります。
- SSE-S3
Amazon S3 管理キーによるサーバー側暗号化。デフォルト設定。 - SSE-KMS
AWS Key Management Service (AWS KMS) キーを使用 - DSSE-KMS
AWS KMS キーを使用したデュアルレイヤーサーバー側暗号化 - SSE-C
顧客提供のキーを使用したサーバー側暗号化
次の項から一つずつ解説していきます。
SSE-S3
すべての S3 バケットにはデフォルトで暗号化が設定されています。
そのため、S3 バケットにアップロードされた新しいオブジェクトは自動的に暗号化されて保存されます。
そのデフォルトの暗号化として設定されているのが、Amazon S3 管理キーを使用したサーバー側の暗号化 (SSE-S3) になります。
特に指定がなければ、この暗号化設定を使うことが多いでしょう。
SSE-KMS
SSE-KMSは、AWS Key Management Service (AWS KMS) キーを使用したサーバー側の暗号化です。
AWS KMS は鍵を管理するためのサービスです。以下の記事もご参照ください。
AWS KMS(Key Management Service)とは? – 初心者向け簡単解説
AWS SSE-KMSを利用するユースケースとしては、以下のようなものがあるでしょう。
- より高度なセキュリティ制御が必要な場合
- 重要なデータを保護する必要がある場合
- 暗号化関連のコンプライアンス要件が必要な場合
注意事項としては、 KMSキーとバケットが同じリージョンにある必要があることと、 KMS使用の追加料金がかかるため、特に要件がない場合はSSE-S3を利用することが多いでしょう。
DSSE-KMS
DSSE-KMSとは、AWS Key Management Service (AWS KMS) キーを使用したデュアルレイヤーのサーバー側暗号化です。
この方式を利用すると、オブジェクトがS3 にアップロードされるときに2層の暗号化がなされます。
SSE-KMSとの違いを簡単に説明すると、DSSE-KMSの方が「デュアル」の名前の通り、2つの違う鍵で2回暗号化されるため、より強固になります。
注意事項としては、 SSE-KMSと同様に、KMSキーとバケットが同じリージョンにある必要があることと、 KMS使用の追加料金がかかります。更にバケットキーではサポートされていないので注意しましょう。
SSE-C
SSE-Cは、顧客管理のキーによるサーバー側の暗号化です。
独自の暗号化キーを使用する必要がある場合に採用すると良いでしょう。
まず、オブジェクトがアップロードされると、指定された暗号化キーを使用して、AES-256暗号化が適用されます。
その後、暗号化キーはメモリから削除されます。
オブジェクトをダウンロードするときは、同じ暗号化キーを指定する必要があります。
そのキーが一致することが確認されると、オブジェクトが復号化されダウンロードが可能になります。
なお、上記の説明の通り、暗号化キーは削除され保存されませんが、リクエストが正しいものかを検証するために、ハッシュベースのメッセージ認証コード (HMAC) 値については保存されます。あくまで検証するためのもので、HMAC 値だけで復号化することはできないため、暗号化キーの管理は厳格に行いましょう。
まとめ
簡単にS3のサーバ側の暗号化についてまとめてみました。
SSE-S3、SSE-KMS、DSSE-KMS、SSE-C、関わるプロジェクトによって要件は異なるでしょう。
最適な方式を選べるようにしましょう。
また、資格試験でもよく出題される範囲なので、勉強中の方のお役に立てれば幸いです。