如何检查每个对象的访问控制列表存储在S3(How to check ACL of the each

2019-10-29 22:38发布

如何检查每个对象的访问控制列表(ACL)在通过AWS SDK存储在亚马逊Web服务的S3存储对于.NET?

它不仅对于.NET SDK,它适用于所有AWS SDK如Node和Java SDK了。

在下面的代码片段,我找不到每个对象的访问级别属性。 如果访问级别权限已经知道,我可以提前访问对象进行读/写/下载操作前告知用户。

    static void Main(string[] args)
    {
        string bucketName = "mytestbucket1234"; //Testing purpose only, not a real bucket
        using (IAmazonS3 s3client = new AmazonS3Client())
        {
            ListObjectsV2Request request = new ListObjectsV2Request() { BucketName = bucketName };
            var bucketItem = s3client.ListObjectsV2(request);
            foreach (var x in bucketItem.S3Objects)
            {
                //need to access Access Level List Permission here, property is not available 
                Console.WriteLine(x.Key);
                Console.WriteLine(x.ETag); 
            }
        }
    }

Answer 1:

这是目前不可能。 你有两个选择: -

  1. 检索所有对象(最多1000)使用ListObjectsV2 ,然后调用GetACL与组合BucketNameKey : -

     private static void ListACLs(BasicAWSCredentials credentials, RegionEndpoint regionEndpoint, string bucketName) { using (var client = new AmazonS3Client(credentials, regionEndpoint)) { var s3Objects = client.ListObjectsV2(new ListObjectsV2Request { BucketName = bucketName }).S3Objects; foreach (var s3Object in s3Objects) { var getAclRequest = new GetACLRequest { BucketName = bucketName, Key = s3Object.Key }; var grants = client.GetACL(getAclRequest).AccessControlList.Grants; foreach (var s3Grant in grants) { Console.WriteLine(s3Grant.Permission); } } } } 
  2. 或者,如果你已经知道的组合BucketNameKey ,那么你可以跳过ListObjectsV2呼叫,只是做一个GetACL电话: -

     private static void ListACLs(BasicAWSCredentials credentials, RegionEndpoint regionEndpoint, string bucketName, string key) { using (var client = new AmazonS3Client(credentials, regionEndpoint)) { var getAclRequest = new GetACLRequest { BucketName = bucketName, Key = key }; var grants = client.GetACL(getAclRequest).AccessControlList.Grants; foreach (var s3Grant in grants) { Console.WriteLine(s3Grant.Permission); } } } 

我个人认为,如果你正在检索之前测试每个对象ACL那么你的模型需要看。 默认情况下,当您上传的目的是S3是私有的。 此外,当您尝试检索私有对象不正确的凭据S3将返回HTTP状态403和拒绝访问的消息。 我会调查使用的机制,如果你真的需要这个功能。

希望帮助!



文章来源: How to check ACL of the each object in stored in S3