最近、s3cmd toolを使用して、数千のPaperlclip添付ファイルをローカルストレージからAmazon S3に移動しました。私がこれを達成した方法の詳細はhereですが、要約すると、次のコマンドを使用してすべての古い添付ファイルを移行しました。403 s3cmdツールを使用してAmazon S3にアップロードされたペーパークリップ添付ファイルのアクセス
s3cmd sync my-app/public/system/ s3://mybucket
新しいS3バケットを使用するようにコードベースを更新しました。接続をテストしたところすべて正常です。実際には、私のアプリケーションを通してリモートS3バケツに新しい添付ファイルをアップロードし、問題を表示/ダウンロードすることができます。しかし、PaperclipとS3が互いに同期していないようだが、私がs3バケツに移動した添付ファイル(以下の画像がぼやけている)は、私が試してみると、応用。同じバケットにアップロードされた新しい添付ファイルはうまく読み込まれます。
私は次のように構成されたIAMグループのセットアップ持っている:私は接続がうまく確立言うつもりです、私はS3に新しい添付ファイルをアップロードすることができるという事実から判断する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
を。私は私のバケットに私のアプリケーションを通してバケットにアクセスするものとは異なるIAMユーザアカウントを介して接続するためにs3cmdをセットアップすると信じています。許可の問題かもしれませんか?もしそうなら、上記のアクセス権をどのようにして変更して、それらのファイルにアクセス権を与えることができますか?
私はaws-sdkを使用して、ペーパークリップとS3を統合しています。
編集:私は、私は自分のアプリケーションで使用するものではなく、管理キーを使用してファイルをアップロードしたとして、それは所有権の問題だったかもしれないと思った 。バケツをパージし、アプリケーションが使用していたのと同じキーを使用するように構成した後、s3cmdを再同期しました。しかし、私は同じ結果に出会った。
EDIT2: 私は自分のアプリケーションのための私の生産コンソールに入ると、手動で私のバケットと相互作用することにより、&接続、さらに私のアクセス許可を確認することができます。すべてが正常に動作しています。つまり、ブラウザが403秒間に返すファイルを取得できます。
> s3 = AWS::S3.new
=> <AWS::S3>
> bucket = s3.buckets['mybucket']
=> #<AWS::S3::Bucket:mybucket>
> bucket.exists?
=> true
> image = bucket.objects["SomeFolder/SomeImage.jpg"]
=> <AWS::S3::S3Object:SomeFolder/SomeImage.jpg>
> puts image.read
=> ǃ���^�D��턣�����=m������f ... machine code
私がS3管理コンソールに入り、手動でバックセット内の画像に移動し、ダウンロード権限を 'Everyone'に与えると、私はもはや403を取得しません。結局のところ、権限の問題のように見えますが、誰でも素早い修正を知っていますか?私は上記の私の方針がこれをカバーしていると思っていたが、私はそうは思わない。 – Noz
ポリシーは良好に見えます。問題のユーザーはこのポリシーを添付したグループのメンバーですか?ポリシーがグループに関連付けられているかどうか。あなたが本質的にしたことは、必ずしも良いことではないかもしれないあなたのバケツを公開しました。 – Rico
ええ、ユーザーはそのグループの一部です。私のバケツを公開したのはどういう意味ですか? – Noz