SAM API Gateway с облачной информацией WAFRegional - PullRequest
1 голос
/ 20 июня 2019

Чтобы защитить наш API, я пытаюсь развернуть WAFRegional с RateBasedRule. Шлюз API находится в шаблоне SAM, где у меня также есть вложенный стек для дочернего шаблона, содержащего конфигурации WAFRegional. Дочерний шаблон для конфигурации WAFRegional представлен ниже. На этапе ExecuteChangeSet происходит следующее:

  1. CamerasIpSet создан

  2. CamerasRateRule создан

  3. 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


1 Ответ

0 голосов
/ 15 июля 2019

Я наконец-то решил проблему с помощью службы поддержки клиентов AWS.Это ограничение, которое у них есть с CloudFormation при работе с AWS :: WAFRegional :: RateBasedRule.

Несмотря на то, что CloudFormation поддерживает создание региональных правил WAF, основанных на ставках, их ассоциация с веб-ACL в настоящее время отсутствуетподдерживается.Если вы увидите ссылку [1] ниже, вы поймете, что: «Чтобы добавить правила на основе тарифов, созданные с помощью CloudFormation, в веб-ACL, используйте консоль AWS WAF, API или интерфейс командной строки (CLI)».

[1] AWS :: WAFRegional :: RateBasedRule: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafregional-ratebasedrule.html

Я использовал шаблон Cloudformation для генерации WebACL, RateBasedRule и ассоциации WebACL с моим APIGW.Используя CodeBuild в нашем конвейере CI / CD, я теперь добавляю RateBasedRule в WebACL с помощью команды CLI aws waf-regional update-web-acl.

...