如何使用自定义CNAME隐藏AWS S3存储桶URL

时间:2019-02-15 07:45:21

标签: amazon-web-services amazon-s3 cdn

我想将CDN连接到AWS S3存储桶,但是AWS Document指示存储桶名称必须与CNAME相同。因此,很容易猜测其他人的真实s3存储桶url。

例如,

- My domain: example.com  
- My S3 Bucket name: image.example.com  
- My CDN CNAME(image.example.com) will point to image.example.com.s3.amazonaws.com

此后,人们可以访问CDN URL-> http://image.example.com以从我的S3存储桶中获取资源。但是,在此限制下,人们可以轻松地从CNAME(CNAME + s3.amazonaws.com)猜测我的真实S3存储桶网址。

所以,我的问题是如何隐藏真实的s3存储桶url?因为我不想向任何人公开我的真实S3网址以防止任何攻击。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的要求或尝试做的事情(隐藏存储桶并不能真正帮助您),但是我将尝试回答有关“隐藏”存储桶名称的问题。在问之前,我想问两个问题:

  • 您为什么要隐藏s3存储桶url?
  • 您要阻止什么样的攻击?

您正确地认为s3存储桶名称必须与您的网址相同。这是不再的要求,因为您可以使用cloudfront屏蔽s3存储桶。如您所知,CloudFront是AWS的CDN。因此,存储桶名称可以是任何东西(随机字符串)。

您可以限制对存储桶的访问,以便只有CloudFront可以访问它。然后将存储桶中的数据复制到边缘位置并从那里进行服务。即使有人知道s3网址,它也不会做任何事情,因为对s3存储桶的访问受到限制,IAM规则授予CloudFront访问权限,而没有其他人。

访问限制是通过原始访问来完成的,虽然您可以使用存储桶策略手动配置此访问,但也可以在CloudFront中设置一个标志来代表您执行此操作。 here中提供了更多信息。

在Route53中使用CloudFront名称。不要使用CNAME,而是使用A类型,并将其设置为别名。有关更多信息,请参见此document

如果您使用其他DNS提供程序,则AWS别名自然将不可用。我建议将区域文件从您的其他提供商移动到AWS。如果您不能执行此操作,则仍然可以使用CNAME。再次查看here,了解更多信息。

我建议对CloudFront使用您自己的域名并设置HTTPS。 AWS免费提供证书给AWS内的服务。您可以为域名注册证书,该证书可以通过DNS条目或电子邮件进行验证。要进行设置,请参见此document

如果您想限制对AWS中特定文件的访问,可以使用签名的URL。 here提供了有关此信息的更多信息。