标题或多或少都说明了一切.从Cloudfront管理控制台的"限制查看器访问"部分(下图)使用单选按钮这一事实来看,它似乎是一种情况.
问题:是否有其他方法可以解析一个S3的存储桶,使其既可以公开(也可以是任何人查看),也可以包含私有(即签名网址)内容?
我在S3中为我的静态站点设置了路由规则; 但是,似乎cloudfront不遵守这些相同的规则.它至少不遵守索引文件规则.
无论如何在云端设置类似于s3的路由?有更强大的路由解决方案吗?
我正在使用Rails + Paperclip + S3.我希望使用我的一个S3存储桶将我的资产托管到Cloudfront.
我知道Cloudfront会缓存资产,但您可以通过将其配置为从源转发查询字符串来中断该缓存.
当我修改资产时,我预计会发生这种情况
updated_atActiveRecord对象的时间戳已更新.updated_at时间.但是,Paperclip看起来没有正确更新updated_at时间戳.也许它以某种方式缓存.因此,查询字符串不会更新,Cloudfront也不会中断缓存.
我的模型是:
class UserImage < ActiveRecord::Base
has_attached_file :image
end
>> ui = UserImage.find(576925)
>> ui.image.class
=> Paperclip::Attachment
>> ui.touch
>> ui.updated_at.to_i
=> 1386241041
>> ui.image.updated_at
=> 1386240937
Run Code Online (Sandbox Code Playgroud)
这两个updated_at时间戳应该是相同的.
目前我们有一个静态站点部署到 ECS(弹性容器服务)并由 ELB(弹性负载均衡器)前端。这个模型没有意义,因为容器只是运行 NGINX 来服务静态资产。
然而,我们从这个模型中得到的是,仅通过 VPN 访问网站(我们的 VPN 客户端将所有 10.x 流量转发到我们的 VPC),以及 ELB 上的 HTTPS 侦听器,这些都是我们想要保留的.
将这个目前只能通过 VPN 访问的静态站点迁移到通过 HTTPS 从 S3/Cloudfront 提供服务并且只能通过 VPN 访问的最佳方法是什么?
我们具有与此答案相同的 VPN 配置。这个答案对我们有用,但它没有解决 S3 存储桶 IP 可能发生变化的问题(这会使 VPN 客户端上提议的路由规则无效),而且我不清楚如何让 HTTPS 与此一起工作(AFAIK,您需要将 CF 放在 S3 静态站点的前面,但我不确定如何通过我们的 VPN 将流量路由到 Cloudfront。)
我们已经手动和使用 terraform 创建了一些基础设施,包括一些 s3 存储桶。将来我想使用纯 CloudFormation 将基础设施定义为代码。
所以我创建了一个 CloudFormation yaml 定义,它引用了一个现有的存储桶:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TheBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-existing-bucket-name
Run Code Online (Sandbox Code Playgroud)
当我尝试应用它时,执行失败,出现 CloudFormation 堆栈事件:
The following resource(s) failed to update: [TheBucket].
12:33:47 UTC+0200 UPDATE_FAILED AWS::S3::Bucket TheBucket
my-existing-bucket-name already exists
Run Code Online (Sandbox Code Playgroud)
如何在不重新创建现有资源的情况下开始使用 CloudFormation管理现有资源?还是设计上不可能?
我试图按照这里的说明https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2
我让CloudFront成功地坐在静态S3"hello world"HTML文件前面,我想使用lambda edge设置其他标头,但是我收到错误.真正令人沮丧的是,我找不到任何错误日志来调试出错的地方.这是浏览器显示的内容.
ERROR
The request could not be satisfied.
The Lambda function returned an invalid request or response to CloudFront.
Generated by cloudfront (CloudFront)
Request ID: 2Cqex7euzH0Iigps58i9tMVxdqAaLznL2ZjwqR1sW1AZHz6x2EwfMA==
Run Code Online (Sandbox Code Playgroud)
这是我的简单lambda的代码:
exports.handler = (event, context, callback) => {
console.log(event)
callback(null, 'Hello from Lambda');
};
Run Code Online (Sandbox Code Playgroud)
触发器类型是viewer-response并且附加到我的CloudFront分配(Cache Behavior: *如果这很重要的话).lambda具有AWSLambdaBasicExecutionRole与之对应的角色,从而为Cloudwatch提供写入权限.
一旦启用触发器,对Web请求的响应就会从我的"Hello world"HTML变为上面的错误,所以我知道它正在触发lambda.但是在lambda仪表板中,它没有显示任何调用或错误.Cloudwatch中不显示任何日志.CloudFront仪表板显示errors(5xx),但没有lambda.
如果我然后通过单击已部署的函数在lambda控制台中测试我的函数,将测试事件配置为"CloudFront Modify Response Header"并按下Test,则表示该函数成功.Cloudwatch显示测试的日志和控制台输出!但是在实时调用的日志中仍然没有任何内容.
我唯一的理论是权限有问题,CloudFront实际上无法调用lambda(解释为什么lambda仪表板中没有任何内容).最后一件事是CloudFront日志(在S3中)显示带有502错误的Web请求LambdaValidationError,但我无法弄清楚这是否有帮助.
嗨,我已按照此说明尝试使用 Cloudfront 和 lambda@edge 调整图像大小。当我尝试测试调整大小的图像时,我不断收到以下错误消息:
与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限。
于是查了一下开头提到的那篇文章提供的云形成创建的lambda函数,发现里面没有触发器。
我尝试手动设置它,但收到以下错误消息:
CloudFront 事件不能与 $LATEST 或别名关联。选择操作以发布新版本的函数,然后重试关联。
我按照错误消息中的说明进行操作;发布,并将 Cloudfront 添加为触发器,但似乎无法应用它。它仍在运行没有 Cloudfront 作为触发器的那个。
有什么方法可以将 Cloudfront 设置为触发器并使其正常工作?
amazon-web-services amazon-cloudfront aws-cloudformation aws-lambda aws-lambda-edge
我在使用CloudFront生成签名URL时遇到问题.无论我尝试什么,我只是得到一个"拒绝访问"的回复.
我在CloudFront中创建了一个发行版,以及一个CloudFront密钥对ID.我已经下载了该密钥对ID的私钥和公钥.
在一个简单的PHP脚本中,我正在尝试以下方法:
use Aws\CloudFront\CloudFrontClient;
$cloudfront = new CloudFrontClient([
'credentials' => [
'key' => '[redacted]', // Access key ID of IAM user with Administrator policy
'secret' => '[redacted]', // Secret access key of same IAM user
],
'debug' => true,
'region' => 'eu-west-1',
'version' => 'latest',
]);
$expires = strtotime('+6 hours');
$resource = 'https://[redacted].cloudfront.net/mp4/bunny-trailer.mp4';
$url = $cloudfront->getSignedUrl([
'url' => $resource,
'policy' => json_encode([
'Statement' => [
[
'Resource' => $resource,
'Condition' => [
'DateLessThan' => [
'AWS:EpochTime' => $expires,
], …Run Code Online (Sandbox Code Playgroud) 我有一个带有 Cloudfront CDN 的 S3 Bucket。在那个桶中,我有一些 woff2 字体,它们自动标记了内容类型octet-stream。尝试从实时制作网站上的 CSS 文件加载该字体时,出现以下错误:
Access to Font at 'https://cdn.example.com/fonts/my-font.woff2' from origin
'https://www.live-website.com' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://www.live-website.com' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
问题是卷曲表明 Access-Control-Allow-Origin存在:
HTTP/1.1 200 OK
Content-Type: binary/octet-stream
Content-Length: 98488
Connection: keep-alive
Date: Wed, 08 Aug 2018 19:43:01 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Last-Modified: Mon, 14 Aug 2017 14:57:06 GMT
ETag: "<redacted>"
Accept-Ranges: bytes
Server: AmazonS3 …Run Code Online (Sandbox Code Playgroud) 我只是想在 nodejs 中使用 Cowin Setu API(印度)发出 covid 疫苗警报。但是我遇到了一些奇怪的事情,每当我点击获取请求时,我都会收到来自 cloudfront 的 403 响应代码说“请求已阻止”,但邮递员和浏览器也是如此。请帮助我
收到此错误:-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner. …Run Code Online (Sandbox Code Playgroud)