我已经做了很长时间了,我无处可去。
我创建了一个用户,它给了我
AWSAccessKeyId
AWSSecretKey
我创建了一个存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::abc9876/*"
}
]
}
现在,当我使用gulp程序上传到存储桶时,我看到了:
[20:53:58]开始'部署' ... [20:53:58]完成了部署' 25毫秒后 [20:53:58] [cache] app.js 进程以代码0终止。
对我来说,它看起来应该有效,但当我进入控制台时,我看不到任何东西。
有人可以告诉我,我的存储桶政策是否正确,并就如何测试上传提供一些建议。我可以从命令行测试一下吗?
答案 0 :(得分:2)
有多种方法可以管理S3上的访问控制。可以同时使用这些不同的机制,并且请求的授权将是所有这些机制中所有规则的交互的结果。事情可能会让人感到困惑!
让我们试着让事情更容易理解。你有:
每当您向S3发送请求时,例如下载对象时,请求将由授权系统处理。该系统将计算上述所有策略/规则的 union ,然后将遵循可简化如下的过程:
假设您拥有所有机制。对于要接受的请求,您不得有任何规则拒绝该请求,并且至少需要有一个允许该请求的规则。
我建议您简化政策 。选择一种访问控制机制,并使用坚持那个。
在您的具体情况下,从您的简短描述中,我认为使用 IAM政策可能是一个好主意。您可以使用IAM用户策略(您定义并专门附加到IAM用户)或IAM组策略(您定义并附加到IAM用户所属的组)。让我们忘记IAM Roles,这是一个完全不同的故事。
然后删除您的ACL和存储桶策略。那时你的请求应该被允许。
作为附加提示,请确保用于将对象上传到S3的软件实际上正在使用这两个API调用:PutObject
和PutObjectAcl
。请注意, S3通过使用一组不同的API调用支持多部分上传。如果您的工具正在进行多部分上传,那么一定要允许这些API调用(许多工具将包括AWS CLI,而且许多SDK都有更高级别的S3 API也会这样做)!
有关此问题的更多信息,我建议AWS安全博客发布以下帖子:
IAM policies and Bucket Policies and ACLs! Oh My! (Controlling Access to S3 Resources)
答案 1 :(得分:0)
您不需要定义“Principal”:“*”,因为您已经创建了IAM用户
Bucket Policy看起来很好,如果访问存在问题,它会给你一个合适的错误。
在调用AWS API时确保您的“Keyname”正确无误,AWS API是唯一标识存储桶中对象的键名。
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html