cloudfront保护亚马逊s3中的文件?

时间:2017-08-25 06:16:48

标签: node.js amazon-s3 amazon-cloudfront

我已将文件上传到亚马逊s3水桶。 在s3中单击上传的文件时,它为我提供了上传文件的属性和上传文件的链接。当我复制粘贴链接到浏览器时,文件会被下载。

我的存储桶政策如下。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*"
        }
    ]
}

但是当我们将链接粘贴到浏览器中时,我不希望我的音频/视频/图像文件被下载。而只能通过我的网站显示音频/视频/图像文件。 为了达到这个目的,我已经使用了,

npm aws-cloudfront-sign 
cfUtil = require(aws-cloudfront-sign )

我使用上面的npm模块创建了一个签名的URL:

var cfKeypairId = 'AJDS2LD3KSD5SJSDKJSA(sample key pair)';
var cfURL = 'http://my_domain_name'+file_path;  
//my domain name is something that starts with smb...cloudfront.net  
var signedUrl = cfUtil.getSignedUrl(cfURL, {
  keypairId: cfKeypairId,
  expireTime: Date.now() + 60000,
  privateKeyString: ???
});

我应该在私人密钥字符串中给出什么? 什么应该是我的桶政策? 我该怎么办CName的? 有人可以简单地说出这个吗?

1 个答案:

答案 0 :(得分:1)

您可以使用AWS Web Console中的Security Credentials Section(使用Root帐户登录)获取CloudFront密钥对ID和私钥。

在您的S3存储桶策略中,您可以拒绝公开访问,并且只允许AWS CloudFront中的Origin Access Identity访问S3。

如果您计划自定义服务文件的域名(URL),则可以使用AWS Route53或使用任何其他DNS提供程序为其使用CName映射。