【问题标题】:How to specify public-read policy on a complete bucket in aws?如何在 aws 中指定完整存储桶的公共读取策略?
【发布时间】:2016-02-14 05:37:42
【问题描述】:

我有一个名为 foo 的存储桶,里面有两个名为 bar 和 foobar 的子文件夹。

层次结构

foo
  -bar
  -foobar

问题

现在我想让我上传的对象公开可读。使用 xhr(通过允许 CORS)我能够做到这一点。但是使用 AWS android sdk,公共读取 acl 仍未在其 api 中实现,如 feature request on GITHUB

所指定

显然我无法使用 AWS Android sdk

制作我上传的对象

所以请帮我解决这个问题。

【问题讨论】:

    标签: android amazon-web-services amazon-s3


    【解决方案1】:

    这可以通过 S3 存储桶策略来完成。见Bucket Policy Examples。看起来您需要的是允许匿名读取存储桶下的对象。您可以将以下存储桶策略应用于存储桶foo

    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Sid":"AddPerm",
          "Effect":"Allow",
          "Principal": "*",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::foo/bar/*","arn:aws:s3:::foo/foobar/*"]
        }
      ]
    }
    

    这也应该回答Github上的问题。

    【讨论】:

    • 我可以添加更多的委托人,比如我自己使用 AWS-ACCOUNT-ID 吗?
    • 这对我有用..非常感谢,但你能在第一条评论中回答我的问题吗?
    • 是的,但它不会将对象设为帐户私有吗?您需要该帐户的凭据才能访问它们。
    • 我在第一条评论中的意思是,如果我可以将 AWS-ACCOUNT-ID 与 *(星号)并行(在单独的语句块中)?可以说第二个语句,只允许给我自己(所有者)放一个
    • 是的。您可以应用多个语句,其中一个以您的帐户 ID 为原则。仅供参考,您作为所有者应该始终拥有存储桶的完全权限。因此,该声明可能没有用。存储桶策略和 IAM 策略使访问控制变得混乱。请阅读blogs.aws.amazon.com/security/post/TxPOJBY6FE360K/…了解更多信息。
    【解决方案2】:

    传输管理器目前不支持ACL;但是,您可以使用AmazonS3Client 来执行putObject()。您可以查看适用于 Android 的 AWS 移动开发工具包API Reference 了解更多详细信息。

    【讨论】:

    • AmazonS3Client 未被弃用。
    • 好的。谢谢,但是由于我现在已经实现了大部分内容,因此走这条路需要的时间超出了我的承受能力。但很高兴知道这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多