概要
AWS Solution Architect Associate試験で問われがちなS3のアクセス制御・誤削除防止など、「オブジェクトの保護策」についてまとめてみました
アクセス制御
ACLによる読み取り・書き込み制限
パブリックアクセスをブロックするなどの設定を行い、直接URLからオブジェクトにアクセスできるのを防ぐ
デフォルトではバケット内のオブジェクトがプライベートアクセスとなっており、所有者以外はアクセスできない
バケットポリシーの設定
IAMユーザー・ロール・AWSアカウント・サービスに対してアクセス制御を行う。
特定のIPアドレスを許可/拒否、バケット内のオブジェクト・ディレクトリごとにアクセス制御を行えるなど、ACLより柔軟に設定ができる。
一つのポリシーで100個までルールを設定できる。
バケットポリシーのサンプル
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::sample-bucket/sample-object"
],
"Condition": {
"NotIpAddress": {"aws:SourceIp": "192.123.72.0/24"}
}
}
]
}
NotIpAddressで指定されたIP以外からのsample-backetのsample-objectへのアクセスを拒否する
署名付きURLの使用
プライベートバケット内のオブジェクトを共有するためには署名付きURLを使用する。
URLを作成するときは、アクセスを許可するHTTPメソッドと有効期限を設定する。
ユースケースとしては
- 一般向けに公開しているWebサイトで、ユーザーに画像を配布する
- 外部アプリケーションから動画などをアップロードする
などが挙げられる。
誤削除を防ぐ
MFA Delete(多要素認証)
オブジェクトを削除するときにMFAの値を入力する必要がある。
MFA Deleteが有効になっているときはバージョニングを無効にすることができない。
CLI上で設定が可能。(コンソールでは不可)
バージョニングの有効化
バージョニングを有効化すると、同一のキーを持つオブジェクト(同じファイル)をアップロードしたときに新バージョンとして保存され、以前のオブジェクトは上書きされず保持される。
同一オブジェクトをアップロードしても上書きされず、別オブジェクトとして保存されるので、放っておくと気づいたらバケット内にオブジェクトが溜まっていくという状態になるかも。
ライフサイクルルールと組み合わせることで、特定の日数以前のバージョンは自動的に削除という設定もできる。
オブジェクトロックの設定
Write Once Read Many(WORM)モデルを使用して、オブジェクトが削除・上書きされることを一定期間or無期限防止できる。
オブジェクトロックを有効化すると自動でバケットのバージョニングが有効になる。
参考
署名付き URL を使用したオブジェクトの共有
S3 オブジェクトロックの仕組み
S3 バケットでのバージョニングの使用