2016-05-06 8 views
3

難しい問題を解決するための創造的な方法を探しています。そして、私はC#コードだけでこれを行う必要があります。ウェブサイトの設定はありません。AWS S3フォルダ全体へのアクセスを許可する - C#

ユーザーがファイルの「パッケージ」をアップロードします。これらはです。画像やその他のリソースへの相対パスを持つHTMLファイルです。現在私はこれらをS3バケットのフォルダに格納しています。これまでのところ問題はありません。

このファイルをクライアントに戻す必要がある場合に問題が発生します。 URLリンクの整合性を保ちながら、Xの時間だけHTMLファイルにアクセスできるようにする方法が必要です。例えば

- File.htmlがfish.pngへの参照を持っている -

<img src="fish.png"/>

私は彼らにFile.htmlへのアクセス権を付与した場合、彼らが持っていないため、魚のイメージが壊れています"fish.png"へのアクセス。 srcにセキュリティトークンがないため、リンクに両方のアクセスを許可しても、リンクはまだ壊れています。私も、フォルダと両方のファイルへのアクセスを許可しようとしましたが、まだ画像が壊れています。また、コンテンツをダウンロードすることもできません。これは、Xの時間だけリソースを利用できるという目的を破るためです。

私の問題がはっきりしていることを願っています。私は一般的にS3開発で非常に新しいです。どんな助けもありがとうございます。

EDIT - HTMLドキュメントリンクを変更することはオプションではないことを付け加えたいと思います。それらは常にHTMLをアップロードするとは限らず、フラッシュファイルやその他のファイルタイプでもかまいません。私は文書リンクの参照を維持する必要があります。

+0

私はあなたが達成しようとしていることは明らかではありません。クライアントが複数のファイルをアップロードする場合、そのクライアントだけがファイルにアクセスできますか?あなたは彼らが一定の時間だけアクセス可能であると言うとき、それ以降何が起こるでしょうか? – chris

+0

@chris - クライアントは、販売されている製品の一部であるファイルをアップロードします。パブリックを介したファイルへのアクセスで、タイマーを設定して資産を保護したいと考えています。タイマーがなくなると、ファイルが見つからないか、アクセスが拒否されます。ファイルへのアクセス権を得ること以外は何もしません。 – BrianLegg

答えて

0

まず、フォルダ全体にアクセスできる場合に、なぜ機能しないのかを理解する必要があります。

フォルダにアクセス権があり、両方のファイルがそのフォルダにあり、画像へのリンクにパスがない場合、そのファイルは機能するはずです。そのユースケースが解決されるまで、時間ベースのURLの作業を開始することは非スターターです。

大文字小文字の区別が正しいことを確認することができます - s3では問題ありませんが、IISでの実行に慣れているのであれば通常は問題ありません。

+0

私はフォルダへのアクセスを許可する方法を考え出し、フォルダ内のアイテムを公開することによって、画像を正しく表示するためにhtmlファイルを取得することができました。今問題は、アイテムが公開されているため、htmlファイルへの直接リンクが期限切れにならないことです。フォルダのアクセス許可が失効しても、アイテムにはまだアクセスできます。私はおそらくこれについて間違った方法をとっていると思う。 – BrianLegg

0

これを行うには、IMAGEファイルを公開し、HTMLファイルを「署名済みURL」にすることが考えられます。イメージファイルを参照する署名付きURLに有効期限を設定することができます。画像ファイルは明らかに失効しませんが、画像ファイルを参照するHTMLファイルへのアクセスは期限切れになります。

非常に優れた解決策ではありませんが、問題はそれほどきれいではありません。 ;-)

あなたがここにプリ署名付きURLについての詳細を読むことができます:Generate a Pre-signed Object URL using AWS SDK for .NET

+0

こんにちは、ジムに感謝します。私は同じ結論に至りました...しかし、これはユーザにとっては良くないことです。彼らはビデオや画像にリンクしている可能性があり、後でそのコンテンツをリンクさせたくないからです。今私は可能な解決策としてCloudFrontを探しています。 – BrianLegg

0

これはやりすぎかもしれないが、私はそれが仕事だと思います。

ユーザーがファイルを要求すると、そのファイルとそのファイルで参照されているファイルをパブリックエリア(GUIDを名前として使用するディレクトリ内)にコピーし、他のユーザーが容易に推測できないようにします。

時間が経過すると、新しいディレクトリを削除するだけで済みます。

+0

私はそれについて考えていましたが、AWSやCloudFrontを使用する目的に反しています。そのアプローチをとった場合、ファイルを保存する必要があります膨大な数のリソース(ファイル)を持つ多くのクライアントが存在します。しかし、アイデアをありがとう – BrianLegg

関連する問題