クラウドストレージのセキュリティとデータ漏えいリスク
設定ミスのあるS3バケット、Azure Blobコンテナー、GCSバケットがデータ漏えいにつながる仕組みと、バケットポリシーやアクセス制御を適用する方法を学びます。
「クラウドストレージのセキュリティとデータ漏えいリスク」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。
クラウドオブジェクトストレージの基礎
クラウドオブジェクトストレージであるAWS S3、Azure Blob Storage、Google Cloud Storage (GCS)は、ファイルをオブジェクトとして、バケットまたはコンテナと呼ばれるフラットな名前空間に保存します。従来のファイルシステムとは異なり、権限はファイルシステムのACLではなく、バケットとオブジェクトに関連付けられたポリシーによって制御されます。オブジェクトストレージは大規模なデータに適していますが、1つのバケットの設定ミスによってテラバイト単位の機密データがパブリックインターネットに公開される可能性があるため、権限を慎重に設定する必要があります。
パブリックバケットの設定ミス
クラウドストレージで最も一般的な脆弱性は、パブリックにアクセス可能なバケットです。これは、アクセスが匿名の読み取り(または書き込み)を許可するストレージバケットを指します。この設定ミスは、Verizon(1,400万件の顧客レコード)、FedEx(119,000件のパスポート)、Capital One(1億件のクレジットカード申請)など、数十件の大規模な侵害を引き起こしてきました。攻撃者は、自動スキャナーを使って、既知のAWSアカウント命名パターン全体から公開バケットを探します。そのため、設定ミスが存在すれば、発見は容易です。
# Check if S3 bucket is publicly accessible
aws s3api get-bucket-policy --bucket my-bucket
aws s3api get-bucket-acl --bucket my-bucket
# Block all public access (AWS recommended default)
aws s3api put-public-access-block \
--bucket my-bucket \
--public-access-block-configuration \
'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'バケットポリシーとACL
クラウドストレージでは、競合する可能性のある2種類のアクセス制御を使用します。バケットポリシーはバケットに関連付けられたJSONドキュメントで、どのプリンシパルがどのアクションを実行できるかを定義します。Access Control Lists (ACLs)は、オブジェクト単位で権限を付与する従来の仕組みです。AWSは、一貫性を保つためにACLを無効にしてバケットポリシーを使用することを推奨しています。両方が存在する場合は、最も許容範囲の広いポリシーが優先されます。つまり、バケットポリシーがアクセスを制限していても、過度に許容的なACLによってパブリックアクセスが許可される可能性があります。
# S3 bucket policy example — restrict to specific account
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': { 'AWS': 'arn:aws:iam::123456789012:root' },
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/*'
}]
}
# All other principals implicitly deniedオブジェクトストレージにおける保存時の暗号化
クラウドストレージプロバイダーは、保存中のオブジェクトに対してサーバーサイド暗号化を提供します。SSE-S3(AWS)は、AWSが管理する鍵を自動的に使用します。SSE-KMSはAWS Key Management Serviceで顧客が管理する鍵を使用し、より詳細な監査証跡(復号はすべてCloudTrailに記録されます)と鍵のローテーション制御を提供します。SSE-Cは顧客が提供する鍵を使用し、その鍵をAWSの完全な管理外で顧客自身が管理します。機密データには、顧客管理キーを使用するSSE-KMSが最も強力な制御とコンプライアンスの証拠を提供します。
# Enforce encryption on S3 bucket (deny unencrypted uploads)
{
'Effect': 'Deny',
'Principal': '*',
'Action': 's3:PutObject',
'Resource': 'arn:aws:s3:::my-secure-bucket/*',
'Condition': {
'StringNotEquals': {
's3:x-amz-server-side-encryption': 'aws:kms'
}
}
}転送中の暗号化
保存時に適切に暗号化されたデータでも、暗号化されていないチャネルで転送すると公開される可能性があります。すべてのクラウドストレージAPIには、HTTPS/TLS経由でのみアクセスしてください。S3では、バケットポリシーでaws:SecureTransport: falseのリクエストを拒否することにより、HTTPSを強制できます。事前署名付きURL(一時的な認証済みURLで、オブジェクトへの期間限定アクセスを許可するもの)は、必ずHTTPSを使用し、傍受された場合の公開期間を最小限にするため、有効期限を短く設定してください。
# S3 bucket policy — deny HTTP (require HTTPS)
{
'Effect': 'Deny',
'Principal': '*',
'Action': 's3:*',
'Resource': ['arn:aws:s3:::my-bucket', 'arn:aws:s3:::my-bucket/*'],
'Condition': {
'Bool': { 'aws:SecureTransport': 'false' }
}
}データ分類とストレージ階層
すべてのデータに同じレベルの保護が必要なわけではありません。機密データ(PII、PHI、財務記録)は、暗号化し、アクセスを制限したうえで、監査ログを有効にしたバケットに保存する必要があります。機密性の低いデータには、より広範なアクセスを許可してもかまいません。データ分類ラベルはオブジェクトの作成時に適用し、適切に設定されたストレージへデータを自動的に振り分けるために使用します。分類タグに基づいてデータをより安全なストレージへ自動的に移動するポリシーにより、機密データがセキュリティレベルの低いバケットに入る可能性を減らせます。
クラウドストレージアクセスのログ記録と監視
アクセスログは、事後に不正アクセスを検出し、コンプライアンス監査を行ううえで重要です。AWS S3 access logsとCloudTrail data event loggingは、オブジェクトレベルのAPI呼び出しをすべて記録します。つまり、誰がどのオブジェクトを、どのIPアドレスから、いつ要求したかを記録します。Azure Blobの診断ログとGCSの監査ログも同様の機能を提供します。これらのログがなければ、データ侵害が発覚した際にフォレンジック調査の証拠がなく、公開範囲を特定できません。
# Enable S3 access logging
aws s3api put-bucket-logging \
--bucket my-bucket \
--bucket-logging-status '{
"LoggingEnabled": {
"TargetBucket": "my-access-logs-bucket",
"TargetPrefix": "my-bucket-logs/"
}
}'アカウント間アクセスのリスク
クラウドストレージは、アカウント間(開発、ステージング、本番、第三者パートナー)で共有されることがよくあります。慎重に設定されていないアカウント間アクセスは、過剰な権限を付与する可能性があります。ベストプラクティスには、ワイルドカードのプリンシパルではなく、バケットポリシーで明示的なアカウントIDを使用すること、どの外部アカウントにもアクセスを付与できないようAWS Organizations SCPsで制限すること、アカウント間の権限付与を定期的に監査すること、アカウント間のデータ転送にはパブリックインターネットアクセスよりAWS PrivateLinkを優先することが含まれます。
バージョニングと削除保護
オブジェクトのバージョニングは、削除されたバージョンを含め、オブジェクトのすべてのバージョンを保持します。これにより、誤削除、ランサムウェアによるオブジェクトの暗号化、内部脅威から保護できます。重要なデータには、バージョニングとObject Lock(S3 Glacier Vault Lock相当)を組み合わせてください。これは、定義した保持期間中の削除や変更を防ぐWORM(Write Once, Read Many)ポリシーです。Object Lockは、金融業界や医療業界で、変更不可能な記録に関する規制要件を満たすために利用できます。
# Enable S3 versioning
aws s3api put-bucket-versioning \
--bucket my-critical-bucket \
--versioning-configuration Status=Enabled
# Enable Object Lock (immutable storage)
aws s3api put-object-lock-configuration \
--bucket my-critical-bucket \
--object-lock-configuration \
'ObjectLockEnabled=Enabled,Rule={DefaultRetention={Mode=COMPLIANCE,Days=365}}'CSPMによるストレージ設定ミスの検出
Cloud Security Posture Management (CSPM)ツールは、セキュリティベンチマークに照らしてクラウドストレージの設定を自動的にスキャンします。CSPMのチェック項目には、バケットがパブリックにアクセス可能になっていないか、保存時の暗号化が有効か、ログ記録が有効か、重要なバケットでバージョニングが有効か、バケットポリシーが過度に許容的でないか、といったものがあります。Prisma Cloud、Wiz、AWS Security HubなどのCSPMツールは、継続的なコンプライアンス監視を行い、攻撃者に先に発見される前に設定ドリフトを検知して警告します。
事前署名付きURLと一時アクセス
事前署名付きURLは、受信者がAWSの認証情報を持っていなくても、特定のオブジェクトへの期間限定アクセスを許可します。外部関係者とのファイル共有に便利です。セキュリティリスクには、意図した共有期間を超えて有効な、過度に長い有効期限のURL、受信者によって意図した対象者以外に転送されるURL、サーバーログにURL内のトークンが記録されることなどがあります。実用上可能な最短の有効期限を設定し、事前署名付きURLをログに記録しないようにしてください。
# Generate a pre-signed URL (expires in 3600 seconds)
aws s3 presign s3://my-bucket/report.pdf \
--expires-in 3600
# Returns a URL valid for 1 hour
# After expiry, the URL returns 403 Forbidden
# Best practice: shortest expiry viable for the use caseクイックチェック
このレッスンで扱ったCompTIA Security+ (SY0-701)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、パブリックバケットの設定ミスが、クラウドストレージにおけるデータ侵害の最も一般的な原因であること、SSE-KMSがCloudTrailによる監査ログを備えた最も強力な暗号化制御を提供すること、そしてオブジェクトのバージョニングとObject Lockの組み合わせが、重要なデータをランサムウェアや内部関係者による削除から保護することを学びました。次は、IAMロールとサービスアカウントを使ったクラウドIDについて学びます。
よくある質問
「クラウドストレージのセキュリティとデータ漏えいリスク」レッスンは無料ですか?
はい。「クラウドストレージのセキュリティとデータ漏えいリスク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。
「クラウドストレージのセキュリティとデータ漏えいリスク」で何を学びますか?
設定ミスのあるS3バケット、Azure Blobコンテナー、GCSバケットがデータ漏えいにつながる仕組みと、バケットポリシーやアクセス制御を適用する方法を学びます。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Security+ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「クラウドストレージのセキュリティとデータ漏えいリスク」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSecurity+ Academyレッスンでコードを書いて実行できますか?
はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 責任共有モデル:IaaS、PaaS、SaaS
- クラウドストレージのセキュリティとデータ漏えいリスク
- クラウドID:IAMロールとサービスアカウント
- クラウドセキュリティポスチャ管理(CSPM)