AWS S3 GET返回状态代码403

时间:2016-03-28 13:57:19

标签: node.js amazon-web-services amazon-s3 aws-sdk

我正在使用node aws-sdk与已使用以下政策设置的用户:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1458935963000",
        "Effect": "Allow",
        "Action": [
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::mybucket1/*"
        ]
    }
 ]
}

存储桶本身没有附加任何明确的政策。 Permissions设置如下: enter image description here

以下内容产生403

<video src="https://s3-us-west-2.amazonaws.com/mybucket1/default21.mp4">
</video>

存储桶名称已更改,但S3与视频一起存在。任何帮助将不胜感激。

更新1 即使使用aws-sdk S3帐户启动root/owner,也会获得相同的结果。

1 个答案:

答案 0 :(得分:0)

您的<video>标记未使用您的nodejs代码已设置的身份验证机制。

视频标记在浏览器中加载,浏览器对AWS SDK或您的节点服务器一无所知。

您需要use a pre-signed URL来获取视频代码。

在服务器上生成URL,然后在视频标记中使用该URL。例如,如果您正在使用Express:

router.get("/whatever", function(req, res, next){


  var params = {Bucket: 'mybucket', Key: 'default21.mp4'};
  var url = s3.getSignedUrl('getObject', params);

  res.render("some/view", {
    videoUrl: url
  });

});