设置对象访问权限
PutACL操作可以通过access control list(ACL)设置一个对象的访问权限。用户在设置对象的ACL之前需要具备WRITE_ACP 权限。
对象的访问权限说明:
权限类型 | 说明 |
---|---|
READ | 可以对bucket进行list操作。 |
READ_ACP | 可以读取bucket的ACL信息。bucket的所有者默认具有bucket的READ_ACP权限。 |
WRITE | 可以在bucket中创建对象,修改原有对象数据和删除对象。 |
WRITE_ACP | 可以修改bucket的ACL信息,授予该权限相当于授予FULL_CONTROL权限,因为具有WRITE_ACP权限的用户可以配置bucket的任意权限。bucket的所有者默认具有bucket的WRITE_ACP权限。 |
FULL_CONTROL | 同时授予READ、READ_ACP、WRITE和WRITE_ACP权限。 |
代码示例:
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
namespace DotNetSDK.ObjectOperation
{
public class PutObjectACLExample
{
public static async Task PubObjectACL()
{
var accessKey = "YOUR_ACCESS_KEY";
var secretKey = "YOUR_SECRET_KEY";
var endpoint = "YOUR_ENDPOINT";
var bucketName = "EXAMPLE_BUCKET";
var key = "EXAMPLE_KEY";
try
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
var putACLRequest = new PutACLRequest()
{
BucketName = bucketName,
Key = key,
// 添加一个公共读权限
CannedACL = S3CannedACL.PublicRead
};
var result = await s3Client.PutACLAsync(putACLRequest);
if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("fail to put ACL to object {0}, HttpStatusCode:{1}, ErrorCode:{2}.", key, (int) result.HttpStatusCode, result.HttpStatusCode);
return;
}
Console.WriteLine("set {0} to object {1}", putACLRequest.CannedACL.Value, key);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
PutACLRequest可设置的参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
CannedACL | S3CannedACL | 配置对象的预定义的标准ACL信息。 | 否 |
AccessControlList | S3AccessControlList | 配置自定义的ACL信息。 | 否 |
BucketName | string | bucket的名称。 | 是 |
Key | string | 对象的key。 | 是 |
VersionId | string | 设置对象的版本id。 | 否 |
S3CannedACL包含了一组预定义的访问控制权限,可以应用于对象的访问权限如下:
权限 | 说明 |
---|---|
NoACL | 默认访问权限,对象的所有者拥有FULL_CONTROL权限,其他用户没有访问权限。 |
Private | 对象的所有者拥有FULL_CONTROL权限,其他用户没有访问权限。 |
PublicRead | 对象的所有者拥有FULL_CONTROL权限,其他用户拥有READ权限。 |
PublicReadWrite | 对象的所有者拥有FULL_CONTROL权限,其他用户拥有READ和WRITE权限。 |
BucketOwnerRead | 对象的所有者拥有FULL_CONTROL权限,bucket的所有者拥有READ权限。 |
BucketOwnerFullControl | 对象的所有者和bucket的所有者拥有FULL_CONTROL权限。 |
响应结果:
HTTP状态码 | 响应码 | 描述 |
---|---|---|
200 | OK | 操作成功。 |
400 | BadRequest | 参数错误。 |
403 | Forbidden | 用户没有权限执行操作。 |
404 | NotFound | 操作指定的bucket或者对象不存在。 |