@@ -22,15 +22,16 @@ module "cloudfront_firewall_waf_v2" {
2222}
2323
2424resource "aws_cloudfront_distribution" "s3_presign_mask" {
25- price_class = " PriceClass_100"
26-
25+ price_class = " PriceClass_100"
2726 aliases = [local . cloudfront_full_domain_name ]
2827 wait_for_deployment = false
28+
2929 origin {
3030 domain_name = module. ndr-lloyd-george-store . bucket_regional_domain_name
3131 origin_id = module. ndr-lloyd-george-store . bucket_id
3232 origin_access_control_id = aws_cloudfront_origin_access_control. s3 . id
3333 }
34+
3435 enabled = true
3536 is_ipv6_enabled = true
3637
@@ -42,6 +43,12 @@ resource "aws_cloudfront_distribution" "s3_presign_mask" {
4243 cache_policy_id = local. cloudfront_cache_policy_id
4344 origin_request_policy_id = local. cloudfront_viewer_policy_id
4445
46+ function_association {
47+ # IF THIS IS EVER COPIED TO A NEW BEHAVIOR, THE FUNCTION MUST BE UPDATED TO ALLOW THE NEW PATH
48+ event_type = " viewer-request"
49+ function_arn = aws_cloudfront_function. block_invalid_urls . arn
50+ }
51+
4552 lambda_function_association {
4653 event_type = " origin-request"
4754 lambda_arn = module. edge-presign-lambda . qualified_arn
@@ -63,6 +70,12 @@ resource "aws_cloudfront_distribution" "s3_presign_mask" {
6370 cache_policy_id = local. cloudfront_cache_policy_id
6471 origin_request_policy_id = local. cloudfront_viewer_policy_id
6572
73+ function_association {
74+ # IF THIS IS EVER COPIED TO A NEW BEHAVIOR, THE FUNCTION MUST BE UPDATED TO ALLOW THE NEW PATH
75+ event_type = " viewer-request"
76+ function_arn = aws_cloudfront_function. block_invalid_urls . arn
77+ }
78+
6679 lambda_function_association {
6780 event_type = " origin-request"
6881 lambda_arn = module. edge-presign-lambda . qualified_arn
@@ -84,6 +97,12 @@ resource "aws_cloudfront_distribution" "s3_presign_mask" {
8497 cache_policy_id = local. cloudfront_cache_policy_id
8598 origin_request_policy_id = local. cloudfront_uploader_policy_id
8699
100+ function_association {
101+ # IF THIS IS EVER COPIED TO A NEW CLOUDFRONT [ordered_cache_behavior] BEHAVIOR, THE FUNCTION MUST BE UPDATED TO ALLOW THE NEW PATH
102+ event_type = " viewer-request"
103+ function_arn = aws_cloudfront_function. block_invalid_urls . arn
104+ }
105+
87106 lambda_function_association {
88107 event_type = " origin-request"
89108 lambda_arn = module. edge-presign-lambda . qualified_arn
@@ -102,11 +121,20 @@ resource "aws_cloudfront_distribution" "s3_presign_mask" {
102121 locations = local. allow_us_comms ? [" GB" , " US" ] : [" GB" ]
103122 }
104123 }
124+
105125 web_acl_id = try (module. cloudfront_firewall_waf_v2 [0 ]. arn , " " )
106126
107127 depends_on = [aws_acm_certificate_validation . cloudfront ]
108128}
109129
130+ resource "aws_cloudfront_function" "block_invalid_urls" {
131+ name = " ${ terraform . workspace } -block-invalid-urls"
132+ runtime = " cloudfront-js-2.0"
133+ comment = " Blocks invalid URL requests"
134+ publish = true
135+ code = file (" ${ path . module } /code/dist/block-invalid-urls.js" )
136+ }
137+
110138resource "aws_cloudfront_origin_request_policy" "viewer" {
111139 count = local. is_sandbox ? 0 : 1
112140 name = " ${ terraform . workspace } _BlockQueriesAndAllowViewer"
0 commit comments