AWS WAF Создайте ACL и правило, чтобы разрешить доступ только одной стране к шлюзу API.

Я хочу создать шаблон формирования облака в формате json, который создает ACL и правило в WAF, чтобы разрешить доступ к шлюзу API только пользователям из США. Пока у меня есть следующий код, но он выдает ошибку («Обнаружено неподдерживаемое действие свойства») в AWS:

        "Type":"AWS::WAF::Rule",
        "Properties":{
            "Name":"APIGeoBlockRule",
            "Priority":0,
            "Action":{
                "Block":{}
            },
            "VisibilityConfig":{
                "SampledRequestsEnabled":true,
                "CloudWatchMetricsEnabled":true,
                "MetricName": "APIGeoBlockRule"
            },
            "Statement":{
                "NotStatement":{
                    "Statement":{
                        "GeoMatchStatement":{
                            "CountryCodes":[
                                "US"
                            ]
                        }
                    }
                }
            }
        }
    } 

person bex    schedule 09.01.2020    source источник
comment
Вы хотите использовать классический WAF или WAFv2? Также вы используете облачный фронт?   -  person Ben Bloom    schedule 10.01.2020
comment
Документированными свойствами (v1) AWS::WAF::Rule являются MetricName, Name и Predicates.   -  person jarmod    schedule 10.01.2020
comment
Я использую WAF, а не классический WAF   -  person bex    schedule 10.01.2020
comment
Может ли кто-нибудь привести пример на основе кода? Существует очень мало документации от AWS по шаблону формирования clouf.   -  person bex    schedule 10.01.2020
comment
Я использую WAFv2   -  person bex    schedule 10.01.2020


Ответы (2)


Изучив документацию, вы пытаетесь выполнить правило WAFv2 для классического ресурса WAF. Ваш тип ресурса AWS::WAF::Rule — это классическое правило WAF, а структура — WAFv2.

Я сам еще не использовал WAFv2, но просматриваю документация, это должно быть примерно то, что вы хотите в формате yaml:

Description: Create WebACL example
Resources:
  ExampleWebACL:
    Type: AWS::WAFv2::WebACL
    Properties:
      Name: ExampleWebACL
      Scope: REGIONAL
      Description: This is an example WebACL
      DefaultAction:
        Allow: {}
      Rules:
        - Name: GeoRestrictExample
          Priority: 0
          Action:
            Block: {}
          Statement:
            NotStatement:
              Statement:
                GeoMatchStatement:
                    CountryCodes:
                      - US

По состоянию на 13 января 2020 г. вы не можете связать ресурс, например этап шлюза API, со списком управления доступом WAFv2 с помощью облачного формирования. Это можно сделать с помощью консоли, SDK, пользовательского ресурса и cli.

person Ben Bloom    schedule 10.01.2020
comment
Проблема с этим параметром заключается в том, что вы не можете связать ресурс, такой как шлюз API, с ACL WAF, для этой цели нам нужно использовать регион WAF. Я ищу пример кода, который реализует региональный WAF. docs.aws.amazon.com/AWSCloudFormation/ последний/UserGuide/ - person bex; 12.01.2020
comment
Эта документация выглядит как классика WAF. Для waf classic разные ACL для глобальных и региональных были разными, но в waf они одинаковы. Если вы посмотрите на мой пример кода, вы увидите, что регион определен в области видимости. К сожалению, документация очень запутанная. - person Ben Bloom; 12.01.2020
comment
Глядя дальше в документацию, похоже, что в классическом waf был ресурс с именем AWS::WAFRegional::WebACLAssociation, который можно было бы использовать, но в более новом WAFv2 на сегодняшний день нет такого ресурса cloudformation. Вы по-прежнему можете сделать это из консоли, SDK и cli, но я думаю, что они еще не добавили в cloudformation. Иногда выпуск Cloudformation задерживается, что затрудняет внедрение новых функций. - person Ben Bloom; 12.01.2020
comment
Я обратился в службу поддержки aws, и они подтвердили, что в настоящее время нет возможности связать шлюз API с ACL WAFv2 с помощью облачного формирования. У них есть это в их дорожной карте, но у них нет текущего ETA. - person Ben Bloom; 13.01.2020
comment
Теперь вы можете подключиться к шлюзу API. См. docs.aws.amazon.com/AWSCloudFormation. /последний/UserGuide/ - person scampbell; 18.08.2020

Проблема будет решена, когда Cloudformation реализует WAFv2 (которую они рекомендуют использовать сейчас). В конечном итоге нам нужно, чтобы Cloudformation поддерживала создание и ассоциацию (например, со шлюзом API или балансировщиком нагрузки), чтобы другие обходные пути не применялись, поскольку они не очень переносимы.

Билет GitHub: https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/issues/344

person jamiem    schedule 17.01.2020