amazon-s3-php-class - 如何更改权限

时间:2011-05-24 14:58:24

标签: php amazon-s3

我正在使用amazon-s3-php-class来帮助我将文件上传到亚马逊的S3。上传文件后,我注意到如果用户输入网址https://url.com/mybucket/filename.file,则每个人都可以下载。

我可以使用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);

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:5)

使用新的AWS SDK V3更改ACL权限非常简单:

s/$pattern/$replace/g;

ACL可以是以下值之一'ACL'=> '私人|公共读|公共读写|认证读取| AWS-EXEC读取|桶所有者读|桶所有者全控制',

答案 1 :(得分: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)

在功能getAccessControlPolicysetAccessControlPolicy中,uri应该是与存储桶相关的路径。

AllUsers等于AWS控制台上的所有人。

或者,当将对象插入S3时,可以将私有acl设置为对象。

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