Amazon S3の暗号化方式一覧についてまとめてみた

スポンサーリンク
Security Specialty
スポンサーリンク

はじめに

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が暗号化キーの生成、管理、ローテーションを完全に管理。
  • 暗号化と復号化は自動的に処理され、ユーザーの手間が最小限。
  • 追加コストなし。

利用シーン

  1. 簡単に暗号化を導入したい場合
    暗号化キーの管理や設定を最小限にしたい場合。
  2. コストを抑えたい場合
    KMS利用料金が発生せず、ストレージ料金のみ。
  3. 監査やキー制御が不要な場合
    データ保護は必要だが、詳細な監査やアクセス制御は不要な場合。

適用例

  • 非機密データ(例: バックアップデータ、ログファイル)の保存。
  • 短期プロジェクトや小規模プロジェクトでの利用。

1-2. SSE-KMS (AWS Key Management Service)

特徴

  • AWS KMSを利用して暗号化キーを管理。
  • キーの使用履歴を監査ログとして記録可能。
  • IAMポリシーを使用してキーの詳細なアクセス制御が可能。

利用シーン

  1. 高度なアクセス制御が必要な場合
    特定のユーザーやアプリケーションごとにキーの使用を制限。
  2. 規制やコンプライアンス対応が求められる場合
    GDPR、HIPAA、PCI DSSなどの要件を満たす必要がある場合。
  3. AWSサービスとの統合が必要な場合
    データ分析や他のAWSサービスと連携してデータを利用する場合。

適用例

  • 金融機関での顧客データや取引記録の保存。
  • データレイクでの機密データ保存と分析。
  • コンプライアンス対応が求められる業務。

1-3. SSE-C (Customer-Provided Keys)

特徴

  • 暗号化キーをユーザーが完全に管理。
  • AWSはキーを保持せず、リクエストごとにユーザーがキーを提供。
  • 暗号化と復号化はAWSが実行。

利用シーン

  1. 暗号化キーを完全に制御したい場合
    独自のキー管理ポリシーやシステムを使用したい場合。
  2. AWS外で暗号化キーを統一的に管理したい場合
    社内ポリシーや法的要件によりAWS外でのキー保管が必要な場合。
  3. 特定のセキュリティ要件がある場合
    AWSにキーを保管できない、またはしたくない場合。

適用例

  • 社内独自のキー管理システムを利用する企業。
  • 特定の法的または業務要件でAWS外のキー管理が必須の場合。

選択のポイント

  1. SSE-S3
    • 簡単・低コストで暗号化を導入したい場合に最適。
    • 高度なアクセス制御や監査が不要なデータ向け。
  2. SSE-KMS
    • 高度なセキュリティ管理やAWSサービスとの統合が必要な場合に適している。
    • コンプライアンス対応が必要なデータ、機密情報向け。
  3. 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を通じてキーを取得してデータを暗号化。

利用シーン

  1. AWS KMSの管理機能を利用しつつ、クライアントサイドで暗号化したい場合
    AWS KMSの高度なアクセス制御や監査ログ機能を活用。
  2. S3を安全に使用したいが、暗号化キーの一部をAWSに依存しても良い場合
    AWS KMSにキーを保管し、データ暗号化はクライアント側で実行。

適用例

  • 高度なアクセス制御を維持しつつ、データをクライアントサイドで暗号化するシステム。
  • クライアントアプリケーションで暗号化キーのセキュリティを強化したい場合。

2-2. CSE-C (Customer-Provided Keys)

特徴

  • 暗号化キーをユーザーが完全に管理。
  • AWSは暗号化キーを保持せず、クライアントアプリケーションが独自のキーでデータを暗号化。
  • データを復号化するためには、ユーザーがキーを提供する必要がある。

利用シーン

  1. 完全なキー管理をユーザーが制御したい場合
    AWSに暗号化キーを渡したくない、または外部キー管理システムを利用したい場合。
  2. 独自のセキュリティ要件がある場合
    業務ポリシーや法的要件で、キーをAWS外部に保存する必要がある場合。

適用例

  • 外部キー管理システム(例: HSM, 社内キー管理インフラ)を使用する場合。
  • AWSを信用できない状況下でもデータをS3に保存したい場合。

CSEのメリットと注意点

メリット

  1. 高度なセキュリティ
    • データは暗号化された状態でS3に保存され、AWSはキーにアクセスできません。
  2. 柔軟なキー管理
    • KMSを使用するか、完全に独自のキー管理を行うかを選択可能。

注意点

  1. キー管理の責任
    • キーを紛失するとデータの復号化ができなくなる。
  2. 複雑な運用
    • 特にCSE-Cでは、キー管理インフラの構築と運用が必要。
  3. パフォーマンスへの影響
    • クライアント側で暗号化と復号化を行うため、処理速度に影響が出る場合がある。

選択のポイント

  1. CSE-KMS
    • AWS KMSの管理機能を活用しつつ、クライアント側で暗号化を行いたい場合に最適。
    • データ保護と運用負荷のバランスを取りたい場合。
  2. 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の暗号化方法とその利用シーンについて解説しました。

利用シーンに合わせて適切な暗号化方式を選択し、安全なデータ管理を実現しましょう!

タイトルとURLをコピーしました