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


amazon-s3-php-class - how to change permission

我正在使用amazon-s3-php-class帮助我将文件上传到Amazon的S3。上传文件后,我注意到每个人都可以下载,如果他们键入url 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);

我的代码出了什么问题?

有了新的AWS SDK V3,更改ACL权限真的很容易:

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

ACL可以是以下值之一"ACL"=>"private | public read | public read-write | authenticated read | aws exec read | bucket owner read | bucket owner full-control",

$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应该是与bucket相关的路径。

在AWS控制台上,AllUsers等于Everyone。

或者,在将对象插入S3时,可以将专用acl设置为对象。

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