Rails
AWS
S3

アプリケーションからS3内の画像を移動させる時にアクセス権限を付与する

とあるプロジェクトで、ユーザーの投稿を論理削除し後々復活させると、
復活させた画像のパブリックアクセスのオブジェクト読み取り権限が無くなっていたのでその対応。
rails4環境です。

結論から

オプションでaclを指定します。

使用例

s3 = Aws::S3::Resource.new

# 対象にする画像オブジェクトを取得
object = s3.bucket("バケット名").object("対象ファイルのパス")

# 付与するオプションを定義。今回の肝。
options = {acl: 'public-read'}

# 移動先の定義
location = "移動先のパス"

# aclオプションを付けて指定先にコピー
object.copy_to(location, options)

# 元の画像は削除
object.delete

参考

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#copy_to-instance_method

http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html