【问题标题】:Terraform WAF Web ACL Resource is useless?Terraform WAF Web ACL 资源没用?
【发布时间】:2018-03-26 16:07:58
【问题描述】:

Terraform 提供WAF Web ACL Resource。它可以附加到任何使用 terraform 的东西(例如 ALB)还是没用?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    随着 1.12 AWS provider 的发布,现在可以直接创建区域 WAF 资源以用于负载均衡器。

    您现在可以创建 aws_wafregional_byte_match_setaws_wafregional_ipsetaws_wafregional_size_constraint_setaws_wafregional_sql_injection_match_setaws_wafregional_xss_match_set 中的任何一个,将它们链接到 aws_wafregional_rule 作为谓词,然后依次将 WAF 规则添加到 @987654328 @。最后,您可以使用 aws_wafregional_web_acl_association resource 将区域 WAF 附加到负载均衡器。

    区域 WAF Web ACL 关联资源文档提供了有用的 example 说明它们如何链接在一起:

    resource "aws_wafregional_ipset" "ipset" {
      name = "tfIPSet"
    
      ip_set_descriptor {
        type  = "IPV4"
        value = "192.0.7.0/24"
      }
    }
    
    resource "aws_wafregional_rule" "foo" {
      name        = "tfWAFRule"
      metric_name = "tfWAFRule"
    
      predicate {
        data_id = "${aws_wafregional_ipset.ipset.id}"
        negated = false
        type    = "IPMatch"
      }
    }
    
    resource "aws_wafregional_web_acl" "foo" {
      name = "foo"
      metric_name = "foo"
      default_action {
        type = "ALLOW"
      }
      rule {
        action {
          type = "BLOCK"
        }
        priority = 1
        rule_id = "${aws_wafregional_rule.foo.id}"
      }
    }
    
    resource "aws_vpc" "foo" {
      cidr_block = "10.1.0.0/16"
    }
    
    data "aws_availability_zones" "available" {}
    
    resource "aws_subnet" "foo" {
      vpc_id = "${aws_vpc.foo.id}"
      cidr_block = "10.1.1.0/24"
      availability_zone = "${data.aws_availability_zones.available.names[0]}"
    }
    
    resource "aws_subnet" "bar" {
      vpc_id = "${aws_vpc.foo.id}"
      cidr_block = "10.1.2.0/24"
      availability_zone = "${data.aws_availability_zones.available.names[1]}"
    }
    
    resource "aws_alb" "foo" {
      internal = true
      subnets = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"]
    }
    
    resource "aws_wafregional_web_acl_association" "foo" {
      resource_arn = "${aws_alb.foo.arn}"
      web_acl_id = "${aws_wafregional_web_acl.foo.id}"
    }
    

    原帖:

    区域 WAF 资源已陷入审查和人们放弃拉取请求的混合状态,但计划用于AWS provider 1.12.0 release

    目前只有byte match setIP address set 资源可用,因此如果没有规则、ACL 和关联资源来实际执行操作,它们就没有多大用处。

    在此之前,您可以将 CloudFormation 与 Terraform 自己的逃生舱 aws_cloudformation_stack resource 一起使用,如下所示:

    resource "aws_lb" "load_balancer" {
      ...
    }
    
    resource "aws_cloudformation_stack" "waf" {
      name = "waf-example"
    
      parameters {
        ALBArn = "${aws_lb.load_balancer.arn}"
      }
    
      template_body = <<STACK
    Parameters:
      ALBArn:
        Type: String
    
    Resources:
      WAF:
        Type: AWS::WAFRegional::WebACL
        Properties:
          Name: WAF-Example
          DefaultAction:
            Type: BLOCK
          MetricName: WafExample
          Rules:
            - Action:
                Type: ALLOW
              Priority: 2
              RuleId:
                Ref: WhitelistRule
    
      WhitelistRule:
        Type: AWS::WAFRegional::Rule
        Properties:
          Name: WAF-Example-Whitelist
          MetricName: WafExampleWhiteList
          Predicates:
            - DataId:
                Ref: ExternalAPIURI
              Negated: false
              Type: ByteMatch
    
      ExternalAPIURI:
        Type: AWS::WAFRegional::ByteMatchSet
        Properties:
          Name: WAF-Example-StringMatch
          ByteMatchTuples:
            - FieldToMatch:
                Type: URI
              PositionalConstraint: STARTS_WITH
              TargetString: /public/
              TextTransformation: NONE
    
      WAFALBattachment:
        Type: AWS::WAFRegional::WebACLAssociation
        Properties:
          ResourceArn:
            Ref: ALBArn
          WebACLId:
            Ref: WAF
    STACK
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 2011-11-16
      • 2018-06-30
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2018-01-21
      相关资源
      最近更新 更多