【问题标题】:How to list all aws s3 objects which the current user has permission to acess?如何列出当前用户有权访问的所有 aws s3 对象?
【发布时间】:2020-02-11 13:11:34
【问题描述】:

我有一个 S3 存储桶,其对象结构如下:

S3://0/10/20.txt (I have permission to list 20.txt)
S3://0/11/21.txt (I DON't have permission to list 21.txt)
S3://0/12/22.txt (I have permission to list 22.txt)

如何运行 AWS CLI 命令来列出此存储桶中我有权列出的所有对象?

我尝试运行以下命令并收到拒绝访问错误。

aws s3 ls s3://0/ --recursive

谢谢。

更新:

我应该明确表示我可以列出我有权列出的特定对象,如下所示:

aws s3 ls S3://0/10/20.txt (this works fine)
aws s3 ls s3://0/ --recursive (this does not work)

我的目标是列出我有权列出的存储桶中的对象。我对该命令 (aws s3 ls s3://0/ --recursive) 的预期结果是:

S3://0/10/20.txt
S3://0/12/22.txt

更新 2:

我认为 read 和 list 是相同的权限,但似乎不是。因此,我更新了我的描述以反映我真正想要的,即从存储桶中递归列出我有权列出的对象(忽略我无权列出的对象)。

【问题讨论】:

  • 您对存储桶本身(而不是其中的项目)的权限如何?
  • 您是否真的想知道您可以访问哪些文件,或者您只是想调试一个情况以找出您没有完全访问权限的原因?您应该首先查看存储桶策略,然后查看您自己的 IAM 用户的权限,以及对象本身的权限。您的最终目标是什么——您是否只想访问所有对象?
  • 我的目标是仅列出存储桶中我有权读取的对象。我已经更新了我的问题。
  • 我认为没有明确的答案。如果您可以调用get-bucket-policy,您可以看到可以枚举哪些前缀,但即使这样,也完全可以授予获取对象的权限但不列出它。不过,我很想被证明是错误的。
  • 我认为 read 和 list 是相同的权限,但似乎不是。我已经更新了我的问题。我只需要列出我有权列出的所有对象。

标签: amazon-web-services amazon-s3


【解决方案1】:

这是不可能的。在您实际尝试读取它们之前,S3 不知道您有权读取哪些对象。

List Objects API 不知道你是否可以访问一个对象,只知道你是否被允许请求对象列表,这是一个单独的权限,与你是否可以实际读取该对象完全无关。

【讨论】:

  • 谢谢迈克尔。我认为 read 和 list 是相同的权限,但似乎不是。我已经更新了我的问题。我只需要列出我有权列出的所有对象。
【解决方案2】:

尽管您有权读取某些文件,但您可能缺少存储桶权限。如果您对 S3 存储桶没有列表对象权限,请尝试应用此策略

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::yourBucketName"
          ]
      }
  ]
}

【讨论】:

  • 谢谢@Juned Ahsan,我已经更新了我的问题。我的目标是只列出存储桶中我有权读取的对象。
  • @Allen 读取存储桶中的对象权限与列出存储桶内容不同。我已将上面的策略添加到列表对象的权限中。如果您拥有适当的权限,那么您的问题可能是其他问题
  • 感谢 Juned,我认为 read 和 list 是相同的权限,但似乎不是。我已经更新了我的问题。我只需要列出我有权列出的所有对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2022-01-05
  • 2018-09-21
相关资源
最近更新 更多