如何阻止其他用户看到上传到 Amazon S3 的文件

How to stop other users seeing files uploaded to Amazon S3

我有一个 Amazon S3 存储桶,其中有一个文件夹。我的要求是许多 IAM 用户通过管理控制台将文件上传到该文件夹​​。但是,用户必须无法 see/download 其他 IAM 用户上传的文件。

创建一个不同的文件夹并编写一个 IAM 策略来访问存储桶并在文件夹名称前添加前缀是可以的,但我们不希望这样,因为我们有大约 100 个用户将上传文件。

存储桶策略 + IAM 策略是唯一的出路。

S3 对象没有内置用户关联(与其他本地文件系统一样,如 NTFS 或 ext3/4)。

因此,将一个用户的文件与另一个用户的文件区分开来的唯一方法是将 ID 放入对象的键中或通过(可能)S3 对象的标签。

但是您无法使用存储桶策略来逃避。您可以通过巧妙地使用存储桶策略变量来避免编写许多策略,例如:

{
  "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}/*"]
    }
  ]
}

来源:IAM Policy Variables Overview

通过使用 $(aws:username} 变量,您可以将这一政策应用于所有用户。只需让他们将自己的文件放在名称中包含自己用户名的文件夹中即可。