はじめに
S3は様々な用途で利用されていますが、どのような形式でデータが暗号化されているか意識したことはありますか?
結論から言うと、S3はデフォルトで暗号化設定をサポートしています。
とはいえ、どういった暗号化があって、どう使えばいいのかを理解しておくことは重要です。
この記事では、自分でコントロールした暗号化設定にできるように、それぞれの暗号化について解説していきます。
具体的な例も挙げながら利用シーンについても記載しています。
S3の暗号化について
暗号化といっても、保管時のデータの暗号化なのか、保管前の暗号化なのか、様々な暗号化用途があります。
以下にS3で利用できる暗号化方法をまとめました。
本記事で紹介する暗号化は以下になります。
暗号化方式 | 利用場所 | キーの管理者 | コスト | 特徴 |
---|---|---|---|---|
SSE-S3 | サーバーサイド | S3 (AWS管理) | 無料 | 簡単で手間がかからない |
SSE-KMS | サーバーサイド | AWS KMS | KMSコストが発生 | アクセス制御が細かく設定可能 |
SSE-C | サーバーサイド | ユーザー管理 | 無料 | ユーザーが完全にキーを管理 |
CSE-KMS | クライアントサイド | AWS KMS | KMSコストが発生 | KMSを利用したクライアント暗号化 |
CSE-C | クライアントサイド | ユーザー管理 | 無料 | AWSに依存しない暗号化を実現 |
SSL/TLS | データ転送時 | AWS提供 | 無料 | データ通信をHTTPSで暗号化 |
1. サーバサイドの暗号化(SSE:Server-Side Encryption)
S3がデータを暗号化し、暗号化された状態で保存する仕組みです。
S3がオブジェクトを保存する前に暗号化し、取り出す際に復号化する機能を提供します。
名称 | 説明 | 特徴 |
---|---|---|
SSE-S3 (Amazon S3-Managed Keys) |
Amazon S3が暗号化キーを管理。 キー管理の手間が不要。 |
暗号化と復号化は完全にS3が管理 追加コストなし |
SSE-KMS (AWS Key Management Service) |
AWS KMSが暗号化キーを管理。 キー管理やアクセス制御ポリシーを柔軟に設定可能。 |
暗号化キーの使用状況がログとして記録される KMSのコストが発生 |
SSE-C (Customer-Provided Keys) |
ユーザーが独自の暗号化キーを提供。 キーの管理は完全にユーザーの責任。 |
完全なカスタム制御が可能 キーを紛失するとデータ復元不可 |
1-1. SSE-S3 (Amazon S3-Managed Keys)
特徴
- AWSが暗号化キーの生成、管理、ローテーションを完全に管理。
- 暗号化と復号化は自動的に処理され、ユーザーの手間が最小限。
- 追加コストなし。
利用シーン
-
簡単に暗号化を導入したい場合
暗号化キーの管理や設定を最小限にしたい場合。 -
コストを抑えたい場合
KMS利用料金が発生せず、ストレージ料金のみ。 -
監査やキー制御が不要な場合
データ保護は必要だが、詳細な監査やアクセス制御は不要な場合。
適用例
- 非機密データ(例: バックアップデータ、ログファイル)の保存。
- 短期プロジェクトや小規模プロジェクトでの利用。
1-2. SSE-KMS (AWS Key Management Service)
特徴
- AWS KMSを利用して暗号化キーを管理。
- キーの使用履歴を監査ログとして記録可能。
- IAMポリシーを使用してキーの詳細なアクセス制御が可能。
利用シーン
-
高度なアクセス制御が必要な場合
特定のユーザーやアプリケーションごとにキーの使用を制限。 -
規制やコンプライアンス対応が求められる場合
GDPR、HIPAA、PCI DSSなどの要件を満たす必要がある場合。 -
AWSサービスとの統合が必要な場合
データ分析や他のAWSサービスと連携してデータを利用する場合。
適用例
- 金融機関での顧客データや取引記録の保存。
- データレイクでの機密データ保存と分析。
- コンプライアンス対応が求められる業務。
1-3. SSE-C (Customer-Provided Keys)
特徴
- 暗号化キーをユーザーが完全に管理。
- AWSはキーを保持せず、リクエストごとにユーザーがキーを提供。
- 暗号化と復号化はAWSが実行。
利用シーン
-
暗号化キーを完全に制御したい場合
独自のキー管理ポリシーやシステムを使用したい場合。 -
AWS外で暗号化キーを統一的に管理したい場合
社内ポリシーや法的要件によりAWS外でのキー保管が必要な場合。 -
特定のセキュリティ要件がある場合
AWSにキーを保管できない、またはしたくない場合。
適用例
- 社内独自のキー管理システムを利用する企業。
- 特定の法的または業務要件でAWS外のキー管理が必須の場合。
選択のポイント
-
SSE-S3
- 簡単・低コストで暗号化を導入したい場合に最適。
- 高度なアクセス制御や監査が不要なデータ向け。
-
SSE-KMS
- 高度なセキュリティ管理やAWSサービスとの統合が必要な場合に適している。
- コンプライアンス対応が必要なデータ、機密情報向け。
-
SSE-C
- 暗号化キーを完全に制御したいユーザー向け。
- AWS外でキーを管理する必要があるエンタープライズ環境に適している。
2. クライアントサイド暗号化(CSE:Client-Side Encryption)
S3にデータをアップロードする前に、クライアント側でデータを暗号化する方法です。
データは暗号化された状態でS3に保存され、AWSは暗号化キーを保持しません。復号化はクライアント側で実行されます。
名称 | 説明 | 特徴 |
---|---|---|
CSE-KMS (AWS Key Management Service) |
AWS KMSを使用してクライアント側でデータを暗号化し、 暗号化された状態でS3にアップロード。 |
KMSのアクセス制御を活用可能 コストが発生 |
CSE-C (Customer-Provided Keys) |
ユーザーが独自の暗号化キーを使用してデータを暗号化し、 暗号化された状態でS3にアップロード。 |
キー管理は完全にユーザーの責任 キーを紛失するとデータ復元不可 |
2-1. CSE-KMS (AWS Key Management Service)
特徴
- AWS KMSを利用してクライアント側で暗号化キーを管理。
- AWSが提供するKMSを利用するため、アクセス制御や監査ログ機能を利用可能。
- クライアントライブラリ(例: AWS SDK)がKMSを通じてキーを取得してデータを暗号化。
利用シーン
-
AWS KMSの管理機能を利用しつつ、クライアントサイドで暗号化したい場合
AWS KMSの高度なアクセス制御や監査ログ機能を活用。 -
S3を安全に使用したいが、暗号化キーの一部をAWSに依存しても良い場合
AWS KMSにキーを保管し、データ暗号化はクライアント側で実行。
適用例
- 高度なアクセス制御を維持しつつ、データをクライアントサイドで暗号化するシステム。
- クライアントアプリケーションで暗号化キーのセキュリティを強化したい場合。
2-2. CSE-C (Customer-Provided Keys)
特徴
- 暗号化キーをユーザーが完全に管理。
- AWSは暗号化キーを保持せず、クライアントアプリケーションが独自のキーでデータを暗号化。
- データを復号化するためには、ユーザーがキーを提供する必要がある。
利用シーン
-
完全なキー管理をユーザーが制御したい場合
AWSに暗号化キーを渡したくない、または外部キー管理システムを利用したい場合。 -
独自のセキュリティ要件がある場合
業務ポリシーや法的要件で、キーをAWS外部に保存する必要がある場合。
適用例
- 外部キー管理システム(例: HSM, 社内キー管理インフラ)を使用する場合。
- AWSを信用できない状況下でもデータをS3に保存したい場合。
CSEのメリットと注意点
メリット
-
高度なセキュリティ
- データは暗号化された状態でS3に保存され、AWSはキーにアクセスできません。
-
柔軟なキー管理
- KMSを使用するか、完全に独自のキー管理を行うかを選択可能。
注意点
-
キー管理の責任
- キーを紛失するとデータの復号化ができなくなる。
-
複雑な運用
- 特にCSE-Cでは、キー管理インフラの構築と運用が必要。
-
パフォーマンスへの影響
- クライアント側で暗号化と復号化を行うため、処理速度に影響が出る場合がある。
選択のポイント
-
CSE-KMS
- AWS KMSの管理機能を活用しつつ、クライアント側で暗号化を行いたい場合に最適。
- データ保護と運用負荷のバランスを取りたい場合。
-
CSE-C
- AWSにキーを保管したくない、またはAWS外部でのキー管理が必須な場合に適している。
- 高度なセキュリティ要件があるエンタープライズ環境向け。
3. (参考)転送中の暗号化
転送中の暗号化は、S3とクライアント間の通信を保護するために行われます。
AWSではSSL/TLS(HTTPS)プロトコルを使用して、通信内容を暗号化します。
名称 | 説明 | 特徴 |
---|---|---|
SSL/TLS | HTTPSプロトコルを使用してデータ転送時の暗号化を実現。 | 標準機能 AWSがデフォルトで提供 HTTPSを使用するだけで有効 |
AWS管理コンソールからの手動ダウンロード/アップロードやCLIでのダウンロード/アップロードはhttpsで通信が暗号化されています。
ただし、クライアントがS3へのアクセスURLで http:// を指定している場合、クライアントとS3間で暗号化をせずに通信してしまいます。
HTTPアクセスを防ぐためには、以下のバケットポリシーを利用してください。特に外部アクセスがある場合は、必ずHTTPSを強制する設定を推奨します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireSSL",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
5. まとめ
この記事ではS3の暗号化方法とその利用シーンについて解説しました。
利用シーンに合わせて適切な暗号化方式を選択し、安全なデータ管理を実現しましょう!