API を保護するために、RateBasedRule を使用して WAFRegional をデプロイしようとしています。API ゲートウェイは SAM テンプレートにあり、WAFRegional 構成を保持する子テンプレート用のネストされたスタックもあります。WAFRegional 構成の子テンプレートを以下に示します。ExecuteChangeSet フェーズで行われる処理は次のとおりです。
CamerasIpSet が作成されました
CamerasRateRule が作成されました
WAFCamerasWebACL CREATE_FAILED: 参照されたアイテムが存在しません。(サービス: AWSWAFRegional; ステータス コード: 400; エラー コード: WAFNonexistentItemException
サーバーレスを使用しているときに誰かが同じ問題を抱えている約 2 か月前の次の投稿を見つけました: https://forum.serverless.com/t/dependon-api-gateway-deployment/7792
ここで何が欠けていますか?
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Template for WAF Configuration'
Parameters:
CamerasApi:
Description: "Arn of the Cameras Api"
Type: String
Default: cameras-api-dev
StageName:
Description: "Stage name of the Cameras Api"
Type: String
Default: v
Blocking:
Description: "Number of calls per 5 minutes for WAF IP blocking."
Type: Number
Default: 2000
EnvironmentType:
Type: String
Default: "dev"
Description: "Type of environment: dev, staging or prod."
Resources:
WAFCamerasWebACL:
Type: AWS::WAFRegional::WebACL
DependsOn: CamerasRateRule
Properties:
DefaultAction:
Type: ALLOW
MetricName: !Join ['', ['IPBlockingMetric', !Ref EnvironmentType]]
Name: !Join ['', ['IPBlockingACL', !Ref EnvironmentType]]
Rules:
-
Action:
Type: "BLOCK"
Priority: 1
RuleId: !Ref CamerasRateRule
CamerasRateRule:
Type: AWS::WAFRegional::RateBasedRule
Properties:
MetricName: UnallowedAccessCount
Name: FiveMinuteRule
RateKey: IP
RateLimit: !Ref Blocking
MatchPredicates:
-
DataId: !Ref CamerasIpSet
Negated: false
Type: "IPMatch"
CamerasIpSet:
Type: AWS::WAFRegional::IPSet
Properties:
Name: !Join ['-', ['IpBlacklist', !Ref EnvironmentType]]
MyWebACLAssociation:
Type: AWS::WAFRegional::WebACLAssociation
Properties:
ResourceArn: !Sub arn:aws:apigateway:${AWS::Region}::/restapis/${CamerasApi}/stages/${StageName}
WebACLId: !Ref WAFCamerasWebACL
Outputs:
WebACL:
Description: Name of the web ACL
Value: !Ref WAFCamerasWebACL