LoginSignup
6
14

More than 5 years have passed since last update.

S3へのアクセスをEC2経由のみにする

Posted at

S3へのアクセスをEC2経由(特定のURL)のみに設定する
開発環境などに使用することがあるのでメモ

やりたいこと

  1. UserがEC2経由のhttpアクセス時のみS3のコンテンツを表示
  2. UserからS3への直アクセスは拒否する

設定

EC2側

1.httpdをインストール

# yum install httpd
  1. 下記のようにS3へアクセスするためのファイルを準備
index.html
<a href="https://REGION.amazonaws.com/BUCKETNAME/index.html">
S3link
</a>

S3側

  1. Bucketを作成
  2. Bucket配下にindex.htmlを配置
  3. index.htmlへアクセスを確認する (この段階ではアクセス出来る)
  4. BucketのPropertiesからPermissionsを選択、Edit bucket policyに下記を追加
bucketpolicy.
{
    "Version": "2012-10-17",
    "Id": "policy example",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKETNAME/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "http://xxx.xxx.xxx.xxx/*"
                }
            }
        }
    ]
}

設定後

  1. S3へ直接アクセス
    AccessDeniedになることを確認

  2. EC2を経由しアクセス
    S3へのリンクからコンテンツが表示されることを確認

追加検証

S3へファイルをアップロードする際にpublic-readを付与するとどうなるか

  1. index.htmlにpublic-readのACLを付与してS3へアップロード
    # aws s3 cp index.html s3://BUCKETNAME/index2.html --acl public-read
  2. アクセスを確認する
    S3への直接アクセスでアクセスが出来る

まとめ

S3への直接アクセスは拒否しつつEC2経由でのアクセスが出来る。
アクセス元のURLを指定すれば同じように特定のURLからのアクセス等も指定できる。
bucketpolicyの設定をすればbucket内の特定の拡張子やパスのみといった使い方も可能なはず。
HTTP Refererを利用してアクセスをしているためアクセス管理設定をEC2側である程度コントロール出来る。
(SecurityGroupで制限や特定のサブドメイン経由のみ、Basic認証付きや一部のコンテンツだけとかetc...)

今回のケースの様に使う際には、acl設定に注意してS3へアップロードすること。

参考サイト

MD-Blog_Server/Network

6
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
14