forked from okubo-t/aws-cloudformation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paths3-cloudfront-sorry.yml
More file actions
136 lines (121 loc) · 3.64 KB
/
Copy paths3-cloudfront-sorry.yml
File metadata and controls
136 lines (121 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
AWSTemplateFormatVersion: "2010-09-09"
Description:
S3 and CloudFront for Sorry Page Create
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "S3 and CloudFront Configuration"
Parameters:
- BucketName
- CName01
- CName02
- CFSSLCertificateId
ParameterLabels:
BucketName:
default: "BucketName"
CName01:
default: "CName01"
CName02:
default: "CName02"
CFSSLCertificateId:
default: "CFSSLCertificateId"
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
BucketName:
Type: String
CName01:
Type: String
Default: ""
CName02:
Type: String
Default: ""
CFSSLCertificateId:
Type: String
Conditions:
IsCName01: !Not [!Equals [!Ref CName01, ""]]
IsCName02: !Not [!Equals [!Ref CName02, ""]]
Resources:
# ------------------------------------------------------------#
# S3 Bucket
# ------------------------------------------------------------#
# Bucket
Bucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref BucketName
CloudFrontOriginAccessIdentity:
Type: "AWS::CloudFront::CloudFrontOriginAccessIdentity"
Properties:
CloudFrontOriginAccessIdentityConfig:
Comment: !Sub "access-identity-${Bucket}"
BucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref Bucket
PolicyDocument:
Statement:
- Action: "s3:GetObject"
Effect: Allow
Resource: !Sub "arn:aws:s3:::${Bucket}/*"
Principal:
CanonicalUser: !GetAtt CloudFrontOriginAccessIdentity.S3CanonicalUserId
# ------------------------------------------------------------#
# CloudFront
# ------------------------------------------------------------#
CloudFrontDistribution:
Type: "AWS::CloudFront::Distribution"
Properties:
DistributionConfig:
PriceClass: PriceClass_All
Aliases:
- !If [IsCName01, !Ref CName01, !Ref "AWS::NoValue"]
- !If [IsCName02, !Ref CName02, !Ref "AWS::NoValue"]
Origins:
- DomainName: !GetAtt Bucket.DomainName
Id: !Sub "S3origin-${BucketName}"
S3OriginConfig:
OriginAccessIdentity: !Sub "origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}"
DefaultCacheBehavior:
TargetOriginId: !Sub "S3origin-${BucketName}"
ViewerProtocolPolicy: redirect-to-https
AllowedMethods:
- GET
- HEAD
CachedMethods:
- GET
- HEAD
DefaultTTL: 3600
MaxTTL: 86400
MinTTL: 60
Compress: true
ForwardedValues:
Cookies:
Forward: none
QueryString: false
ViewerCertificate:
SslSupportMethod: sni-only
MinimumProtocolVersion: TLSv1.1_2016
AcmCertificateArn: !Sub "arn:aws:acm:us-east-1:${AWS::AccountId}:certificate/${CFSSLCertificateId}"
HttpVersion: http2
Enabled: true
CustomErrorResponses:
- ErrorCode: 403
ErrorCachingMinTTL: 30
ResponsePagePath: /index.html
ResponseCode: 503
# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------#
Outputs:
#BucketName
BucketName:
Value: !Ref Bucket
#DistributionID
DistributionID:
Value: !Ref CloudFrontDistribution
#DmainName
DomainName:
Value: !GetAtt CloudFrontDistribution.DomainName