Skip to content

Commit 65a0030

Browse files
committed
More waf
1 parent 8c9e19b commit 65a0030

File tree

8 files changed

+471
-160
lines changed

8 files changed

+471
-160
lines changed

README.md

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,16 +215,27 @@ The following inputs can be used as `step.with` keys
215215
| Name | Type | Description |
216216
|------------------|---------|------------------------------------|
217217
| `aws_waf_enable` | Boolean | Enable WAF for load balancer (LB only - NOT ELB). Default is `false` |
218-
| `aws_waf_rate_limit` | Number | Blocks IPs that exceed the specified request rate (requests per 5 minutes). Default is `2000` |
219-
| `aws_waf_managed_rules` | Boolean | Protection against OWASP Top 10 vulnerabilities and requests with known malicious patterns. Default is `true` |
220-
| `aws_waf_ip_reputation` | Boolean | Blocks requests from known malicious IP addresses. Default is `true` |
221-
| `aws_waf_logging_enable` | Boolean | Sends WAF logs to CloudWatch for monitoring. Default is `false` |
222-
| `aws_waf_log_retention_days` | Number | CloudWatch log retention period for WAF logs. Default is `30` |
218+
| `aws_waf_logging_enable`| Boolean | Enable WAF logging to CloudWatch. Default `false` |
219+
| `aws_waf_log_retention_days`| Number | CloudWatch log retention period for WAF logs. Default `30` |
220+
| `aws_waf_rule_rate_limit`| String | Rate limit for WAF rules. Default is `2000` |
221+
| `aws_waf_rule_managed_rules`| Boolean | Enable common managed rule groups to use. Default `false` |
222+
| `aws_waf_rule_managed_bad_inputs`| Boolean | Enable managed rule for bad inputs. Default `false` |
223+
| `aws_waf_rule_ip_reputation`| Boolean | Enable managed rule for IP reputation. Default `false` |
224+
| `aws_waf_rule_anonymous_ip`| Boolean | Enable managed rule for anonymous IP. Default `false` |
225+
| `aws_waf_rule_bot_control`| Boolean | Enable managed rule for bot control (costs extra). Default `false` |
226+
| `aws_waf_rule_geo_block_countries`| String | Comma separated list of countries to block. |
227+
| `aws_waf_rule_geo_allow_only_countries`| String | Comma separated list of countries to allow. |
228+
| `aws_waf_rule_sqli`| Boolean | Enable managed rule for SQL injection. Default `false` |
229+
| `aws_waf_rule_linux`| Boolean | Enable managed rule for Linux. Default `false` |
230+
| `aws_waf_rule_unix`| Boolean | Enable managed rule for Unix. Default `false` |
231+
| `aws_waf_rule_admin_protection`| Boolean | Enable managed rule for admin protection. Default `false` |
232+
| `aws_waf_rule_user_arn`| String | String of the user created ARN set of rules. |
233+
| `aws_waf_additional_tags`| String | A list of strings that will be added to created resources. Default `"{}"` |
223234
<hr/>
224235
<br/>
225236

226237
#### **EFS Inputs**
227-
| Name | Type | Description |
238+
| Name | Type | Descrifption |
228239
|------------------|---------|------------------------------------|
229240
| `aws_efs_create` | Boolean | Toggle to indicate whether to create an EFS volume and mount it to the EC2 instance as a part of the provisioning. Note: The stack will manage the EFS and will be destroyed along with the stack. |
230241
| `aws_efs_fs_id` | String | ID of existing EFS volume if you wish to use an existing one. |

action.yaml

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -282,27 +282,57 @@ inputs:
282282

283283
# AWS WAF
284284
aws_waf_enable:
285-
description: 'Enable WAF for load balancer'
285+
description: 'Enable WAF for load balancer.'
286286
required: false
287-
aws_waf_rate_limit:
288-
description: 'Rate limit for WAF (requests per 5 minutes)'
287+
aws_waf_logging_enable:
288+
description: 'Enable WAF logging to CloudWatch.'
289289
required: false
290-
aws_waf_managed_rules:
291-
description: 'Enable AWS managed rule sets'
290+
aws_waf_log_retention_days:
291+
description: 'CloudWatch log retention period for WAF logs.'
292292
required: false
293-
aws_waf_ip_reputation:
294-
description: 'Enable IP reputation rule set'
293+
aws_waf_rule_rate_limit:
294+
description: 'Rate limit for WAF rules.'
295295
required: false
296-
aws_waf_logging_enable:
297-
description: 'Enable WAF logging to CloudWatch'
296+
aws_waf_rule_managed_rules:
297+
description: 'Enable common managed rule groups to use.'
298298
required: false
299-
aws_waf_log_retention_days:
300-
description: 'CloudWatch log retention period for WAF logs'
299+
aws_waf_rule_managed_bad_inputs:
300+
description: 'Enable managed rule for bad inputs.'
301+
required: false
302+
aws_waf_rule_ip_reputation:
303+
description: 'Enable managed rule for IP reputation.'
304+
required: false
305+
aws_waf_rule_anonymous_ip:
306+
description: 'Enable managed rule for anonymous IP.'
307+
required: false
308+
aws_waf_rule_bot_control:
309+
description: 'Enable managed rule for bot control (costs extra).'
310+
required: false
311+
aws_waf_rule_geo_block_countries:
312+
description: 'Comma separated list of countries to block.'
313+
required: false
314+
aws_waf_rule_geo_allow_only_countries:
315+
description: 'Comma separated list of countries to allow.'
316+
required: false
317+
aws_waf_rule_sqli:
318+
description: 'Enable managed rule for SQL injection.'
319+
required: false
320+
aws_waf_rule_linux:
321+
description: 'Enable managed rule for Linux.'
322+
required: false
323+
aws_waf_rule_unix:
324+
description: 'Enable managed rule for Unix.'
325+
required: false
326+
aws_waf_rule_admin_protection:
327+
description: 'Enable managed rule for admin protection.'
328+
required: false
329+
aws_waf_rule_user_arn:
330+
description: 'ARN of the user rule.'
301331
required: false
302332
aws_waf_additional_tags:
303333
description: 'A JSON object of additional tags that will be included on created resources. Example: `{"key1": "value1", "key2": "value2"}`'
304334
required: false
305-
335+
306336
# AWS EFS
307337
aws_efs_create:
308338
description: 'Toggle to indicate whether to create and EFS and mount it to the ec2 as a part of the provisioning. Note: The EFS will be managed by the stack and will be destroyed along with the stack.'
@@ -1225,12 +1255,22 @@ runs:
12251255

12261256
# AWS WAF
12271257
AWS_WAF_ENABLE: ${{ inputs.aws_waf_enable }}
1228-
AWS_WAF_RATE_LIMIT: ${{ inputs.aws_waf_rate_limit }}
1229-
AWS_WAF_MANAGED_RULES: ${{ inputs.aws_waf_managed_rules }}
1230-
AWS_WAF_IP_REPUTATION: ${{ inputs.aws_waf_ip_reputation }}
12311258
AWS_WAF_LOGGING_ENABLE: ${{ inputs.aws_waf_logging_enable }}
12321259
AWS_WAF_LOG_RETENTION_DAYS: ${{ inputs.aws_waf_log_retention_days }}
12331260
AWS_WAF_ADDITIONAL_TAGS: ${{ inputs.aws_waf_additional_tags }}
1261+
AWS_WAF_RULE_RATE_LIMIT: ${{ inputs.aws_waf_rule_rate_limit }}
1262+
AWS_WAF_RULE_MANAGED_RULES: ${{ inputs.aws_waf_rule_managed_rules }}
1263+
AWS_WAF_RULE_MANAGED_BAD_INPUTS: ${{ inputs.aws_waf_rule_managed_bad_inputs }}
1264+
AWS_WAF_RULE_IP_REPUTATION: ${{ inputs.aws_waf_rule_ip_reputation }}
1265+
AWS_WAF_RULE_ANONYMOUS_IP: ${{ inputs.aws_waf_rule_anonymous_ip }}
1266+
AWS_WAF_RULE_BOT_CONTROL: ${{ inputs.aws_waf_rule_bot_control }}
1267+
AWS_WAF_RULE_GEO_BLOCK_COUNTRIES: ${{ inputs.aws_waf_rule_geo_block_countries }}
1268+
AWS_WAF_RULE_GEO_ALLOW_ONLY_COUNTRIES: ${{ inputs.aws_waf_rule_geo_allow_only_countries }}
1269+
AWS_WAF_RULE_USER_ARN: ${{ inputs.aws_waf_rule_user_arn }}
1270+
AWS_WAF_RULE_SQLI: ${{ inputs.aws_waf_rule_sqli }}
1271+
AWS_WAF_RULE_LINUX: ${{ inputs.aws_waf_rule_linux }}
1272+
AWS_WAF_RULE_UNIX: ${{ inputs.aws_waf_rule_unix }}
1273+
AWS_WAF_RULE_ADMIN_PROTECTION: ${{ inputs.aws_waf_rule_admin_protection }}
12341274

12351275
# AWS EFS
12361276
AWS_EFS_CREATE: ${{ inputs.aws_efs_create }}

operations/_scripts/generate/generate_vars_terraform.sh

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,22 @@ fi
135135
#-- AWS WAF --#
136136
if [[ $(alpha_only "$AWS_WAF_ENABLE") == true ]]; then
137137
aws_waf_enable=$(generate_var aws_waf_enable $AWS_WAF_ENABLE)
138-
aws_waf_rate_limit=$(generate_var aws_waf_rate_limit $AWS_WAF_RATE_LIMIT)
139-
aws_waf_managed_rules=$(generate_var aws_waf_managed_rules $AWS_WAF_MANAGED_RULES)
140-
aws_waf_ip_reputation=$(generate_var aws_waf_ip_reputation $AWS_WAF_IP_REPUTATION)
141138
aws_waf_logging_enable=$(generate_var aws_waf_logging_enable $AWS_WAF_LOGGING_ENABLE)
142139
aws_waf_log_retention_days=$(generate_var aws_waf_log_retention_days $AWS_WAF_LOG_RETENTION_DAYS)
143140
aws_waf_additional_tags=$(generate_var aws_waf_additional_tags $AWS_WAF_ADDITIONAL_TAGS)
141+
aws_waf_rule_rate_limit=$(generate_var aws_waf_rule_rate_limit $AWS_WAF_RULE_RATE_LIMIT)
142+
aws_waf_rule_managed_rules=$(generate_var aws_waf_rule_managed_rules $AWS_WAF_RULE_MANAGED_RULES)
143+
aws_waf_rule_managed_bad_inputs=$(generate_var aws_waf_rule_managed_bad_inputs $AWS_WAF_RULE_MANAGED_BAD_INPUTS)
144+
aws_waf_rule_ip_reputation=$(generate_var aws_waf_rule_ip_reputation $AWS_WAF_RULE_IP_REPUTATION)
145+
aws_waf_rule_anonymous_ip=$(generate_var aws_waf_rule_anonymous_ip $AWS_WAF_RULE_ANONYMOUS_IP)
146+
aws_waf_rule_bot_control=$(generate_var aws_waf_rule_bot_control $AWS_WAF_RULE_BOT_CONTROL)
147+
aws_waf_rule_geo_block_countries=$(generate_var aws_waf_rule_geo_block_countries $AWS_WAF_RULE_GEO_BLOCK_COUNTRIES)
148+
aws_waf_rule_geo_allow_only_countries=$(generate_var aws_waf_rule_geo_allow_only_countries $AWS_WAF_RULE_GEO_ALLOW_ONLY_COUNTRIES)
149+
aws_waf_rule_user_arn=$(generate_var aws_waf_rule_user_arn $AWS_WAF_RULE_USER_ARN)
150+
aws_waf_rule_sqli=$(generate_var aws_waf_rule_sqli $AWS_WAF_RULE_SQLI)
151+
aws_waf_rule_linux=$(generate_var aws_waf_rule_linux $AWS_WAF_RULE_LINUX)
152+
aws_waf_rule_unix=$(generate_var aws_waf_rule_unix $AWS_WAF_RULE_UNIX)
153+
aws_waf_rule_admin_protection=$(generate_var aws_waf_rule_admin_protection $AWS_WAF_RULE_ADMIN_PROTECTION)
144154
fi
145155

146156
#-- AWS EFS --#
@@ -483,12 +493,22 @@ $aws_elb_additional_tags
483493
484494
#-- WAF --#
485495
$aws_waf_enable
486-
$aws_waf_rate_limit
487-
$aws_waf_managed_rules
488-
$aws_waf_ip_reputation
489496
$aws_waf_logging_enable
490497
$aws_waf_log_retention_days
491498
$aws_waf_additional_tags
499+
$aws_waf_rule_rate_limit
500+
$aws_waf_rule_managed_rules
501+
$aws_waf_rule_managed_bad_inputs
502+
$aws_waf_rule_ip_reputation
503+
$aws_waf_rule_anonymous_ip
504+
$aws_waf_rule_bot_control
505+
$aws_waf_rule_geo_block_countries
506+
$aws_waf_rule_geo_allow_only_countries
507+
$aws_waf_rule_user_arn
508+
$aws_waf_rule_sqli
509+
$aws_waf_rule_linux
510+
$aws_waf_rule_unix
511+
$aws_waf_rule_admin_protection
492512
493513
#-- EFS --#
494514
$aws_efs_enable

operations/deployment/terraform/aws/aws_variables.tf

Lines changed: 78 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -336,24 +336,6 @@ variable "aws_waf_enable" {
336336
default = false
337337
}
338338

339-
variable "aws_waf_rate_limit" {
340-
type = number
341-
description = "Rate limit for WAF (requests per 5 minutes)"
342-
default = 2000
343-
}
344-
345-
variable "aws_waf_managed_rules" {
346-
type = bool
347-
description = "Enable AWS managed rule sets"
348-
default = true
349-
}
350-
351-
variable "aws_waf_ip_reputation" {
352-
type = bool
353-
description = "Enable IP reputation rule set"
354-
default = true
355-
}
356-
357339
variable "aws_waf_logging_enable" {
358340
type = bool
359341
description = "Enable WAF logging to CloudWatch"
@@ -372,6 +354,84 @@ variable "aws_waf_additional_tags" {
372354
default = "{}"
373355
}
374356

357+
variable "aws_waf_rule_rate_limit" {
358+
type = string
359+
description = "Rate limit for WAF rules"
360+
default = "2000"
361+
}
362+
363+
variable "aws_waf_rule_managed_rules" {
364+
type = bool
365+
description = "Enable common managed rule groups to use"
366+
default = false
367+
}
368+
369+
variable "aws_waf_rule_managed_bad_inputs" {
370+
type = bool
371+
description = "Enable managed rule for bad inputs"
372+
default = false
373+
}
374+
375+
variable "aws_waf_rule_ip_reputation" {
376+
type = bool
377+
description = "Enable managed rule for IP reputation"
378+
default = false
379+
}
380+
381+
variable "aws_waf_rule_anonymous_ip" {
382+
type = bool
383+
description = "Enable managed rule for anonymous IP"
384+
default = false
385+
}
386+
387+
variable "aws_waf_rule_bot_control" {
388+
type = bool
389+
description = "Enable managed rule for bot control (costs extra)"
390+
default = false
391+
}
392+
393+
variable "aws_waf_rule_geo_block_countries" {
394+
type = string
395+
description = "Comma separated list of countries to block"
396+
default = ""
397+
}
398+
399+
variable "aws_waf_rule_geo_allow_only_countries" {
400+
type = string
401+
description = "Comma separated list of countries to allow"
402+
default = ""
403+
}
404+
405+
variable "aws_waf_rule_sqli" {
406+
type = bool
407+
description = "Enable managed rule for SQL injection"
408+
default = false
409+
}
410+
411+
variable "aws_waf_rule_linux" {
412+
type = bool
413+
description = "Enable managed rule for Linux"
414+
default = false
415+
}
416+
417+
variable "aws_waf_rule_unix" {
418+
type = bool
419+
description = "Enable managed rule for Unix"
420+
default = false
421+
}
422+
423+
variable "aws_waf_rule_admin_protection" {
424+
type = bool
425+
description = "Enable managed rule for admin protection"
426+
default = false
427+
}
428+
429+
variable "aws_waf_rule_user_arn" {
430+
type = string
431+
description = "ARN of the user rule"
432+
default = ""
433+
}
434+
375435
# AWS EFS
376436

377437
### This variable is hidden for the end user. Is built in deploy.sh based on the next 3 variables.

operations/deployment/terraform/aws/bitovi_main.tf

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -572,16 +572,27 @@ module "aws_waf_ecs" {
572572
source = "../modules/aws/waf"
573573
count = var.aws_waf_enable && var.aws_ecs_enable ? 1 : 0
574574
aws_waf_enable = var.aws_waf_enable
575-
aws_waf_rate_limit = var.aws_waf_rate_limit
576-
aws_waf_managed_rules = var.aws_waf_managed_rules
577-
aws_waf_ip_reputation = var.aws_waf_ip_reputation
578-
aws_lb_resource_arn = module.aws_ecs[0].load_balancer_arn
579575
aws_waf_logging_enable = var.aws_waf_logging_enable
580576
aws_waf_log_retention_days = var.aws_waf_log_retention_days
581577
aws_resource_identifier = var.aws_resource_identifier
578+
# Rules
579+
aws_waf_rule_rate_limit = var.aws_waf_rule_rate_limit
580+
aws_waf_rule_managed_rules = var.aws_waf_rule_managed_rules
581+
aws_waf_rule_managed_bad_inputs = var.aws_waf_rule_managed_bad_inputs
582+
aws_waf_rule_ip_reputation = var.aws_waf_rule_ip_reputation
583+
aws_waf_rule_anonymous_ip = var.aws_waf_rule_anonymous_ip
584+
aws_waf_rule_bot_control = var.aws_waf_rule_bot_control
585+
aws_waf_rule_geo_block_countries = var.aws_waf_rule_geo_block_countries
586+
aws_waf_rule_geo_allow_only_countries = var.aws_waf_rule_geo_allow_only_countries
587+
aws_waf_rule_user_arn = var.aws_waf_rule_user_arn
588+
aws_waf_rule_sqli = var.aws_waf_rule_sqli
589+
aws_waf_rule_linux = var.aws_waf_rule_linux
590+
aws_waf_rule_unix = var.aws_waf_rule_unix
591+
aws_waf_rule_admin_protection = var.aws_waf_rule_admin_protection
592+
# Incoming
593+
aws_lb_resource_arn = module.aws_ecs[0].load_balancer_arn
582594
# Others
583-
#fqdn_provided = local.fqdn_provided
584-
depends_on = [ module.aws_certificates,module.aws_ecs ]
595+
depends_on = [ module.aws_ecs ]
585596
providers = {
586597
aws = aws.waf
587598
}

0 commit comments

Comments
 (0)