-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.tf
125 lines (104 loc) · 2.72 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
resource "aws_wafv2_ip_set" "blacklist" {
name = "${var.app_name}-blacklist-${var.env}"
description = "Blacklist IP set"
scope = var.is_cloudfront ? "CLOUDFRONT" : "REGIONAL"
ip_address_version = "IPV4"
addresses = var.blacklist
tags = var.tags
}
resource "aws_wafv2_web_acl" "acl" {
name = "${var.app_name}-web-acls-${var.env}"
description = "Web ACLs"
scope = var.is_cloudfront ? "CLOUDFRONT" : "REGIONAL"
default_action {
allow {}
}
rule {
name = "rate"
priority = 0
action {
count {}
}
statement {
rate_based_statement {
limit = 10000
aggregate_key_type = "IP"
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "${var.app_name}-${var.env}-rate-rule-metric"
sampled_requests_enabled = false
}
}
rule {
name = "default"
priority = 1
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
excluded_rule {
name = "SizeRestrictions_BODY"
}
excluded_rule {
name = "SizeRestrictions_QUERYSTRING"
}
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "${var.app_name}-${var.env}-default-rule-metric"
sampled_requests_enabled = false
}
}
rule {
name = "blocklist"
priority = 2
action {
block {}
}
statement {
ip_set_reference_statement {
arn = aws_wafv2_ip_set.blacklist.arn
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "${var.app_name}-${var.env}-blocklist-rule-metric"
sampled_requests_enabled = false
}
}
rule {
name = "BadInput"
priority = 3
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesKnownBadInputsRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "${var.app_name}-${var.env}-bad-input-metric"
sampled_requests_enabled = false
}
}
tags = var.tags
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "${var.app_name}-${var.env}-metric"
sampled_requests_enabled = false
}
}
resource "aws_wafv2_web_acl_association" "_" {
for_each = var.is_cloudfront ? [] : toset(var.resource_arn_list)
resource_arn = each.key
web_acl_arn = aws_wafv2_web_acl.acl.arn
}