设置桶访问权限

PutACL操作可以通过access control list(ACL)设置一个bucket的访问权限。用户在设置bucket的ACL之前需要具备WRITE_ACP 权限。

Bucket的访问权限说明:

权限类型 说明
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.BucketOperation
{
    public class PutBucketACLExample
    {
        public static async Task PutBucketACL()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            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,
                    // 添加一个公共读权限
                    CannedACL = S3CannedACL.PublicRead
                };

                var result = await s3Client.PutACLAsync(putACLRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to put bucket ACL to bucket {0}, HttpStatusCode:{1}, ErrorCode:{2}.", bucketName, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                Console.WriteLine("set {0} to bucket {1}", putACLRequest.CannedACL.Value, bucketName);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

PutACLRequest可设置的参数如下:

参数 类型 说明 是否必要
CannedACL S3CannedACL 配置对象的预定义的标准ACL信息。
AccessControlList S3AccessControlList 配置自定义的ACL信息。
BucketName string bucket的名称。

S3CannedACL包含了一组预定义的访问控制权限,可以应用于bucket的访问权限如下:

权限 说明
NoACL 默认访问权限,bucket的所有者拥有FULL_CONTROL权限,其他用户没有访问权限。
Private bucket的所有者拥有FULL_CONTROL权限,其他用户没有访问权限。
PublicRead bucket的所有者拥有FULL_CONTROL权限,其他用户拥有READ权限。
PublicReadWrite bucket的所有者拥有FULL_CONTROL权限,其他用户拥有READ和WRITE权限。

响应结果:

HTTP状态码 响应码 描述
200 OK 操作成功。
400 BadRequest 参数错误。
403 Forbidden 用户没有权限执行操作。
404 NotFound 操作指定的bucket不存在。