我有以下政策:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "Stmt1395852960432",
"Action": "s3:*",
"Effect": "Deny",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": [
"*"
]
}
},
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1IYJC432545JN"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是,这会拒绝来自所有请求者的请求,甚至是Cloudfront.这样做的正确方法是什么?
问题是客户端使用公共读取创建对象.我目前没有立即控制客户端来更改此设置.所以我想要的是拥有一个覆盖单个对象ACL的策略.所以默认否认这里不起作用.
所以亚马逊的Cloudfront CDN无处不在,作为NoScript用户,在不同的网站上允许每个"########.cloudfront.net"都会有点令人沮丧.现在有人如何在NoScript中创建ABE规则以允许来自*.cloudfront.net域的任何脚本?
我注意到了Amazon S3重定向规则 - 缺少GET数据,但在遵循接受的答案后,我的查询参数仍然没有被保留.
我有一个使用React和React Router的站点,这意味着我有几个URL加载相同的HTML和JS,然后JS根据URL确定要加载的应用程序的哪个部分.
例如:
/ foo,/ bar,/ baz都应该加载index.html,它会加载bundle.js.然后bundle.js观察URL并路由到一些React组件(也在bundle.js中).
但是S3中不存在foo,bar或baz文件,只有index.html.我想要做的是当我得到404,重定向到/#!/ {URL}(例如/ foo重定向到/#!/ foo).这适用于我的重定向规则(下面).但是,我也想带上查询参数(例如/ foo?ping = pong重定向到/#!/ foo?ping = pong)但是/ foo?ping = pong只是重定向到/#!/ foo.
这是我的重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>http</Protocol>
<HostName>www.mydomain.com</HostName>
<ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
Run Code Online (Sandbox Code Playgroud)
我能以某种方式获得任何想法吗?理想情况下,每次添加新页面时都不必在S3/CloudFront中进行更改?
redirect amazon-s3 amazon-web-services amazon-cloudfront react-router
我使用AWS证书无法使用Internet < - > CloudFront < - > S3 Bucket工作.这就是我做的:
创建分发后,我的浏览器都告诉我这个:
我不确定我是否错过了设置过程中的一个步骤,我试图摆弄各种参数,但没有任何东西让我通过.
想知道我在这里错过了什么.
UPDATE
阅读此博客文章,说我可能忘记添加备用CNAME.这让我有点困惑,不是吗?在Route 53中,我使用something.mydomain.com配置了我的完整域名,证书是通配符.
其他博客文章和问题答案表明我不应该像我一样使用A记录和CloudFront分发URL /端点.
我正在使用它terraform创建一个web-aclinaws并希望将其web-acl与 CloudFront 发行版关联起来。
所以,我的代码如下所示:
provider "aws" {
alias = "east1"
region = "us-east-1"
}
# -------------------------------------------
# -------------------------------------------
# Cloud Front
module "front_end_cloudfront" {
source = "./modules/front-end/CF"
# CF_ALIASES = ["terraformer-frontend.dev.effi.com.au"]
CF_LAMBDA_ARN = module.frontend_lambda.cf_lambda_qualified_arn
CF_BUCKET_DOMAIN_NAME = module.front_end_bucket.website_endpoint
CF_BUCKET_ORIGIN_ID = module.front_end_bucket.website_domain
CF_TAGS_LIST = { "Name" : "terraformer-front-end-cloudfrontv2" }
CF_CERTFICATE_ARN = var.CLOUDFRONT_US_EAST_1_ACM_ARN
# WEB_ACL = module.waf.web_acl_id
WEB_ACL = module.waf_cf.web_acl_id
depends_on = [module.waf_cf]
}
# -------------------------------------------
# -------------------------------------------
# WAF for CF
module "waf_cf" { …Run Code Online (Sandbox Code Playgroud) 我想从CloudFront提供我的压缩CSS/JS(他们生活在S3上),但我无法通过settings.py中的压缩器设置来解决这个问题,我有以下内容:
COMPRESS_OFFLINE = True
COMPRESS_URL = 'http://static.example.com/' #same as STATIC_URL, so unnecessary, just here for simplicity
COMPRESS_STORAGE = 'my_example_dir.storage.CachedS3BotoStorage' #subclass suggested in [docs][1]
COMPRESS_OUTPUT_DIR = 'compressed_static'
COMPRESS_ROOT = '/home/dotcloud/current/static/' #location of static files on server
Run Code Online (Sandbox Code Playgroud)
尽管有COMPRESS_URL,我的文件正在从我的s3存储桶中读取:
<link rel="stylesheet" href="https://example.s3.amazonaws.com/compressed_static/css/e0684a1d5c25.css?Signature=blahblahblah;Expires=farfuture;AWSAccessKeyId=blahblahblah" type="text/css" />
我想问题是我想将文件写入S3,但是从CloudFront读取它.这可能吗?
必须提出将Amazon S3与CloudFront一起用作CDN的建议.其中一个重要的事情是进行成本估算.我阅读了AWS网站和论坛,使用了他们的计算器,但无法得出最终数字(大约),我将对此充满信心.老实说,我对"数据传输","GET和其他请求"等术语感到困惑,以及我是否需要在Amazon S3和Amazon CloudFront上填写详细信息,然后进行总计.
所以在这里需要帮助来估算我的每月账单.
大多数客户群(几乎95%)都在美国.
平均文件大小:500KB
如果我能更好地理解我的每月账单将如何计算以及它将会是什么,那将会很棒.
此外,根据上述数据和估算,如果我使用Akamai或Rackspace,则每月账单的数量是多少.
我打算在公共桶中使用私有对象,从而限制对对象的访问,而不是桶中的其他对象.我想设置CloudFront以使用签名URL提供内容.现在在AWS S3文档中,我看到两个不同的术语,一个是用于访问私有对象的预签名URL,另一个是签名URL,需要下载私钥等并执行更多操作.
预签名URL和签名URL有什么区别?我可以
PreSigned在CloudFront中使用URL吗?
C#库有方法GetPreSignedURL,是否自动下载私钥等并进行签名或此GetPreSignedURL方法与S3 URL签名不同,需要设置私钥然后签署URL?
我们在cloudfront上设置了一个angularjs应用程序,该应用程序包含s3存储上的所有资产文件,并通过cloudfront用于SSL和性能.
我们的设置与本指南中描述的设置完全相同
https://rossfairbanks.com/2015/01/30/integrating-angular-s3-cloudfront.html
由于我们使用相同的帖子来创建我们自己的设置,似乎这适用于除Safari之外的所有浏览器.
在Safari上,当直接访问给定路径上的URL或刷新任何子页面时,ui-router会将用户页面重定向到登录页面.
但是对于暂存,我们有相同的设置,但直接在S3上运行而没有中间的CloudFront,因此没有SSL.但是,它似乎甚至在Safari上工作
所以,问题似乎是CloudFront和Safari更具体的问题.
任何人都可以建议可能的原因是什么?以及我们如何解决它?
更新:此问题可能与此错误有关https://bugs.webkit.org/show_bug.cgi?id=24175
在为签名cookie(非签名URL)使用CloudFront自定义策略时,是否可以创建具有多个语句的策略?
我已经阅读了文档,尽管所有示例都只有一个语句,但我看不到关于允许的语句数量的明确规则.
如果不可能有多个策略语句,则很难仅使用CloudFront安全性为特定用户提供签名cookie访问,即五个随机文件.任何有关如何做到这一点的提示将不胜感激.
这个问题在这里交叉发布:https://forums.aws.amazon.com/thread.jspa?threadID = 223440&tstart = 0