以前、SPAの開発をする際にAWSのリソースをCloudFormationで書いていたのですが、CloudFrontはコンソールで設定していたので、ここもCloudFormationで書きたいと思ったので方法を調査しました。
コードは以下になります。説明用の切り出しなのでこのまま使えないので気をつけてください。
# bucket
AssetsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: bucket-name
# bucket policy
AssetsBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref AssetsBucket
PolicyDocument:
Statement:
- Action: s3:GetObject
Effect: Allow
Resource: !Sub arn:aws:s3:::${AssetsBucket}/*
Principal:
AWS: !Sub arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${CloudFrontOriginAccessIdentity}
# CloudFront
AssetsDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- Id: S3Origin
DomainName: !Get AttAssetsBucket.DomainName
S3OriginConfig:
OriginAccessIdentity: !Sub origin-access-identity/cloudfront/${CloudFrontOriginAccessIdentity}
ViewerCertificate:
SslSupportMethod: sni-only
AcmCertificateArn: !Sub arn:aws:acm:us-east-1:*****************:certificate/**********
Enabled: true
DefaultRootObject: index.html
Comment: !Sub ${AWS::StackName} distribution
Aliases:
- <domain>
DefaultCacheBehavior:
TargetOriginId: S3Origin
ForwardedValues:
QueryString: false
ViewerProtocolPolicy: redirect-to-https
CloudFrontOriginAccessIdentity:
Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
Properties:
CloudFrontOriginAccessIdentityConfig:
Comment: !Ref AWS::StackName
リソースの設定
まずはCloudFrontにアクセスした際に表示するS3のリソースですが、Originsの部分で設定します。
デフォルトで表示するファイルの設定はDefaultRootObjectで設定します。
CNAMEの設定
Route53でCloudFrontを設定する場合、CNAMEにドメイン名を設定する必要があります。
設定している部分はAssetsDistributionのAliasesです。
<domain>となっているところに設定するCNAMEを記載します。
証明書の設定
httpsにする際、証明書を設定する必要があります。
設定している部分はAssetsDistributionのViewerCertificateです。
AcmCertificateArnに発行済みの証明書のARNを指定します。

S3のアクセス設定
vueなりreactなりSPAのベースとなるhtmlはS3に配置しますが、S3にアクセスできるようだとまずいので、アクセス制限を設定します。
使用するリソースはAssetsBucketPolicyとCloudFrontOriginAccessIdentityです。
CloudFrontOriginAccessIdentityでアクセス権を作ってAssetsBucketPolicyでS3のPolicyに設定するって感じです。
0件のコメント