有没有办法更新存储在Amazon CloudFront(亚马逊的CDN服务)上的文件?似乎它不会对我们制作的文件进行任何更新(例如删除文件并使用与以前相同的文件名存储新文件).我是否必须明确触发更新过程以从边缘服务器中删除文件以获取已发布的新文件内容?
谢谢你的帮助
我似乎无法在文档中看到明显的答案.
当我在S3上更新文件并且启用了CloudFront时,S3是否会向CloudFront发送失效信号?或者我需要在更新文件后自己发送?
我试图看看哪个用户负责S3中的更改(在桶级别).我找不到在S3桶级别或EC2创建实例的操作的审计跟踪.Beanstalk记录了机器执行的操作,但不记录哪个用户.
有没有办法围绕AWS我们可以在IAM或任何其他位置看到此信息?
PS:我对了解提供访问日志的S3日志桶不感兴趣
amazon-s3 amazon-ec2 amazon-web-services amazon-cloudfront amazon-iam
我想让我的客户直接与ElasticSearch REST API对话,显然阻止他们执行任何数据或配置更改.
我看了一下ElasticSearch REST接口,我注意到了这种模式:HTTP GET请求非常安全(无害查询和集群状态).
所以我认为我可以将Cloudfront用作仅允许GET/HEAD方法的CDN /代理(您可以将其限制在主配置中).
到目前为止一切都很好,一切都已成立.但事情不起作用,因为我需要向全世界开放我的EC2安全组才能从Cloudfront访问!我真不想要这个!
当我将EC2与RDS一起使用时,我可以简单地允许访问RDS安全组中的EC2安全组.为什么我不能使用CloudFront执行此操作?或者我可以吗?
想法?
编辑:它没有记录,但ES接受facets查询,它涉及(JSON)主体,不仅使用POST,还使用GET.这通过不忽略GET请求(源)的主体来简单地破坏HTTP建议(对于RFC3616 ).这是因为,正如所指出的那样,直接暴露ES REST接口可能导致使用复杂查询的轻松DOS攻击.我仍然相信,少一个代理仍然值得.
编辑:我另一个选项是跳过CloudFront的并增加了安全层作为ElasticSearch插件,如图点击这里
rest http amazon-web-services elasticsearch amazon-cloudfront
我正在通过LIIPImagineBundle为Symfony2使用Imagine来创建存储在S3中的图像的缓存版本.
缓存的图像存储在CloudFront提供的支持S3 Web的存储桶中.但是,S3的默认LIIPImagineBundle实现对我来说太慢了(检查S3上的文件是否存在然后创建到缓存文件或解析功能的URL),所以我已经计算出了我自己的工作流程:
只要我不使用cloudfront,这工作正常.问题似乎是cloudfront正在缓存302重定向响应(即使http规范声明它们不应该).因此,如果我使用cloudfront,则客户端将在无限重定向循环中从Web服务器到云端来回发送,并且即使在生成文件之后,对文件的每个后续请求仍会重定向到Web服务器.
如果我直接使用S3而不是cloudfront,则没有问题,这个解决方案是可靠的.
根据亚马逊的文档 S3重定向规则不允许我指定自定义标头(设置缓存控制标头等),我不相信CloudFront允许我控制重定向的缓存(如果它们做得很好)隐).CloudFront的失效选项是如此有限,以至于我认为它们不会起作用(任何时候都只能使3个对象失效)...我可以在第一次重定向(来自Imagine webserver)上将参数传递回cloudfront来修复无穷无尽的重定向(例如image.jpg?1),但是对同一对象的后续请求仍然是302到网络服务器然后301返回到云端,即使它存在.我觉得应该有一个优雅的解决方案来解决这个问题,但它让我望而却步.任何帮助,将不胜感激!!
caching amazon-s3 amazon-web-services amazon-cloudfront liipimaginebundle
我的servlet应用程序部署到direct.albunack.net,www.albunack.net上有一个CloudFront缓存.
默认页面(index.jsp)是(艺术家)搜索.假设我们正在使用direct.albunack.net进入搜索并提交搜索到direct.albunack.net/artist/search./ artist下的所有内容都映射到一个servlet,这个servlet进行搜索,如果它只找到一个结果,那么它会重定向到direct.albunack.net/artist/ artistid - 这使用相同的servlet为该艺术家构建一个页面把它返还.
如果相反它找到多个结果然后将结果转发回index.jsp但显示多个结果,如果用户然后点击其中一个结果,它们将再次重定向到direct.albunack.net/artist/ artistid
到目前为止一直很好,当我使用www.albunack.net时会出现问题.Cloudfront默认(*)行为是缓存所有请求,而不是转发标头ectera.但是我们为/ artist/search路径添加了另一种行为,因此它不会缓存实际搜索.
当它找到多个结果时,它会重定向到http://www.albunack.net/index.jsp,然后点击其中一个选项重定向到http://www.albunack.net/artist/ artistid.
但我的问题(我认为)是因为搜索委托给direct.albunack.net时只有一个选择它重定向到http:// direct .albunack.net/artist/artistid绕过缓存并暴露我们的直接接口.
那么我该如何对此进行编码,如果我实际上对包括服务器在内的完整路径进行硬编码,那么在本地运行时它将不起作用,这是正确的方法.
Servlet代码提取:
if (!Strings.isNullOrEmpty(artistName))
{
//Look up artist for that id
MusicBrainzSearchArtist mbArtistSearch = new MusicBrainzSearchArtist();
List<Artist> mbArtists = mbArtistSearch.queryByArtistName(artistName);
if (mbArtists.size() == 0)
{
request.setAttribute(ERROR, InfoMessage.MSG_NO_RESULTS_FOUND.getMsg(artistName));
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
else if (mbArtists.size() == 1)
{
response.sendRedirect("/artist/" + mbArtists.get(0).getId());
return;
}
else
{
request.setAttribute(ERROR, InfoMessage.MSG_MULTIPLE_RESULTS_FOUND.getMsg(artistName));
request.setAttribute("results", mbArtists);
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
} …Run Code Online (Sandbox Code Playgroud) AWS S3和CloudFront的常见用例是提供私有内容.常见的解决方案是使用签名的CloudFront URL来访问使用S3存储的私有文件.
但是,生成这些URL需要付出代价:使用私钥计算任何给定URL的RSA签名.对于Python(或botoAWS的Python SDK),rsa(https://pypi.python.org/pypi/rsa)库用于此任务.在我2014年末的MBP中,使用2048位密钥每次计算大约需要25ms.
此成本可能会影响使用此方法授权通过CloudFront访问私有内容的应用程序的可伸缩性.想象一下,多个客户端请求以25~30ms/req频繁访问多个文件.
在我看来,虽然rsa上面提到的库最近更新了大约1.5年前,但在签名计算本身上并没有太多改进.我想知道是否有其他技术或设计可以优化此过程的性能以实现更高的可扩展性.或者我们是否只需要投入更多硬件并尝试以强力方式解决它?
一个优化可以是使API端点接受每个请求的多个文件签名,并批量返回签名的URL,而不是在单独的请求中单独处理它们,但计算所有这些签名所需的总时间仍然存在.
python web-applications amazon-s3 amazon-web-services amazon-cloudfront
我正在开发一个视频应用程序并将文件存储在AWS S3上,使用默认URL https://***.amazonaws.com/***工作正常,但我决定使用CloudFront,这对内容交付更快.
使用CF,我一直在403 (Forbidden)使用这个URL https://***.cloudfront.net/***.我错过了什么吗?
在我决定从CloudFront加载指向我的存储桶的内容之前,一切正常.
有解决方案吗?
所以我在s3上使用cloudfront dist托管了我的角度应用程序.我做文件修改(使用grunt filerev)以确保我永远不会得到陈旧的内容.但是,我应该如何对index.html文件进行版本控制.它是必需的,因为所有其他文件都在index.html中引用.
我已将我的存储桶配置为静态站点.因此,当我在url中引用存储桶时,它只会获取index.html.
Cloudfront说你应该将最小TTL设置为0,因此它总是会命中原点来提供内容.但是,我不需要这个,因为我正在对我的所有文件进行文件修订(index.html除外).我可以利用cdn缓存这些文件.
他们还说,为了使单个对象无效,请将max-age标头设置为0.我尝试将以下内容添加到我的index.html
<meta http-equiv="Cache-Control" content="public, must-revalidate, proxy-revalidate, max-age=0"/>
Run Code Online (Sandbox Code Playgroud)
但是,一旦您在s3上传,这就不会反映出来.我是否需要使用s3cmd或仪表板在s3上显式设置标头?每当index.html更改并上传它时,我是否需要这样做?
我知道我可以使用cmd使单个文件无效,但它是一个重复的过程,如果它只是通过在s3上部署就可以解决它本身.
我正在尝试使用Cloud Formation在我的CloudFrontDistribution中设置证书.
我的证书已通过证书管理器发出.它已被批准,我已经验证证书可以通过CloudFront控制台直接手动配置.
在我的CloudFormation模板中,我尝试在IamCertificateId属性中使用与证书关联的标识符和ARN值:
"ViewerCertificate" : {
"IamCertificateId" : "********",
"SslSupportMethod": "sni-only"
}
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下我都收到以下错误:
The specified SSL certificate doesn't exist, isn't valid, or doesn't include a valid certificate chain.
Run Code Online (Sandbox Code Playgroud)
阅读DistributionConfig Complex Type的文档,看起来有一个'ACMCertificateArn'属性,但这似乎不适用于CloudFormation.
任何帮助,将不胜感激.
ssl ssl-certificate amazon-web-services amazon-cloudfront aws-cloudformation