Overview
クラウド暗号化(Cloud Encryption)とは、クラウド環境に保存されるデータや通信中のデータを暗号化によって保護する技術・手法の総称です。クラウドサービスでは、データがユーザーの物理的な管理下を離れて第三者のインフラストラクチャ上に保存されるため、暗号化はデータの機密性を確保する最後の砦として極めて重要な役割を果たします。仮にクラウドプロバイダーの内部者が不正にデータにアクセスしたり、データが漏洩した場合でも、適切な暗号化が施されていればデータの内容を読み取ることはできません。
クラウド暗号化は、保存データの暗号化(Encryption at Rest)、転送中データの暗号化(Encryption in Transit)、そして近年注目される利用中データの暗号化(Encryption in Use)の3つの状態をカバーする必要があります。各クラウドプロバイダーはこれらの暗号化機能を標準サービスとして提供していますが、暗号化の有効性を決定づけるのは「誰が暗号鍵を管理するか」という鍵管理(Key Management)の問題です。
鍵管理サービス(KMS:Key Management Service)は、暗号鍵のライフサイクル全体(生成・保管・配布・ローテーション・廃棄)を一元的に管理するサービスです。AWS KMS、Azure Key Vault、Google Cloud KMSなど、各クラウドプロバイダーがマネージドKMSを提供していますが、より高いセキュリティ要件に対応するため、BYOK(Bring Your Own Key)やHYOK(Hold Your Own Key)といった顧客管理鍵方式も広く採用されています。
Details
暗号化の3つの状態
保存データの暗号化(Encryption at Rest)は、ストレージ(S3バケット、ブロックストレージ、データベースなど)に格納されたデータを暗号化します。AES-256が標準的に使用され、多くのクラウドサービスではデフォルトで有効化されています。ディスクレベル暗号化(フルディスク暗号化)とオブジェクトレベル暗号化(ファイル単位)の2つのアプローチがあります。
転送中データの暗号化(Encryption in Transit)は、ネットワーク上を移動するデータをTLS/SSLで暗号化します。クラウドサービスへのAPIアクセスは通常HTTPS(TLS 1.2以上)が必須ですが、クラウド内部のサービス間通信も暗号化することが推奨されます。
利用中データの暗号化(Encryption in Use)は、データがメモリ上で処理される間も暗号化された状態を維持する技術です。Intel SGX、AMD SEV、AWS Nitro Enclavesなどのコンフィデンシャルコンピューティング技術により、実行中のワークロードのメモリを暗号化し、クラウドプロバイダーの管理者からもデータを保護します。
エンベロープ暗号化
エンベロープ暗号化(Envelope Encryption)は、クラウドKMSで広く採用されている鍵管理手法です。データはデータ暗号化鍵(DEK:Data Encryption Key)で暗号化され、DEK自体はマスターキー(CMK:Customer Master Key)で暗号化されます。この二層構造により、大量のデータを効率的に暗号化しつつ、鍵のローテーションや権限管理を柔軟に行えます。
DEKはデータの近くで生成・使用され、暗号化されたDEK(ラップされたキー)がデータとともに保存されます。実際のデータ復号時には、KMSにラップされたDEKを送信して復号してもらい、得られた平文のDEKでデータを復号します。マスターキー自体がKMSの外に出ることはありません。
鍵管理モデルの比較
- プロバイダー管理鍵(SSE:Server-Side Encryption):クラウドプロバイダーが鍵の生成・管理・ローテーションをすべて自動的に行う方式。最も簡単だが、プロバイダーへの信頼が前提
- 顧客管理鍵(CMK:Customer Managed Keys):顧客がKMS上で鍵を作成・管理し、アクセスポリシーやローテーション周期を制御する方式。鍵の使用ログが監査可能
- BYOK(Bring Your Own Key):顧客がオンプレミスのHSM(Hardware Security Module)で生成した鍵をクラウドKMSにインポートする方式。鍵の生成を自社で制御
- HYOK(Hold Your Own Key):暗号鍵を完全に自社で保持し、クラウドプロバイダーにはアクセスさせない方式。最も高いセキュリティだが、運用の複雑性が大幅に増加
- 外部鍵管理(EKM:External Key Manager):サードパーティの鍵管理サービスと連携し、マルチクラウド環境で統一的な鍵管理を実現する方式
クライアントサイド暗号化 vs サーバーサイド暗号化
サーバーサイド暗号化(SSE)では、データがクラウドストレージに書き込まれる際にサーバー側で自動的に暗号化されます。運用が容易ですが、クラウドプロバイダーがデータを復号できる可能性があります。クライアントサイド暗号化(CSE)では、データをクラウドに送信する前にクライアント側で暗号化するため、クラウドプロバイダーは暗号化されたデータのみを取り扱います。
CSEはより高いセキュリティを提供しますが、検索やデータ処理がサーバー側で行えないため、利便性とのトレードオフが生じます。用途に応じてSSEとCSEを使い分けることが推奨されます。
HSM(ハードウェアセキュリティモジュール)
HSMは、暗号鍵の生成・保管・暗号処理を物理的に保護された専用ハードウェア内で行うデバイスです。AWS CloudHSM、Azure Dedicated HSMなどのクラウドHSMサービスは、FIPS 140-2 Level 3認定を取得したHSMを専有で利用でき、金融機関や医療機関などの高い規制要件に対応します。鍵は物理的にHSM内に存在し、HSMの外部に出ることがないため、最も高いレベルの鍵保護を実現します。
Security Measures
- 01すべてのデータ状態で暗号化を有効化:保存データ(At Rest)、転送中データ(In Transit)、可能であれば利用中データ(In Use)のすべてにおいて暗号化を有効化してください。特にオブジェクトストレージやデータベースでは、デフォルト暗号化をアカウントレベルで強制し、暗号化されていないデータの保存を防止しましょう。
- 02顧客管理鍵(CMK)の積極的な活用:プロバイダー管理鍵ではなく、顧客管理鍵を使用してアクセスポリシーの制御と監査ログの取得を行ってください。鍵のアクセスポリシーは最小権限の原則に基づき、鍵を使用できるIAMエンティティを必要最小限に制限しましょう。
- 03定期的な鍵のローテーション:暗号鍵は年に1回以上の自動ローテーションを設定し、鍵の有効期間を制限してください。KMSの自動ローテーション機能を活用すれば、アプリケーション側の変更なしに鍵の更新が可能です。セキュリティインシデント発生時には即座に臨時ローテーションを実施してください。
- 04鍵の使用状況の監視と監査:KMSの操作ログ(鍵の作成・使用・削除・ポリシー変更)をCloudTrail等の監査サービスに連携し、異常な鍵使用パターン(通常とは異なるリージョンからのアクセス、大量の復号リクエスト等)をリアルタイムで検知するアラートを設定しましょう。
- 05鍵の削除保護と復旧計画:マスターキーの誤削除を防ぐため、削除保護(Deletion Protection)を有効化し、鍵の削除には待機期間(7~30日)を設定してください。また、鍵のバックアップと復旧手順を文書化し、定期的にリカバリテストを実施しましょう。
- 06マルチクラウド環境での統一鍵管理:複数のクラウドプロバイダーを利用する場合は、外部鍵管理サービス(EKM)やHashiCorp Vaultなどのサードパーティツールを活用して、暗号鍵の一元管理を実現してください。プロバイダーごとに異なる鍵管理を行うと、運用の複雑性が増し、設定ミスによる鍵の漏洩リスクが高まります。
Incidents
📋 Capital One S3バケット暗号化鍵の不正利用事件(2019年)
2019年、Capital Oneで約1億600万人の顧客情報が流出した事件では、攻撃者がSSRF(Server-Side Request Forgery)を悪用してIAMロールの一時認証情報を取得し、その権限でKMSの暗号鍵を使用してS3バケット内の暗号化データを復号しました。データは暗号化されていたものの、IAMロールに暗号鍵の使用権限が付与されていたため、認証情報の窃取がそのまま暗号化データへのアクセスにつながりました。
この事件は、暗号化だけでは十分なセキュリティを確保できず、鍵のアクセスポリシーとIAM権限の厳格な管理が不可欠であることを示しました。鍵の使用権限は最小権限の原則に基づき、必要なサービスのみに限定すべきです。
📋 暗号鍵のハードコーディングによるGitHub経由の情報漏洩
複数の企業において、開発者がクラウドストレージの暗号鍵やAPIキーをソースコードにハードコーディングし、そのコードをGitHubのパブリックリポジトリに誤ってプッシュする事件が繰り返し発生しています。自動スキャンツールを使用した攻撃者がこれらの鍵を即座に発見し、暗号化されたクラウドデータへの不正アクセスを試みています。
GitHubのシークレットスキャン機能やgit-secretsなどのプリコミットフックを活用して鍵の漏洩を防止するとともに、暗号鍵はKMSやシークレットマネージャーに保管し、ソースコードには絶対に含めない運用を徹底する必要があります。
📋 Adobe Creative Cloud暗号化不備による情報流出(2019年)
2019年、Adobeが運用するElasticsearchサーバーの設定ミスにより、約750万件のCreative Cloudユーザーのアカウント情報がインターネット上に公開される事件が発生しました。公開されたデータには、メールアドレス、アカウント作成日、利用中の製品情報などが含まれていましたが、これらのデータに対して適切な暗号化が施されていませんでした。
この事件は、クラウドデータベースに保存するすべてのデータに対して暗号化を適用し、たとえアクセス制御に不備があってもデータの機密性を維持する「多層防御」の考え方の重要性を示しています。暗号化はアクセス制御の代替ではなく、追加の防御層として機能すべきです。