【问题标题】:How to stop other users seeing files uploaded to Amazon S3如何阻止其他用户看到上传到 Amazon S3 的文件
【发布时间】:2017-03-02 14:21:28
【问题描述】:
我有一个包含一个文件夹的 Amazon S3 存储桶。我的要求是让许多 IAM 用户通过管理控制台将文件上传到该文件夹。但是,用户不得查看/下载其他 IAM 用户上传的文件。
创建一个不同的文件夹并编写一个 IAM 策略来访问存储桶并为文件夹名称添加前缀是可以的,但我们不希望这样,因为我们有大约 100 个用户将上传文件。
【问题讨论】:
标签:
amazon-web-services
amazon-s3
acl
amazon-iam
【解决方案1】:
存储桶策略 + 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} 变量,您可以将这一策略应用于所有用户。只需让他们将自己的文件放在名称中带有自己用户名的文件夹中即可。