やりたかったこと
- ALB 配下のWebサーバーの特定のURLパス(
/admin/
)には特定のIPアドレスからのみアクセスできるようにする
- IPアドレスの数は1個~たくさん
断念したこと
CloudFormation テンプレート
ポイント
AWS::WAFv2::IPSet
にIPアドレス(プレフィクス付き)を指定すること
- CloudFrontで使う場合は
Scope: "CLOUDFRONT"
にすることと、米国東部 (バージニア北部) リージョン (us-east-1) にリソースを作成すること。ALBで使う場合は Scope: "REGIONAL"
- ルールの順番は次の通り
- 「特定のURLパス」以外なら許可
- 「特定のIPアドレス」なら許可
- どちらでもない場合は拒否
Parameters:
LoadBalancerArn:
Type: String
PathPattern:
Type: String
Default: /admin/
Resources:
WlitelistIpAddressSet:
Type: "AWS::WAFv2::IPSet"
Properties:
Addresses:
- 200.100.0.0/24
- 100.200.100.200/32
IPAddressVersion: IPV4
Scope: "REGIONAL"
WhitelistPathPatternSet:
Type: AWS::WAFv2::RegexPatternSet
Properties:
RegularExpressionList:
- !Sub "^${PathPattern}*"
Scope: "REGIONAL"
WebACLAssociation:
Type: AWS::WAFv2::WebACLAssociation
Properties:
ResourceArn: !Ref LoadBalancerArn
WebACLArn: !GetAtt WhitelistWAFv2WebACL.Arn
WhitelistWAFv2WebACL:
Type: "AWS::WAFv2::WebACL"
Properties:
DefaultAction:
Block: {}
Rules:
- Name: "WhitelistWAFv2WebACLRulePathPattern"
Action:
Allow: {}
Priority: 100
Statement:
NotStatement:
Statement:
RegexPatternSetReferenceStatement:
Arn: !GetAtt WhitelistPathPatternSet.Arn
FieldToMatch:
UriPath: {}
TextTransformations:
- Type: "URL_DECODE"
Priority: 0
VisibilityConfig:
CloudWatchMetricsEnabled: true
MetricName: "WhitelistWAFv2WebACLRulePathPatternMetric"
SampledRequestsEnabled: true
- Name: "WhitelistWAFv2WebACLRuleIPSet"
Action:
Allow: {}
Priority: 1000
Statement:
IPSetReferenceStatement:
Arn: !GetAtt WlitelistIpAddressSet.Arn
VisibilityConfig:
CloudWatchMetricsEnabled: true
MetricName: "WhitelistWAFv2WebACLRuleIPSetMetric"
SampledRequestsEnabled: true
Scope: "REGIONAL"
VisibilityConfig:
CloudWatchMetricsEnabled: true
MetricName: "WhitelistWAFv2WebACLMetric"
SampledRequestsEnabled: true