私たちはユーザーがファイルをアップロードできる(他の機能の中でも)Webアプリに取り組んでいます。ただし、ストレージスペースが限られているため、VPSにこれらのファイルを保存できないため、S3を使用することにしました。
主な問題は、ユーザーが自分のデータのみにアクセスできるようにする必要があることです。そのため、データベースにファイルのリストと、それらにアクセスできるユーザーのリストを保持しています。サーバーは、ユーザーがファイルにアクセスできるかどうかを簡単に判断できます。しかし、実際にファイルをユーザーに提供する方法は?
私はすでに考えたいくつかの可能性がありますが、それらのどれも実際には最良のものではないようです。
1. PHPを使用して(期限切れになる)署名付きURLを生成する
これは非常に単純なアプローチであり、高速でもありますが、非常に醜く長いURLになります。
2.難読化されたURL
これは、S3での読み取り用にファイルを公開していることを意味しますが、すべてのファイルは、次のような推測しにくい名前のフォルダーに保存されます24fa0b8ef0ebb6e99c64be8092d3ede20000
。ただし、これが最も安全な方法ではないかもしれません。フォルダ名を推測できない場合でも、(実際にアクセスできるため)フォルダ名を知っていれば、誰でも(権限のないユーザーと)リンクを共有できます。
3.サーバーからファイルをダウンロードします
これは、ファイルがS3によって直接提供されないことを意味しますが、最初にサーバーがそれを安全に読み取り、提供します。私たちは本当にこれを望んでいません:)
4.リファラーの確認
難読化のURLの解決策は、要求が(あなたがリファラをチェックするためにS3を設定することができます)当社のサーバーから来ている「ことを確認すること」によって改善することができます。ただし、すべてのブラウザがリファラーデータを送信するわけではないため、これは非常に信頼性の低いソリューションとなり、偽装される可能性もあります。
さまざまなクライアントに対してAmazon S3からファイルを安全に提供するための良い方法は何ですか?