我应该如何设置我的存储桶策略以便部署到S3?

时间:2014-12-21 14:08:24

标签: amazon-web-services amazon-s3

我已经做了很长时间了,我无处可去。

我创建了一个用户,它给了我

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终止。

对我来说,它看起来应该有效,但当我进入控制台时,我看不到任何东西。

有人可以告诉我,我的存储桶政策是否正确,并就如何测试上传提供一些建议。我可以从命令行测试一下吗?

2 个答案:

答案 0 :(得分:2)

有多种方法可以管理S3上的访问控制。可以同时使用这些不同的机制,并且请求的授权将是所有这些机制中所有规则的交互的结果。事情可能会让人感到困惑!

让我们试着让事情更容易理解。你有:

  • IAM政策 - 这些是您为特定用户或群组(或角色定义的政策,但我们不会涉及......)。
  • S3存储桶策略 - 这些是您在存储桶级别定义的策略。
  • S3 ACL(访问控制列表) - 这些是您在存储桶级别和对象级别定义的规则。这是对另一个答案的评论中提到的权限区域

每当您向S3发送请求时,例如下载对象时,请求将由授权系统处理。该系统将计算上述所有策略/规则的 union ,然后将遵循可简化如下的过程:

  • 如果有任何明确拒绝请求的规则,则会被拒绝。期。否则...
  • 否则,如果有明确允许请求的规则,则允许。期。否则...
  • 否则,请求被拒绝。

假设您拥有所有机制。对于要接受的请求,您不得有任何规则拒绝该请求,并且至少需要有一个允许该请求的规则。


让您的政策更易于理解......

我建议您简化政策 。选择一种访问控制机制,并使用坚持那个。

在您的具体情况下,从您的简短描述中,我认为使用 IAM政策可能是一个好主意。您可以使用IAM用户策略(您定义并专门附加到IAM用户)或IAM组策略(您定义并附加到IAM用户所属的组)。让我们忘记IAM Roles,这是一个完全不同的故事。

然后删除您的ACL和存储桶策略。那时你的请求应该被允许。

作为附加提示,请确保用于将对象上传到S3的软件实际上正在使用这两个API调用:PutObjectPutObjectAcl。请注意, 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