4

Railsモデルに接続された画像をホストするためにS3を使い始めました。画像はユーザーによってアップロードされないため、aws_sdkgemを使用して画像をS3バケットに保存します。

これまでのところ画像の保存に成功しましたが、許可について混乱しています。たぶん私は間違っていますが、S3パーミッションについて話しているほとんどのドキュメントは古く、それらが何を参照しているのかわかりません。

私がやりたいのはかなり基本的なことです。画像をホストしたいだけで、画像自体は公開されているので、誰でも見ることができます。ただし、誰かが自分のバケットにアクセスして、そこでホストされている他のすべてのものを表示することは望んでいません。つまり、基本的には、S3で画像をホストする通常のWebアプリです。そのように機能するように、権限設定をどこでどのように変更できますか?現在、アクセスは自分にのみ許可されており、ブラウザにURLを入力しても画像を表示することはできません。

4

3 に答える 3

3

私自身の質問に答える:「公開」のように何かを設定し、すべてが機能することを期待するほど簡単ではないようです。基本的に、バケットを一般公開する場合は、ポリシーを作成してバケットに適用する必要があります。

ポリシーを作成できるページは次のとおりです:http://awspolicygen.s3.amazonaws.com/policygen.html

于 2012-06-19T16:50:05.557 に答える
2

ドキュメントを見てください。具体的には、S3Objectsの書き込みメソッドであるClass:AWS :: S3 :: S3Objectを参照してください。これにより、アップロードされたファイルに一連のオプションを設定できます。

S3バケットにアップロードするときは、適切な:acl権限を設定しています。これは、デフォルトが:privateであり、パブリックアクセスが許可されていないためです。これが私がgithubから取得した変更されたスニペットです:

# get an instance of the S3 interface using the default configuration
s3 = AWS::S3.new

# create a bucket
b = s3.buckets.create('example')

# upload a file
basename = File.basename('image.png')
o = b.objects[basename]
o.write(:file => file_name,  :acl => :public_read)

# grab public url
image_public_url = o.public_url

...
于 2012-06-19T07:20:39.523 に答える
0

誰でもs3バケットにアクセスできるようにするポリシーの作成方法に関するより具体的な情報を探している人にとっては、これが役立つ場合があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

これと他の例は、以下のリンクにあります。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-2

それでも問題が解決しない場合は、ブロック設定を確認してください。

于 2022-02-21T23:37:31.930 に答える