【问题标题】:AWS WAF Create an ACL and rule to allow access to only one country to access the API gatewayAWS WAF 创建ACL和规则,只允许一个国家访问API网关
【发布时间】:2020-04-27 14:42:44
【问题描述】:

我想创建一个json格式的云形成模板,在WAF中创建一个ACL和规则,只允许美国用户访问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"
                            ]
                        }
                    }
                }
            }
        }
    } 

【问题讨论】:

  • 您要使用经典的 WAF 还是 WAFv2?你也在使用云端吗?
  • (v1) AWS::WAF::Rule 的记录属性是 MetricName、Name 和 Predicates。
  • 我使用的是 WAF 而不是 WAF 经典版
  • 有人能给出一个基于代码的例子吗? AWS 提供的关于 clouf 形成模板的文档非常少。
  • 我正在使用 WAFv2

标签: amazon-web-services amazon-cloudformation amazon-waf


【解决方案1】:

查看文档后,您正在尝试在经典 WAF 资源下执行 WAFv2 规则。你AWS::WAF::Rule的资源类型是经典的WAF规则,而结构是WAFv2。

我自己还没有使用过 WAFv2,但是看看documentation,这应该是你想要的 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

自 2020 年 1 月 13 日起,您无法使用 cloudformation 将 api gateway stage 等资源与 WAFv2 ACL 相关联。您可以使用控制台、sdk、自定义资源和cli 来执行此操作。

【讨论】:

  • 此选项的问题是您无法将API网关等资源关联到WAF ACL,为此我们需要使用WAF区域。我正在寻找实现 WAF 区域的示例代码。 docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
  • 该文档看起来适用于 WAF 经典。对于 waf 经典,全局与区域的不同 ACL 是不同的,但在 waf 中它们是相同的。如果您查看我的示例代码,您将看到该区域是在作用域中定义的。不幸的是,文档非常混乱。
  • 进一步查看文档,看起来经典的 waf 有一个可以使用的名为 AWS::WAFRegional::WebACLAssociation 的资源,但截至今天,较新的 WAFv2 没有这样的 cloudformation 资源。您仍然可以从控制台、sdk 和cli 进行操作,但我认为它们尚未添加到 cloudformation。 Cloudformation 有时会延迟发布,因此很难采用新功能。
  • 我已经联系了 aws 支持,他们已经确认目前无法使用 cloudformation 将 api 网关与 WAFv2 ACL 相关联。他们的路线图上有它,但他们没有当前的预计到达时间。
  • 您现在可以与 API 网关关联。见docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
【解决方案2】:

当 Cloudformation 实现 WAFv2(他们建议您现在使用)时,问题将得到解决。最终,我们需要 Cloudformation 来支持创建和关联(即到 API 网关或负载均衡器),这样其他变通方法就不会到位,因为它们不是很容易转移。

GitHub 票是:https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/issues/344

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多