質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

270閲覧

RailsにてS3にアップロードした画像(carrierwaveにて)をCloudFrontで配信する際に、ユーザー毎に閲覧制限を付したい【カスタムポリシー】

jusco

総合スコア80

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/05/22 10:07

Ruby on Railsを用いたアプリケーションで、carrierwave gemを利用して画像アップロード機能を実装しました。
また、画像アップロード先はAmazon Web ServicesのS3であり、CloudFrontを利用して画像配信を行うところまでは出来ております。

その上で、当該アプリケーションには「User」、「Admin」、「SuperAdmin」というモデルがあり、モデル毎に画像の閲覧制限を実装したいです。

要件は以下です。
・「Admin」は特定の「User」宛に画像を送信できる。
・「User」は、自分宛に送信された画像しか閲覧ができない。
・「Admin」は、自分が送信した画像しか閲覧ができない。
・「SuperAdmin」は全ての画像を閲覧できる

画像はアルバム機能を付しており、「Album」(アルバム)と「Image」(画像)が多対多の関係で、「Admin」は「User」宛に「Album」を送信します。

現状Railsの機能としては閲覧制限が出来ていますが、万が一URLが流出した際に全ての画像が第三者に見られてしまいます。
上記要件を満たすためのS3、CloudFrontの設定、Railsアプリケーション内での対応方法をご教示いただきたいです。

ぜひアドバイスよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

現状Railsの機能としては閲覧制限が出来ていますが、万が一URLが流出した際に全ての画像が第三者に見られてしまいます。

アプリケーション内で、きちんとユーザロール間でのアクセスコントロールが
できているのであれば、流出URLに対して制限するだけだと思います。

従いまして、S3バケットポリシーをIAMロールに限定すればよいのかなと思います。
但しアプリケーションがアクセスする際は、このロールを使う必要があります。

例:s3-iam-roleの場合

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::s3-iam-role" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::s3-iam-role/*" } ] }

また、もし事務所内だけで使うアプリなど接続元が決まっている場合は、
IPアドレスで限定する方法もあります。
Amazon S3で限定したIPアドレスに公開する静的サイトをつくる

投稿2018/05/23 06:57

lazhuward

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問