设置对象访问权限
与桶访问权限类似,对象访问权限同样具有 AccessControlList 与 CannedAccessControlList 两种。需要注意的是,对象的访问优先级要高于桶访问权限。比如桶访问权限是 private,但是对象访问权限是 public read,则所有用户都可以访问该对象。默认情况下,只有对象的拥有者才能访问该对象,即对象的访问权限默认是 private。
- AccessControlList
使用 AccessControlList 设置对象访问权限时,可以设置特定用户对象的访问权限。对象的 AccessControlList 权限如下表:
权限 | 对应Permission值 |
---|---|
可读取object的数据。 | READ |
无 | WRITE |
可读取object的acl规则。 | READ_ACP |
可修改object的acl规则。 | WRITE_ACP |
完全权限。以上的所有权限 | FULL_CONTROL |
使用AccesssControlList设置对象的权限示例代码如下:
$bucket = '<your-bucket-name>';
$keyname = '<your-object-key>';
$params = [
'AccessControlPolicy' => [
'Grants' => [
[
//开启用户 exampleuser 的完全控制权限
'Grantee' => [
'ID' => 'exampleuser',
'Type' => 'CanonicalUser',
],
'Permission' => 'FULL_CONTROL',
],
[
//开启所有用户的读权限
'Grantee' => [
'Type' => 'Group',
'URI' => 'http://acs.amazonaws.com/groups/global/AllUsers',
],
'Permission' => 'READ',
],
// ...
],
// 可以从 getBucketAcl 接口获取 Owner 信息
'Owner' => [
'DisplayName' => 'Example DisplayName',
'ID' => 'exampleuser',
],
],
'Bucket' => $bucket,
'Key' => $key,
];
try {
$resp = $s3Client->putObjectAcl($params);
echo "Succeed in setting object ACL.\n";
} catch (AwsException $e) {
// Display error message
echo $e->getMessage();
echo "\n";
}
- CannedAccesssControlList
CannedAccesssControlList 是一系列的预定义访问权限,包含了:private(私有读写),public-read(公共读私有写),public-read-write(公共读写)。
权限 | 对应ACL值 |
---|---|
私有读写 | private |
公共读私有写 | public-read |
公共读写 | public-read-write |
注册用户可读 | authenticated-read |
使用 CannedAccesssControlList 设置桶的访问权限示例代码如下:
//设置对象为公共读写
$params = [
'ACL' => 'public-read',
'Bucket' => $bucket,
'Key' => $key,
];
try {
$resp = $s3Client->putObjectAcl($params);
echo "Succeed in setting object ACL.\n";
} catch (AwsException $e) {
echo $e->getMessage();
echo "\n";
}