【AWS】S3のアクセス制限方法まとめ!初心者でもわかるポリシー・ACL・バケット設定の使い分け
生徒
「AWSのS3って便利って聞くんですけど、アクセス制限はどうやってするんですか?」
先生
「いい質問ですね。S3では、バケットポリシーやACL、バケットの設定などで細かくアクセス制御ができるんですよ。」
生徒
「なるほど!それぞれの違いや使い分けを教えてください!」
先生
「それでは、S3のアクセス制限について、わかりやすく解説していきましょう!」
1. AWS S3のアクセス制限とは?
AWSのS3(エススリー:Simple Storage Service)は、オブジェクトストレージとして人気がありますが、セキュリティ対策としてアクセス制限がとても重要です。S3に保存したファイル(オブジェクト)やバケットが誰でもアクセスできる状態だと、情報漏洩のリスクが高まります。
S3のアクセス制御は、主に以下の3つの方法で行います。
- バケットポリシー(Bucket Policy)
- ACL(Access Control List)
- バケットの設定(パブリックアクセスブロックなど)
2. バケットポリシーとは?IAMポリシーとの違い
バケットポリシーは、S3の特定のバケットに対してアクセス権限を設定するJSON形式のポリシーです。IAMポリシーと違い、リソース側(S3バケット)に設定します。
例えば、特定のIPアドレスからのみアクセスを許可したい場合や、特定のユーザーやアカウントにだけアクセスさせたい場合に使用します。
以下は、指定のIPアドレスからのみオブジェクトの読み取りを許可するバケットポリシーの例です:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
}
]
}
このように、条件を組み合わせて柔軟なアクセス制御が可能です。
3. ACL(Access Control List)とは?
ACLは、S3の初期のアクセス制御方式で、オブジェクトやバケット単位で「誰がアクセスできるか」を指定します。
たとえば、「全員に読み取りを許可する」ACLを設定すると、世界中からそのオブジェクトにアクセスできるようになります。
ただし、セキュリティの観点からACLの使用は非推奨となっており、現在はバケットポリシーやIAMポリシーの使用が推奨されています。
以下は、ACLでオブジェクトを全員に公開する例です:
aws s3api put-object-acl --bucket example-bucket --key sample.txt --acl public-read
このコマンドにより、sample.txtは誰でも閲覧可能になります。実運用では慎重に!
4. バケットのパブリックアクセスブロック設定
2020年以降、S3ではパブリックアクセスブロックの設定が標準で有効になっており、誤ってバケットを公開しないようにするための機能です。
この設定を有効にしておくと、ACLやポリシーでパブリック許可をしていても、それをブロックしてくれます。
- 新しいACLのパブリックアクセスをブロック
- 既存のACLによるパブリックアクセスをブロック
- バケットポリシーによるパブリックアクセスをブロック
マネジメントコンソールでも設定可能ですが、CLIからも以下のように変更可能です:
aws s3api put-public-access-block \
--bucket example-bucket \
--public-access-block-configuration '{
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}'
これにより、意図しない公開設定を回避できます。
5. IAMポリシーでS3アクセス制御を強化
IAMポリシーは、AWSアカウント内のユーザーやロールに対して権限を付与する方法です。
ユーザーがS3にアクセスする場合、バケットポリシーだけでなく、IAMポリシーでも制御することが重要です。例えば、あるユーザーに読み取り専用権限を与えるIAMポリシーは以下の通りです:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::example-bucket/*"]
}
]
}
IAMポリシーとバケットポリシーの両方でアクセス制御を設計することで、より強固なセキュリティ体制が構築できます。
6. よくあるアクセス制限の失敗例
S3のアクセス制限では、以下のような失敗がよくあります:
- バケットポリシーで特定のユーザーを許可したが、IAMポリシーで拒否していた
- パブリックアクセスブロックを有効にしていて、ポリシーでの公開設定が無効になっていた
- ACLで全公開してしまい、情報漏洩のリスクが発生
これらを防ぐためには、設定の重なりを理解しておくことが重要です。
7. S3アクセス制限のベストプラクティス
S3を安全に運用するために、以下のベストプラクティスを意識しましょう。
- パブリックアクセスは基本的に禁止(本当に必要なときだけ許可)
- アクセス制御にはバケットポリシー+IAMポリシーの組み合わせを使う
- ACLは極力使用せず、必要最小限に
- アクセスログ(S3アクセスログ)を有効にして監査可能に
- IAMユーザーに最小権限を付与
これらを守ることで、初心者でも安全にS3を活用できます。