[解決済み] rails API / iOSクライアントで、S3にデータを保存し、安全な方法でユーザーアクセスを許可するにはどうすればよいですか?
質問
私はRailsとAPIを書くのに新しいです。私はS3ストレージソリューションでいくつかの助けを必要とします。以下は私の問題です。
私はiOSアプリのAPIを書いています、ユーザーはiOSでFacebook APIでログインします。サーバーは、Facebook が iOS ユーザーに発行するトークンに対してユーザーを検証し、一時的なセッション トークンを発行します。この時点から、ユーザーはS3に保存されているコンテンツをダウンロードする必要がある。このコンテンツは、ユーザーとその友人のサブセットにのみ属しています。このユーザーは、同じ集団がアクセスできるコンテンツをS3に追加することができます。Facebookのグループにファイルを添付するのと同じような感じでしょうか...。
サーバーに任せるか、サーバーに一時的なS3トークンを発行してもらい(ここでの可能性はよくわかりません)、ユーザーはコンテンツのURLを直接S3にヒットさせることができるのです。私はこのアプローチについて話しているこの質問を見つけました、しかし、それは本当に古いです(2年前)。 iPhoneアプリとS3から写真をアップロードすることについてのアーキテクチャとデザインの質問
ということで、質問です。
- 一時的なトークン発行時に、S3上の一部のコンテンツにしかアクセスできないようにユーザーを制限する方法はありますか?どうすればいいでしょうか?ユーザーが...例えば10万人以上いると仮定します。
- iOS デバイスにこのコンテンツを直接引き出させるのは良いアイデアでしょうか?
- それとも、サーバーにすべてのコンテンツの受け渡しを制御させるべきでしょうか (もちろん、これはセキュリティを解決します)?これは、接続されているユーザーに渡す前に、すべてのコンテンツをサーバーにダウンロードしなければならないことを意味しますか?
- もしあなたがrailsを知っているならば...私はこの種の設定を達成するためにpaperclipとaws-sdk gemsを使用することができますか?
複数の質問を謝罪し、私は問題への洞察に感謝します。ありがとうございます :)
どのように解決するのですか?
を使用して
aws-sdk gem
を使用することで、任意のS3オブジェクトの一時的な署名付きURLを取得することができます。
url_for
:
s3 = AWS::S3.new(
:access_key_id => 1234,
:secret_access_key => abcd
)
object = s3.buckets['bucket'].objects['path/to/object']
object.url_for(:get, { :expires => 20.minutes.from_now, :secure => true }).to_s
これは、S3内のそのオブジェクトだけのための署名された一時的な使用URLを提供します。20分後(この例では)に失効し、その1つのオブジェクトにのみ有効です。
クライアントが必要とするオブジェクトがたくさんある場合、たくさんの署名付きURLを発行する必要があります。
それとも、サーバーにすべてのコンテンツの受け渡しを制御させるべきでしょうか (これはもちろんセキュリティを解決します)。これは、接続されているユーザーに渡す前に、すべてのコンテンツをサーバーにダウンロードする必要があるということですか?
これは、サーバーが各オブジェクトをダウンロードする必要があるという意味ではなく、S3内の特定のオブジェクトにアクセスするために特定のクライアントを認証および認可する必要があるだけであることに注意してください。
AmazonのAPIドキュメントです。 https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
関連
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] どのようにrailsでラジオボタンを正しく使用するには?
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] 該当するルートがない [GET] "demo/hello"
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] bundle install --without production は何をするのですか?
-
[解決済み】強いパラメータを持つ配列を許可する方法
-
[解決済み】Rails 4 認証トークン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] バリデーションなしで属性を更新する方法
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]