18

一般的にプライベートであるが、制限付きの匿名アップロードを許可するバケットをセットアップする方法を正確に理解しようとしています。具体的な基準は次のとおりです。

  • バケットはほとんど非公開であり、ファイルを追加/削除/更新/一覧表示するには、キー/シークレットが必要です。
  • 「incoming」と呼ばれる「ディレクトリ」(つまり、キープレフィックス) があり、匿名ユーザーがコンテンツをアップロードできますが、一覧には表示されません。
  • バケットのすべてのコンテンツの有効期限は 1 日です。おまけとして、「incoming」ディレクトリの有効期限を 30 分間にしたいのですが、それが不可能な場合は、バケット全体の有効期限を 1 日としてもかまいません。
  • 「incoming」プレフィックスを持つファイルは、オブジェクトごとのサイズが制限されます。
  • 「incoming」プレフィックスを持つオブジェクトを特定のコンテンツ タイプのみに制限したい場合もあります。

私が持っている質問は次のとおりです。

  1. 単純に 2 つのバケットを作成した方がよいでしょうか。1 つは受信ファイル用で、もう 1 つは個人的な処理と保存用ですか?
  2. ファイルが着信ディレクトリにアップロードされるコードは、次のようになります。理想的には、S3 ライブラリへの依存を避け、HTTP 呼び出しのみを使用したいと考えています。Rubyでこれについて正しい方向性を教えていただければボーナスポイントです。:)

有効期限は S3 管理コンソールから設定できるようですが、最小の有効期限として 1 日のみに制限されています。そのフィールドに小数を入れることはできますか? アクセス許可は、プレフィックスだけでなく、バ​​ケット全体に適用されるようです。これは、バケツが2つだけ必要だと私に思わせています。1 つのバケットを保持する場合、IAM ポリシーを作成してバケットに適用する必要があると思いますが、S3 に関する私の限られた知識を超えているため、人々が行うことを許可するアクセス許可に穴を残さないようにしたいと考えています。私が彼らに望んでいる以上のもの。

HTTP フォーム ポストを介して S3 に匿名でアップロードする方法について、多くのドキュメントを見つけました。私はそれをコードに適応させることができましたが、私はアプリケーション コード (HTTP フォームの投稿ではない) にいるので、もっと簡単な方法はありますか?

4

2 に答える 2

17

あなたが説明することは、1つのバケット内に実装できます。バケットポリシーを介して特定のフォルダーへの匿名アクセスを許可したり、例を確認したり、 AWSPolicyGeneratorを使用したりできます。あなたの場合、それは次のようになります。

{
    "Version": "2008-10-17",
    "Id": "Policy1346097257207",
    "Statement": [
        {
            "Sid": "Allow anonymous upload to /incoming",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[your_bucket]/incoming/*"
        }
    ]
}

単純なhtmlフォームを使用して、匿名でファイルをバケットにアップロードすることもできます。

<form action="http://[your_bucket].s3.amazonaws.com/" method="post" enctype="multipart/form-data">
    <input type="hidden" name="acl" value="public-read" />
    Name: <input type="text" name="key" value="incoming/[filename]" /><br/>
    File: <input type="file" name="file" /> <br />
    <input type="submit" name="submit" value="Upload" />
</form>​

ここでは、 S3ブラウザベースのアップロードについて詳しく説明します。

于 2012-08-27T20:10:52.420 に答える