【发布时间】:2016-11-15 01:55:30
【问题描述】:
我的目标是让浏览器只将表单上传到 S3 存储桶中。我按照这里的说明进行操作:
http://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTExamples.html
在其中,需要创建一个策略文档,然后使用秘密访问密钥对其进行签名。如果我完全按照说明操作,使用我的管理员级别帐户(例如,访问所有内容),一切正常。
我希望有一个特定此功能的用户帐户,并使用该用户的凭据签署文档。这样,我可以随时轻松地弃用密钥(或整个用户)。但是,说明中并未准确列出(我也无法从 google/experimentation 中找出)此用户在 IAM 中需要什么权限才能签署文档。我什至尝试过与下面的策略一样宽(我将存储桶名称重命名为 my-bucket),这足以让用户登录 S3 的 Web 界面并完全从那里管理存储桶。但是,使用上传表单仍然会导致访问被拒绝。请注意,我希望的行为是仅允许此用户将文件上传到特定存储桶中的特定文件夹。不删除、获取等。
{
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource":"arn:aws:s3:::my-bucket"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource":"arn:aws:s3:::my-bucket/*"
}
]
}
【问题讨论】:
-
"您在表单中指定的每个表单字段(AWSAccessKeyId、签名、文件、策略和具有 x-ignore- 前缀的字段名称除外)必须包含在条件”(在表格中包含的政策文件中)。您的表单中是否有任何字段不在您生成的政策文档中?
-
不,我相信它是洁净的。如果我使用管理员用户的密钥和秘密签署政策文档,它就可以工作。我只想创建一个仅有权签署此文档的用户。
标签: amazon-web-services amazon-s3