【问题标题】:Delete Permissions for files in S3 bucket删除 S3 存储桶中文件的权限
【发布时间】:2015-06-23 17:42:53
【问题描述】:

我的应用允许用户使用 Google Plus 登录。我有一个供所有用户使用的通用存储桶。任何人都可以上传/下载文件。但问题是任何人都可以删除该文件。如何设置权限以便任何人都可以上传/下载文件,但只有上传文件的用户才能删除文件? 这是我的 Roles->Inline Policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            "s3:AbortMultipartUpload",
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::uni-cloud/*"
            ]
        }
    ]
}

【问题讨论】:

  • “任何人”都可以上传文件吗?即使没有登录到您的应用程序(如果他们知道存储桶名称)?
  • 不,我的意思是任何经过身份验证的用户都可以上传文件
  • 那么,您的应用程序正在为用户操作生成签名 URL?

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


【解决方案1】:

存储在 Amazon S3 中的对象不会识别“上传文件的用户”。因此,您需要通过其他方式来确定允许他们访问哪些文件。

最简单的方法是为每个用户提供自己的子目录,然后授予他们仅在该子目录中上传/下载/删除对象的权限。

然后您可以创建一个使用IAM Policy Variables 授予权限的角色,使用用户的标识符作为子目录的名称。该政策如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}

【讨论】:

  • 谢谢,另一个小问题,在用户之间共享文件的最佳方式是什么?
  • 最好发布另一个问题,以便其他人可以从答案中受益。尝试使用像 Expandrive 和 Cloudberry Drive 这样的产品,它们可以提供 Dropbox 类型的体验,而无需学习 S3 的特殊知识。
  • 另外使用 Amazon Cognito(或 Web 身份联合)可能会使移动用例更容易做到这一点。 (查看链接docs.aws.amazon.com/STS/latest/UsingSTS/…
【解决方案2】:

如果您为该存储桶中的每个用户创建文件夹,那么您可以让他们仅删除该文件夹中的对象。您可以使用 IAM 策略进行操作,请访问 here

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 2021-06-22
    • 2018-05-16
    • 2022-12-09
    • 2021-09-06
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多