目前,我正在努力为我的 Amazon S3 存储桶创建安全策略。我的计划是让一个存储桶包含多个子文件夹,供不同的 (IAM) 用户使用。访问只能通过访问 ID 和密钥以编程方式进行,而不能通过控制台进行。
状况:
每个用户只能访问他自己的文件夹并且不应该看到存储桶中的其他文件夹。
每个用户只应具有在其文件夹内 PutObject(存储)、GetObject(下载)、DeleteObject(删除)的权限。
不应允许用户做任何其他事情,例如创建自己的存储桶;越严格越好。
供参考:
文件夹用于存储每个用户的系统备份和个人数据,因此至关重要的是,其他用户无法看到其他用户文件夹中的内容。
我在亚马逊上发现了以下政策,但我不确定该政策是否足够严格,可以像上面提到的那样保护和限制访问。
并且“ListAllMyBuckets”真的有必要吗?或者是否会像这个例子所说的那样,导致每个用户都可以看到我帐户中的其他存储桶?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"home/",
"home/${aws:username}/*"
]
}
}
},
{
"Effect": "Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::bucket-name/home/${aws:username}",
"arn:aws:s3:::bucket-name/home/${aws:username}/*"
]
}
]
}
我对 AWS S3 还很陌生,因此如果能就我的问题提供任何帮助我将非常感谢。
谢谢!
答案1
这是一道经典的 AWS 考试题目。AWS 政策很好,对于大多数用途来说足够安全。回答您的问题:
- 如果用户使用 S3 浏览器,则需要“ListAllMyBuckets”,否则他们无法查看可以访问的存储桶列表。如果有人知道您的存储桶名称,只要它们得到妥善保护,那就没关系了。
- 出于类似的原因,可能需要“GetBucketLocation”,并带有类似的注释。
- “ListBucket”允许用户列出存储桶的根目录、主文件夹以及主文件夹中的文件夹,但不能列出其他用户的存储桶。他们可以看到其他用户的名称
- 最后一个子句 PutObject / GetObject / DeleteObject 加上末尾带有“version”的相同调用允许用户存储、检索和删除对象(包括版本控制对象)。