我有一个Amazon S3 Bucket,里面有一个文件夹。我的要求是许多IAM用户通过管理控制台将文件上传到该文件夹。但是,用户必须无法查看/下载其他IAM用户上传的文件。
创建一个不同的文件夹并编写IAM策略来访问存储桶并为文件夹名称添加前缀很好,但我们不希望这样,因为我们有大约100个用户将上传文件。
答案 0 :(得分:4)
Bucket政策+ 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}
变量,您可以将此策略应用于所有用户。只需让他们将自己的文件放在名称中带有自己用户名的文件夹中。