2015-12-02 52 views
11

外部用戶訪問我們的S3存儲創建的用戶不能在自己的S3存儲桶訪問對象,使用我們的鬥政策這些動作:S3:如果由其他用戶

"Action": [ 
      "s3:GetObjectAcl", 
      "s3:GetObject", 
      "s3:PutObjectAcl", 
      "s3:ListMultipartUploadParts", 
      "s3:PutObject" 
     ] 

即用戶生成temporary credentials,這然後用於將文件上傳到我們的存儲桶中。

現在,我無法訪問該文件。在s3 UI中,如果我嘗試下載該文件,則會得到一個403.如果我嘗試更改該對象的權限,則會看到以下消息:「對不起,您無權查看此存儲桶。」如果外部用戶在使用臨時憑證上傳文件時設置了適當的頭文件(x-amz-acl bucket-owner-full-control),我可以正常訪問文件。對我來說,似乎很奇怪,即使我擁有這個存儲桶,外部用戶也有可能將文件放入我無法訪問的文件中。

是否有可能有一些政策,我可以設置這樣我就可以訪問該文件,或者讓我能夠訪問任何文件添加到我的水桶,無論它是如何加入?謝謝!

回答

18

我相信你必須讓對象所有者更新ACL或重寫指定存儲桶擁有者完全控制權的對象。嘗試這種最簡單的方法是使用CLI:

aws s3api put-object-acl --acl bucket-owner-full-control --bucket some-bucket --key path/to/unreadable.txt 

是的,我認爲你必須爲每個對象做,有一次,我不認爲這是一個遞歸選項。

AWS發佈example bucket policy阻止將對象添加到存儲桶而不給予存儲桶擁有者完全控制權。但是這不會解決您的存儲桶中已有對象的所有權。

我不知道任何可以自動將所有權轉讓給存儲桶所有者的政策。

+5

你是正確的,這是設計。如果您允許其他用戶上傳到您的存儲桶中,並且不會對使用存儲桶策略的上傳執行「bucket-owner-full-control」,則存儲桶所有者可用的* only *操作是刪除該對象。其他任何事情都需要獲得對象所有者的許可。 –

+0

非常有幫助,謝謝。 – eric

+0

作爲腳註,爲了使用'cp'或'mv'命令,用戶需要''PutObjectAcl''的權限,這個知識會爲我節省一個小時; –

10

實際上你可以使用複製和遞歸選項將所有對象通過以下語法複製回桶和設置ACL桶業主完全控制:

aws s3 cp s3://myBucket s3://myBucket --recursive --acl bucket-owner-full-control --storage-class STANDARD 
+1

整潔的想法,但它並沒有爲我工作。 –

+1

使用此命令和執行原始上傳的帳戶的憑據來授予bucket-owner-full-control,但此時執行原始上載的帳戶仍擁有S3對象。如果需要,請使用擁有存儲桶的帳戶的憑據重複此命令,以便爲該帳戶擁有S3對象。 – davidvandebunte