01.はじめに
【AWS】CloudFormtionでブログサービスを構築してみた(概要編)の最終回である。
過去に公開した記事は下記の通りである。
・【AWS】CloudFormtionでブログサービスを構築してみた(概要編)
・【AWS】CloudFormtionでブログサービスを構築してみた(01.Network編)
・【AWS】CloudFormtionでブログサービスを構築してみた(02.EC2,RDS,ALB編)
・【AWS】CloudFormtionでブログサービスを構築してみた(03.S3,CloudFront編)
・【AWS】CloudFormtionでブログサービスを構築してみた(04.Route53編)
02.構成図
ここまでの設定で独自ドメインでアクセス出来て、障害発生時にはSorryページに通信を流すことが出来た。
ただ、IPアドレス直接アクセスはセキュリティ的にあまりよろしくないので、
IPアドレスでアクセスしてきた通信を遮断する設定をWafで入れる。
特定のIPではなく全てのIPアドレスを遮断する。(ALBはIP変わることあるため)
03.事前確認
現在の設定はIPアドレスでアクセス出来てしまう。
04.テンプレートファイル
Outputs情報
Outputs:
#ALBのARNの定義(WAFで使う)
ALBArn:
Value: !Ref CFALB
Export:
Name: ALB-ARN-Outputs
AWSTemplateFormatVersion: 2010-09-09
Description: Waf-ACL
Resources:
# ------------------------------------------------------------#
# IPブロックリスト
# ------------------------------------------------------------#
IPBlockList:
Type: AWS::WAFv2::RegexPatternSet
Properties:
Name: IP_regex_pattern_set
RegularExpressionList:
- (([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
Scope: REGIONAL
# ------------------------------------------------------------#
# WebACLAssociation
# ------------------------------------------------------------#
WebACLAssociation:
Type: AWS::WAFv2::WebACLAssociation
Properties:
ResourceArn: !ImportValue ALB-ARN-Outputs
WebACLArn:
Fn::GetAtt: WebACL.Arn
# ------------------------------------------------------------#
# WebACL
# ------------------------------------------------------------#
WebACL:
Type: AWS::WAFv2::WebACL
Properties:
DefaultAction:
Allow: {}
Description: WebACL
Name: WebACL
Rules:
- Name: IPBlock
Action:
Block: {}
Priority: 0
Statement:
RegexPatternSetReferenceStatement:
Arn: !GetAtt IPBlockList.Arn
FieldToMatch:
SingleHeader: host
TextTransformations:
- Type: "NONE"
Priority: 100
VisibilityConfig:
CloudWatchMetricsEnabled: true
MetricName: "MyWAFWebACLMetrics"
SampledRequestsEnabled: true
Scope: REGIONAL
VisibilityConfig:
CloudWatchMetricsEnabled: true
MetricName: "MyWAFWebACLMetrics-CF"
SampledRequestsEnabled: true
05.テストアクセス
06.最後に
色々エラーや想定外が起こって大変だったが、無事に当初の構想通りに構築できた。
ただ、ALB周りの設計がなかなか大変で細かい設定を入れるくらいならCloudFrontの
オリジンフェイルオーバーで運用したほうが想定外の発生が起きづらいのではないかと思った。
(もちろん仕様をしっかり理解している前提だが)
また、EC2、RDSのスペックも無料枠で利用できるスペックなのでアクセス負荷の面でも一考の余地があるのではないかと思った。
今後は
・EC2をコンテナ化する
・CloudWatchを入れて実運用の監視をする
・同様の構成をCloudFrontのオリジンフェイルオーバーで実装してみる
等を試してみたい。
参考文献