Skip to content

S3でプロキシサーバーからのアクセスのみを許可してみる

mechamogera edited this page Sep 16, 2012 · 4 revisions
  • S3バケットへIP(クライアント)制限をしたいが、クライアントのIPが毎回変わると難しい
  • このため、HTTPプロキシサーバーをEC2インスタンス上に用意し、そのプロキシサーバーからのアクセスを許可することでクライアントの制限を実現してみる
  • クライアント <=> EC2プロキシサーバー <=> S3

やってみた手順

環境構築

  1. HTTPプロキシサーバー準備
  1. S3ポリシー設定
  • 対象のバケットのポリシーを以下のようにする
  • Principal(s):*
  • Effect:Allow
  • Action:s3:GetObject
  • Resource:arn:aws:s3:::[対象バケット名]/*
  • Conditions - IpAddress:aws:SourceIp: "[HTTPプロキシサーバーのEIP]/32"
  1. S3サンプルファイル配置
  • Everyoneに対するPermissionがないファイルを準備する

アクセス確認

  1. クライアントから直接S3のファイルをGET => 403 AccessDenied
$ curl https://[バケット名].s3.amazonaws.com/[ファイル名]
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>98678AA78F44750F</RequestId><HostId>AGzLkoXU2ow2uQY8QhxOgOVPYvj0NfpjnJLcRXhsyHVxzq4UFUGr+4eW80GsjU5j</HostId></Error>
  1. プロキシを設定してS3のファイルをGET => OK
$ curl --proxy-digest --proxy-user [プロキシユーザー]:[プロキシパスワード] --proxy [HTTPプロキシサーバー名]:8080 https://[バケット名].s3.amazonaws.com/[ファイル名]
# => ファイルの中身が出力

はまった

  • ブラウザでアクセスを確認した際、HTTPSプロキシを設定しておらず、httpsでs3のファイルにアクセスしようとして403になっていた
  • iphoneのwifiではプロキシを設定できるが3G回線ではできない
Clone this wiki locally