Help us understand the problem. What is going on with this article?

S3アクセスコントロール

More than 3 years have passed since last update.

S3に対するアクセス制限方法についてまとめました。

今回の環境について

S3バケット名は、「hogefuga」として説明させて頂きます。

1.特定S3バケットの中身を、全てのユーザーに見せる

下記の設定をする事により、hogefugaのS3バケット内にあるものは全て外部から見る事ができます。
S3バケットのWebホスティングを有効にしている場合などで利用します。

{
    "Version": "2012-10-17",
    "Id": "Policy1450760425940",
    "Statement": [
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/*"
            ]
        }
    ]
}

主要な項目について説明します。
<Effect>
 許可・拒否するかをここで指定します。
 今回はAllowなので、続くPrincipal・Action・Resourceで指定した行為を許可します。
 拒否する場合は、Allowの代わりにDenyを記述します。
<Principal>
 アクセス許可・拒否したい対象。
<Action>
 S3に対して許可・拒否するアクション。
<Resource>
 アクセス許可・拒否させたいS3バケット。

2.特定の階層にあるフォルダ以下にあるファイルを、全てのユーザーに見せる

「1」ではS3バケット以下を指定しましたが、下記のようにS3バケット内にあるフォルダを指定してアクセス許可させることもできます。

{
    "Version": "2012-10-17",
    "Id": "Policy1450760425940",
    "Statement": [
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/folder/*"
            ]
        }
    ]
}

3.IPアドレス制限を掛けてみる

特定の拠点にいる人からのみ、S3バケットを閲覧する事ができます。
aws:SourceIpにアクセスさせたい拠点のIPを記入します。

{
    "Version": "2012-10-17",
    "Id": "Policy1450760425940",
    "Statement": [
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "52.XX.XX.XX/32",
                        "52.XX.XX.XX/32"
                    ]
                }
            }
        }
    ]
}

逆にアクセス拒否したい拠点を記入することも出来ます。

{
    "Version": "2012-10-17",
    "Id": "Policy1450760425940",
    "Statement": [
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "52.XX.XX.XX/32",
                        "52.XX.XX.XX/32"
                    ]
                }
            }
        }
    ]
}

4.応用

{
    "Version": "2012-10-17",
    "Id": "Policy1450760425940",
    "Statement": [
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "52.XX.XX.XX/32",
                        "52.XX.XX.XX/32"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1450760424377",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::hogefuga/folder/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "52.XX.XX.XX/32",
                        "52.XX.XX.XX/32"
                    ]
                }
            }
        }
    ]
}

最初の"Effect": "Deny"から次の"aws:SourceIp"までで、hogefuga以下のデータにアクセスできないようにして
"Effect": "Allow"以降の記述で、hogefuga/folderにアクセスできるよう設定してます。

S3のバケットポリシーは、基本的に上から下に処理されていくようなので、アクセスさせたくないものを最初に書いておき、アクセスさせたいものは最後に書くと良いでしょう。

gumi
Python、Erlang、Elixir などちょっと変わった技術でゲームをつくったりする会社。プログラマだけじゃなく、企画、デザイン、イラストなど開発全般揃ってます。
http://gu3.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした