2011-05-24 36 views
2

我正在使用amazon-s3-php-class來幫助我將文件上傳到亞馬遜的S3。在我上傳文件後,我注意到每個人都可以下載它,如果他們輸入url https://url.com/mybucket/filename.file亞馬遜-s3-php-class - 如何更改權限

我可以通過使用AWS控制檯關閉打開/下載給用戶Everyone來手動限制訪問。

如何以編程方式使用amazon-s3-php-class?以下代碼沒有做任何事情:

$s3 = new S3($AZ_KEY_ID, $AZ_KEY_SECRET); 
$acp = array("acl"=>array()); 

$acp["acl"][] = array(
"type" => "Everyone", "uri" => "https://url.com/mybucket/filename.file", "permission" => "" 
); 

$s3->setAccessControlPolicy("mybucket", "https://url.com/mybucket/filename.file", $acp); 

我的代碼有什麼問題?

回答

3
$s3 = new S3($AZ_KEY_ID, $AZ_KEY_SECRET); 
$acp = $s3->getAccessControlPolicy('mybucket', 'filename.file'); 
foreach($acp['acl'] as $key => $val) { 
    if(isset($val['uri']) && 
     $val['uri'] == 'http://acs.amazonaws.com/groups/global/AllUsers') 
     unset($acp['acl'][$key]);   
} 
$s3->setAccessControlPolicy('mybucket', 'filename.file', $acp) 

在功能getAccessControlPolicysetAccessControlPolicyuri應該是與桶的路徑。

AllUsers等於AWS控制檯上的所有人。

或者,您可以在將對象插入到S3時將其設置爲對象。

$s3->putObjectFile($uploadFile, 'mybucket', 'filename.file', S3::ACL_PRIVATE)

4

有了新的AWS SDK V3改變ACL權限是很容易的:

$s3->putObjectAcl([ 
         'Bucket' => 'myBucketName', 
         'Key' => 'myFileName', 
         'ACL' => 'private' 
        ]); 

ACL可以是下列值 'ACL'=>「私人之一|公共閱讀|公共 - read-write | authenticated-read | aws-exec-read | bucket-owner-read | bucket-owner-full-control',