1. パブリックアクセスを防止する
バケットやオブジェクトがパブリックに公開されるリスクを下げるために、以下の点を実施する。
-
Block Public Access 機能の活用
- バケットやアカウントレベルで「パブリックアクセスをブロック」設定を有効化する。
- ACL(アクセスコントロールリスト)によるパブリック許可を防ぎ、意図したバケットポリシーだけで公開制御を行う。
-
バケットポリシーでの明示的な制御
- パブリックアクセスを許可しないようにデフォルトでは
Principal: "*"
を使わない。 - 必要に応じて
s3:GetObject
のみパブリックに許可するが、s3:ListBucket
は許可しないなど、「最小権限」で制御する。
- パブリックアクセスを許可しないようにデフォルトでは
1.1 Block Public Access の流れ
2. 暗号化 (Server-Side Encryption) を利用する
バケットやオブジェクトに格納するデータを暗号化し、万が一のデータ流出に備える。
-
SSE-S3 (AES-256)
- AWS 管理のキーを使用し、S3 が自動的に暗号化/復号を実施する。
- 最も簡単でコストも低い。
-
SSE-KMS (AWS KMS)
- AWS KMS (Key Management Service) で管理するカスタマーマスターキー(CMK)を使用。
- キーポリシーや CloudTrail 連携で、キー使用履歴やアクセスを厳密に管理できる。
-
SSE-C (Customer Provided Keys)
- 独自に管理するキーを都度アップロード時に送信し、S3 が暗号化/復号を実施する。
- 鍵管理の責任がユーザー側にあるため運用コストが高い。
2.1 SSE-KMS を利用した場合の流れ
3. バケットポリシー & IAM ポリシーでの最小権限化
-
バケットポリシー
- 具体的なアクション(
s3:GetObject
,s3:PutObject
,s3:ListBucket
など)とリソース(arn:aws:s3:::my-bucket/*
)を指定し、最小権限付与の原則(Principle of Least Privilege)を守る。 - 例: 「社内ネットワークからのみ GET を許可」など、ソースIPアドレス制限(
aws:SourceIp
)を組み合わせることも可能。
- 具体的なアクション(
-
IAM ポリシー
- ユーザーやロールが「自分が必要な権限だけ」を持つように設計する。
- 例えば、アプリケーションサーバーのロールには
s3:PutObject
とs3:GetObject
のみ付与し、余計なアクションを許可しない。
3.1 バケットポリシー適用の流れ
4. ログと監査
-
S3 Server Access Logging
- S3 が受け取ったリクエストの情報(IPアドレス, HTTPステータス等)を別のバケットにログとして格納。
- 誰がいつどのオブジェクトにアクセスしたかを追跡しやすい。
-
CloudTrail Data Events
- オブジェクトレベルの操作(PUT, GET, DELETE)を CloudTrail で監査。
- 重要なアクションがあった場合にアラートを設定することも可能。
4.1 Loggingの流れ
5. バージョニングと MFA Delete
-
バージョニングの有効化
- オブジェクトの上書きや削除が行われても、過去バージョンを保持することで誤操作やランサムウェア的な攻撃への耐性を高める。
-
MFA Delete
- オブジェクトのバージョン削除やバージョニング設定の変更には MFA (多要素認証) が必要になる。
- 誤ってバージョンを削除してしまうリスクや不正削除リスクを最小化。
5.1 バージョニングの流れ (オブジェクト削除の場合)
( MFA Delete が有効なら、「MFA デバイスのコードが正しいか」が追加でチェックされます )
6. VPC エンドポイント (PrivateLink) の利用
-
VPC 内からのみアクセス
- Internet 経由ではなく、VPC 内のプライベートネットワークを介して S3 にアクセスする。
- これにより、インターネット側からの攻撃を防ぎ、セキュリティグループやネットワークACLで制御可能。
-
バケットポリシーで Source VPC / Source VPCE を条件に制限
-
aws:SourceVpc
やaws:SourceVpce
などの条件キーを使って、特定の VPC エンドポイント経由のみアクセスを許可。
-
6.1 VPCエンドポイントの流れ
7. Access Analyzerを使用したバケットアクセスの確認
- 外部アクセスの検出
- S3 のバケットポリシーや ACL を解析して、意図せずパブリックになっている (または他のAWSアカウントにオープンになっている) バケットを検出。
- ポリシーの継続的なモニタリング
- ポリシーを変更した際にアラートをあげたり、推奨修正を提示してくれる。
7.1 アクセスアナライザーのイメージ
8. まとめ
- パブリックアクセスブロック と バケットポリシー で、「意図した範囲のみ」を公開
- 暗号化 (SSE-S3, SSE-KMS) の利用で、保管時リスクを軽減
- IAM & バケットポリシー で最小権限を遵守、ソースIP/VPC制限などを活用
- ログ/監査 (S3 Server Access Logging、CloudTrail Data Events) で不正アクセスを早期検知
- バージョニング & MFA Delete により、誤削除や不正削除に強い運用
- VPCエンドポイント を通じて、インターネットを介さないセキュアなアクセス
- アクセスアナライザー でポリシーの継続的監査・アラート
これらを組み合わせることで、誤設定や不正アクセスによるセキュリティリスクを低減できる。
まずは「パブリックアクセスブロック」と「暗号化」「最小権限のポリシー設定」を導入し、その上で組織の要件に合わせて追加機能 (WAF/Access Points/Access Analyzer など) を取り入れる、などの進め方がある。