【问题标题】:S3 bucket existence using HEAD bucket使用 HEAD 存储桶的 S3 存储桶存在
【发布时间】:2017-09-01 07:06:20
【问题描述】:

我正在使用一个应用程序,我将一些工件存储在 S3 存储桶中。我想在推送工件之前检查存储桶是否存在。我参考了 S3 API 参考,并且方法“doesBucketExist”似乎只检查存储桶是否存在,实际上并没有验证它与请求是否在同一个帐户中。

参考:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#doesBucketExist-java.lang.String-

我想知道headBucket方法是否有效验证bucket是否存在并且与请求在同一个账户中?或者有没有更好的方法来验证账户中存储桶的存在?

谢谢

【问题讨论】:

  • 你不能试着创建一个小文件吗?
  • 我建议您浪费时间尝试发现这一点。出于所有实际目的,不可能最终确定将特定对象上传到存储桶是否会成功......除了尝试上传对象之外。存储桶策略和 IAM 用户策略允许精细访问控制到您可能(对于任何一个存储桶)能够创建名为 foo 的对象,但不能创建名为 bar 的对象。当一个测试有这么多假阳性或阴性的方法时,它就不是一个有价值的测试。
  • 例如,我的许多存储桶都会拒绝未指定正确 x-amz-server-side-encryption 值的上传。根据所有证据,用户拥有对存储桶的完全访问权限......但如果他们尝试未加密的上传,AccessDenied

标签: amazon-web-services amazon-s3


【解决方案1】:

head-bucket 通常用于在创建桶之前检查桶是否存在,它不会显示拥有桶的账户。要知道确切的帐户所有者,您的用户需要拥有s3:GetBucketAcl 权限,然后使用get-bucket-acl API,该API 将为您提供存储桶的完整所有权信息。

http://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-acl.html

【讨论】:

  • 我不确定显示名称的权限验证效果如何,规范用户 ID 似乎是我们无法真正提供作为预先验证的输入?
  • 您可以使用 list-buckets 获取请求用户拥有的存储桶列表,然后检查该特定存储桶是否在列表中。
  • 这个来自 S3 的 API 参考的文档说头存储桶用于确定存储桶是否在帐户中并且您可以访问它 - docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/…。你认为这不是最好的评估方式吗?
  • 是的,它会告诉你是否有权访问它,但它不会确认存储桶的所有权。存储桶也可以是公共存储桶,任何用户都可以访问它。如果您只关心权限而不是所有权,那么您可以使用 head-bucket。
猜你喜欢
  • 2023-03-31
  • 2021-01-19
  • 1970-01-01
  • 2016-03-02
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2010-10-23
相关资源
最近更新 更多