2011-12-21 100 views
6

我一直在嘗試使用S3,他們有這個很酷的功能,您可以在其中通過存儲桶策略設置存儲區內容的ACL。因此,例如,您可以將一堆文件的實際ACL設置爲私有文件,但該文件可通過覆蓋策略提供給某些用戶/ IP地址/推薦人。在S3存儲桶中設置對象的所有者

在我的情況下,我有一堆私人內容在一個存儲桶中,但我想讓我的網站(例如圖像)可用的特定目錄中的文件。所以,我有這樣的事情:

{ 
    "Version": "2008-10-17", 
    "Id": "", 
    "Statement": [ 
     { 
      "Sid": "AddPerm", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::content-racket-fm/uploaded/images/*" 
     } 
    ] 
} 

現在我們有一些背景,我可以得到這個問題。最近我發現在這裏:

https://forums.aws.amazon.com/thread.jspa?threadID=78294

那桶政策僅適用於那些擁有通過桶所有者文件。因此,舉例來說,如果文件通過一些外部服務(如codie.com或熊貓流)在您的S3存儲桶中擁有自己的用戶而結束了存儲桶,則您將遇到問題,因爲您的存儲桶策略不適用於這些文件(這似乎是亞馬遜在我看來,一個疏忽,但我相信有我沒有想到的一個很好的理由)

我使用的軌道,是有辦法來設置對象的所有者一個桶。

編輯

我想一個更好的問題可能是...

有沒有辦法設置一個Amazon鬥所以它適用桶策略應用到所有文件所有者無關。

回答

2

事實證明,S3的另一個限制是您似乎無法更改存儲桶中對象的所有者。這使得桶策略在這種情況下毫無用處。作爲解決辦法,我不得不重新使用ACL。您可以設置使用軌道AWS-SDK寶石這樣的公共訪問控制列表。

class AwsHelper 

    # This method can be used to set a public acl on any object. The parameter file_path 
    # will be the path to the file in the bucket minus the domain info, so if your full url was 
    # http://s3.amazonaws.com/<your-bucket>/images/image1.png, file path would be 
    # images/image1.png 
    def self.set_public_acl(file_path) 

    @bucket_path = ENV['S3_BUCKET'] 

    Rails.logger.warn "===> Loading S3" 
    s3 = AWS::S3.new 

    if(s3) 
     bucket = s3.buckets[@bucket_path] 

     if(bucket.exists?) 
     Rails.logger.warn "===> Bucket '#{@bucket_path}' FOUND" 

     key = bucket.objects[file_path] 

     if(key.exists?) 
      Rails.logger.warn "===> Key '#{file_path}' FOUND" 

      key.acl = :public_read 

      Rails.logger.warn "===> ACL Set to public read:" 
      key.acl.grants.each { |grant| Rails.logger.warn "grantee => #{grant.grantee.group_uri}, permission => #{grant.permission.name}"} 

      return key 
     end 
     end 
    end 
    end 

end 

在情況下,你沒有對誰創造內容的用戶的控制,但你仍然希望它私有的(例如,當使用某些品牌的基於網絡的視頻編碼時),您可以通過在文件創建後(您的帳戶將擁有該副本)複製文件來實現此目的,刪除舊文件並將其複製回來。不理想,但它的作品。

相關問題