Чтобы защитить наш API, я пытаюсь развернуть WAFRegional с RateBasedRule. Шлюз API находится в шаблоне SAM, где у меня также есть вложенный стек для дочернего шаблона, содержащего конфигурации WAFRegional. Дочерний шаблон для конфигурации WAFRegional представлен ниже. На этапе ExecuteChangeSet происходит следующее:
CamerasIpSet создан
CamerasRateRule создан
WAFCamerasWebACL CREATE_FAILED: ссылка на элемент не существует. (Сервис: AWSWAFRegional; код состояния: 400; код ошибки: WAFNonexistentItemException
Я нашел следующее сообщение около 2 месяцев назад, где у кого-то возникла та же проблема при использовании Serverless: 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