2013-05-01 26 views
1

我有一個腳本,從一個S3帳戶複製文件到另一個S3帳戶,這是工作befoure !!!!這是肯定的。比我今天嘗試,它不會再給它錯誤S3ResponseError: 403 Forbidden。我100%肯定憑據是正確的,我可以去使用aws控制檯從這兩個賬戶下載密鑰。S3ResponseError:403禁止使用博託

代碼

def run(self): 
     while True: 
      # Remove and return an item from the queue 
      key_name = self.q.get() 
      k = Key(self.s_bucket, key_name) 
      d_key = Key(self.d_bucket, k.key) 
      if not d_key.exists() or k.etag != d_key.etag: 
       print 'Moving {file_name} from {s_bucket} to {d_bucket}'.format(
           file_name = k.key, 
           s_bucket = source_bucket, 
           d_bucket = dest_bucket 
       ) 
       # Create a new key in the bucket by copying another existing key 
       acl = self.s_bucket.get_acl(k) 
       self.d_bucket.copy_key(d_key.key, self.s_bucket.name, k.key, storage_class=k.storage_class) 
       d_key.set_acl(acl) 
      else: 
       print 'File exist' 

      self.q.task_done() 

錯誤:

File "s3_to_s3.py", line 88, in run 
    self.d_bucket.copy_key(d_key.key, self.s_bucket.name, k.key, storage_class=k.storage_class) 
    File "/usr/lib/python2.7/dist-packages/boto/s3/bucket.py", line 689, in copy_key 
    response.reason, body) 
S3ResponseError: S3ResponseError: 403 Forbidden 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>0729E8ADBD7A9E60</RequestId><HostId>PSbbWCLBtLAC9cjW+52X1fUSVErnZeN79/w7rliDgNbLIdCpc9V0bPi8xO9fp1od</HostId></Error> 

回答

1

試試這個:使用博託的Key類

source_key_name = 'image.jpg' # for example 

#return Key object 
source_key = source_bucket.get_key(source_key_name)   
#use Key.copy 
source_key.copy(destination_bucket,source_key_name) 

關於複製功能,從源頭桶複製鑰匙目的地桶。您可以將preserve_acl設置爲True,並將其從源密鑰複製。

寶途的Key.copy簽名:

def copy(self, dst_bucket, dst_key, metadata=None, 
      reduced_redundancy=False, preserve_acl=False, 
      encrypt_key=False, validate_dst_bucket=True):