为啥我可以在未经许可的情况下删除/列出 S3 存储桶中的对象

Posted

技术标签:

【中文标题】为啥我可以在未经许可的情况下删除/列出 S3 存储桶中的对象【英文标题】:why am I able to delete/list objects in a S3 Bucket without permission为什么我可以在未经许可的情况下删除/列出 S3 存储桶中的对象 【发布时间】:2022-01-02 03:23:38 【问题描述】:

我想知道为什么我能够列出甚至删除 s3 存储桶中的对象,尽管公共访问被阻止并且只有存储桶所有者拥有存储桶的列表/写入权限。

这就是我在代码中所做的:

using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2))
        
          
            ListObjectsV2Request request = new ListObjectsV2Request
            
                BucketName = bucketName,
                MaxKeys = 10
            ;
            ListObjectsV2Response response;
            do
            
                response = await s3Client.ListObjectsV2Async(request);

                foreach (Amazon.S3.Model.S3Object obj in response.S3Objects)
                
                    Console.WriteLine(obj.Key);                        
                
                
                request.ContinuationToken = response.NextContinuationToken;

             while (response.IsTruncated);              

            DeleteObjectResponse resp = await s3Client.DeleteObjectAsync(new Amazon.S3.Model.DeleteObjectRequest()  BucketName = bucketName, Key = "dummykey" );                     

知道我做错了什么吗? acl 不应该阻止我列出任何内容吗?

【问题讨论】:

您的连接字符串是否包含凭据? 正如文档所说的构造函数 - “使用从应用程序的默认配置加载的凭证构造 AmazonS3Client,如果从 EC2 实例上的实例配置文件服务不成功。” 我在创建 amazons3client-object 时没有使用任何凭据。 @stuartd:这是否意味着使用安装在 Visual Studio 中的 AWS-Explorer 的凭证? @harryh100 我不能说。但是,如果您正在访问对象,几乎可以肯定它是从 somewhere 获取它们的。 【参考方案1】:

我猜您使用 AWS SDK 的代码可以恢复与存储桶所有者相关的凭证(一对 AWS 访问密钥 ID/AWS 密钥)。

如果可以,请查看存储桶所有者对应的 IAM 用户,看看他是否具有编程访问权限

代码在哪一个上运行?您应该查看存储 AWS 凭证的不同可能性:

环境变量 ~/.aws/credentials文件 ...

有关详细信息,请查看配置设置和优先级:https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-precedence

奖励:请找到管理访问密钥的良好做法: https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html

【讨论】:

非常感谢。似乎它正在使用 /.aws 中的凭据文件。

以上是关于为啥我可以在未经许可的情况下删除/列出 S3 存储桶中的对象的主要内容,如果未能解决你的问题,请参考以下文章

facebook - 如果用户在未经用户许可的情况下喜欢页面

列出具有特定存储类的S3存储桶对象

如何在未经许可的情况下在Android中使用意图拨打电话?

Android Studio App未经许可或按钮发送图像

回形针 未经许可的参数:图像

我可以在没有通知权限的情况下使用 FCM 接收消息吗?