Amazon S3のアクセス制御の方法は、間違えると大きな問題になってしまいます。
ただ、すごい複雑です。しっかり把握しましょう。
S3バケット一覧のページから、アクセスの概要を確認できます。
アクセス | 説明 |
---|---|
オブジェクトは公開可能 | パブリックアクセス設定を無効にしています。 |
バケットとオブジェクトは非公開 | パブリックアクセス設定を有効にしています。 |
公開 | パブリックアクセス設定を無効にしています。 ACLでバケット公開しています。 |
ACLよりもバケットポリシーの方が強くなります。
バケットポリシーで設定されていない場合は、ACLによって制御されています。
{ "Id": "VPCe", "Version": "2012-10-17", "Statement": [ { "Sid": "VPCe", "Effect": "Deny", "Resource": [ "arn:aws:s3:::<<S3-BUCKET-NAME>>", "arn:aws:s3:::<<S3-BUCKET-NAME>>/*" ], "NotAction": [ "s3:ListBucket", "s3:ListAllMyBuckets" ], "Condition": { "StringNotEquals": { "aws:SourceVpce": [ "<<MY-ENDPOINT-ID>>" ] } }, "Principal": "*" } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "111.111.222.111/32", "111.111.222.222/32" ] } } } ] }
54.240.143.0/24 の範囲の IP アドレスは許可して、54.240.143.188 からのアクセスは拒否
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} } } ] }
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": {"aws:SourceIp": [ "54.240.143.0/24", "192.1680.143.0/24" ] }, "NotIpAddress": {"aws:SourceIp": [ "54.240.143.188/32", "192.1680.143.10/24" ] } } } ] }
IAMの詳細は、AWS IAMで、ユーザ管理
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::testbucket", "arn:aws:s3:::testbucket/*" ] } ] }
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::awsexamplebucket1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::awsexamplebucket1/*" } ] }
ACL無効化が推奨。
バケットへのアクセス制御を ポリシー(IAMユーザーポリシーやバケットポリシー)に 絞ることができます。
バケット単位のACLの設定に関係なくオブジェクト単位のACLが優先されます。
オブジェクトへのアクセス ON/OFF オブジェクトの一覧 ON/OFF オブジェクトの書き込み このバケットの ACL へのアクセス ON/OFF バケットのアクセス権限の読み取り ON/OFF バケットのアクセス権限の書き込み
パブリックからのアクセスを拒否したい場合に設定します。
以下の4つをON/OFFにできます。
パブリックアクセスをすべてブロックすることになります。
オブジェクトにアクセスできるのは、AWS サービスとバケット所有者のアカウント内の承認されたユーザーのみに制限されます。
ACLの新規作成、設定変更でパブリックアクセス可能な設定にしない
ACLで、パブリックアクセスをすべてブロックする
バケットポリシーの新規作成、設定変更でパブリックアクセス可能な設定にしない