2011-05-24 44 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',