为啥我可以在未经许可的情况下删除/列出 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 存储桶中的对象的主要内容,如果未能解决你的问题,请参考以下文章