Skip to content

Commit c5e20f2

Browse files
authored
Add WAF to ECS (#6)
* Add WAF option
1 parent 04c0311 commit c5e20f2

File tree

2 files changed

+120
-8
lines changed

2 files changed

+120
-8
lines changed

README.md

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
deploy-ecs:
4242
runs-on: ubuntu-latest
4343
- name: Create Nginx example
44-
uses: bitovi/[email protected].4
44+
uses: bitovi/[email protected].6
4545
id: ecs
4646
with:
4747
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
@@ -80,7 +80,7 @@ jobs:
8080
url: ${{ steps.ecs.outputs.ecs_dns_record }}
8181
steps:
8282
- name: Create Nginx example
83-
uses: bitovi/[email protected].4
83+
uses: bitovi/[email protected].6
8484
id: ecs
8585
with:
8686
aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
@@ -108,9 +108,27 @@ jobs:
108108
aws_ecs_cloudwatch_skip_destroy: false
109109
aws_ecs_cloudwatch_retention_days: 1
110110

111+
aws_waf_enable: true
112+
aws_waf_logging_enable: true
113+
aws_waf_log_retention_days: 3
114+
aws_waf_additional_tags: '{\"some\":\"tag\"}'
115+
aws_waf_rule_rate_limit: 200
116+
aws_waf_rule_managed_rules: true
117+
aws_waf_rule_managed_bad_inputs: true
118+
aws_waf_rule_ip_reputation: true
119+
aws_waf_rule_anonymous_ip: true
120+
aws_waf_rule_bot_control: false #(Extra cost)
121+
aws_waf_rule_geo_block_countries: "CN,RU"
122+
#aws_waf_rule_geo_allow_only_countries: "US,CA"
123+
#aws_waf_rule_user_arn:
124+
aws_waf_rule_sqli: true
125+
aws_waf_rule_linux: true
126+
aws_waf_rule_unix: true
127+
aws_waf_rule_admin_protection: true
128+
111129
aws_r53_enable: true
112130
aws_r53_domain_name: your-domain.com
113-
aws_r53_sub_domain_name: sub-domain.com
131+
aws_r53_sub_domain_name: sub-domain
114132
aws_r53_enable_cert: true
115133
```
116134
@@ -127,6 +145,7 @@ The following inputs can be used as `step.with` keys
127145
1. [ECS](#ecs-inputs)
128146
1. [Secrets and Environment Variables](#secrets-and-environment-variables-inputs)
129147
1. [VPC](#vpc-inputs)
148+
1. [WAF](#waf-inputs)
130149
1. [DNS](#dns-inputs)
131150

132151
### Outputs
@@ -206,6 +225,28 @@ The following inputs can be used as `step.with` keys
206225
<hr/>
207226
<br/>
208227

228+
#### **WAF Inputs**
229+
| Name | Type | Description |
230+
|------------------|---------|------------------------------------|
231+
| `aws_waf_enable` | Boolean | Enable WAF for load balancer (LB only - NOT ELB). Default is `false` |
232+
| `aws_waf_logging_enable`| Boolean | Enable WAF logging to CloudWatch. Default `false` |
233+
| `aws_waf_log_retention_days`| Number | CloudWatch log retention period for WAF logs. Default `30` |
234+
| `aws_waf_rule_rate_limit`| String | Rate limit for WAF rules. Default is `2000` |
235+
| `aws_waf_rule_managed_rules`| Boolean | Enable common managed rule groups to use. Default `false` |
236+
| `aws_waf_rule_managed_bad_inputs`| Boolean | Enable managed rule for bad inputs. Default `false` |
237+
| `aws_waf_rule_ip_reputation`| Boolean | Enable managed rule for IP reputation. Default `false` |
238+
| `aws_waf_rule_anonymous_ip`| Boolean | Enable managed rule for anonymous IP. Default `false` |
239+
| `aws_waf_rule_bot_control`| Boolean | Enable managed rule for bot control (costs extra). Default `false` |
240+
| `aws_waf_rule_geo_block_countries`| String | Comma separated list of countries to block. |
241+
| `aws_waf_rule_geo_allow_only_countries`| String | Comma separated list of countries to allow. |
242+
| `aws_waf_rule_sqli`| Boolean | Enable managed rule for SQL injection. Default `false` |
243+
| `aws_waf_rule_linux`| Boolean | Enable managed rule for Linux. Default `false` |
244+
| `aws_waf_rule_unix`| Boolean | Enable managed rule for Unix. Default `false` |
245+
| `aws_waf_rule_admin_protection`| Boolean | Enable managed rule for admin protection. Default `false` |
246+
| `aws_waf_rule_user_arn`| String | String of the user created ARN set of rules. |
247+
| `aws_waf_additional_tags`| String | A list of strings that will be added to created resources. Default `"{}"` |
248+
<hr/>
249+
<br/>
209250

210251
#### **VPC Inputs**
211252
| Name | Type | Description |

action.yaml

Lines changed: 76 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ inputs:
5656
aws_ecs_enable:
5757
description: 'Toggle ECS Creation'
5858
required: false
59-
default: true
59+
default: 'true'
6060
aws_ecs_service_name:
6161
description: 'Elastic Container Service name'
6262
required: false
@@ -137,16 +137,16 @@ inputs:
137137
required: false
138138
aws_ecs_cloudwatch_enable:
139139
description: "Toggle cloudwatch for ECS. Default 'false'"
140-
reuired: false
140+
required: false
141141
aws_ecs_cloudwatch_lg_name:
142142
description: "Log group name. Will default to aws_identifier if none."
143-
reuired: false
143+
required: false
144144
aws_ecs_cloudwatch_skip_destroy:
145145
description: "Toggle deletion or not when destroying the stack."
146-
reuired: false
146+
required: false
147147
aws_ecs_cloudwatch_retention_days:
148148
description: "Number of days to retain logs. 0 to never expire. Default '14'"
149-
reuired: false
149+
required: false
150150
aws_ecs_additional_tags:
151151
description: 'A list of strings that will be added to created resources'
152152
required: false
@@ -165,6 +165,58 @@ inputs:
165165
description: '`.env` file to be used with the app from Github variables'
166166
required: false
167167

168+
# AWS WAF
169+
aws_waf_enable:
170+
description: 'Enable WAF for load balancer.'
171+
required: false
172+
aws_waf_logging_enable:
173+
description: 'Enable WAF logging to CloudWatch.'
174+
required: false
175+
aws_waf_log_retention_days:
176+
description: 'CloudWatch log retention period for WAF logs.'
177+
required: false
178+
aws_waf_rule_rate_limit:
179+
description: 'Rate limit for WAF rules.'
180+
required: false
181+
aws_waf_rule_managed_rules:
182+
description: 'Enable common managed rule groups to use.'
183+
required: false
184+
aws_waf_rule_managed_bad_inputs:
185+
description: 'Enable managed rule for bad inputs.'
186+
required: false
187+
aws_waf_rule_ip_reputation:
188+
description: 'Enable managed rule for IP reputation.'
189+
required: false
190+
aws_waf_rule_anonymous_ip:
191+
description: 'Enable managed rule for anonymous IP.'
192+
required: false
193+
aws_waf_rule_bot_control:
194+
description: 'Enable managed rule for bot control (costs extra).'
195+
required: false
196+
aws_waf_rule_geo_block_countries:
197+
description: 'Comma separated list of countries to block.'
198+
required: false
199+
aws_waf_rule_geo_allow_only_countries:
200+
description: 'Comma separated list of countries to allow.'
201+
required: false
202+
aws_waf_rule_sqli:
203+
description: 'Enable managed rule for SQL injection.'
204+
required: false
205+
aws_waf_rule_linux:
206+
description: 'Enable managed rule for Linux.'
207+
required: false
208+
aws_waf_rule_unix:
209+
description: 'Enable managed rule for Unix.'
210+
required: false
211+
aws_waf_rule_admin_protection:
212+
description: 'Enable managed rule for admin protection.'
213+
required: false
214+
aws_waf_rule_user_arn:
215+
description: 'ARN of the user rule.'
216+
required: false
217+
aws_waf_additional_tags:
218+
description: 'A list of strings that will be added to created resources.'
219+
required: false
168220

169221
# AWS VPC Inputs
170222
aws_vpc_create:
@@ -316,6 +368,25 @@ runs:
316368
env_ghs: ${{inputs.env_ghs }}
317369
env_ghv: ${{inputs.env_ghv }}
318370

371+
# AWS WAF
372+
aws_waf_enable: ${{ inputs.aws_waf_enable }}
373+
aws_waf_logging_enable: ${{ inputs.aws_waf_logging_enable }}
374+
aws_waf_log_retention_days: ${{ inputs.aws_waf_log_retention_days }}
375+
aws_waf_additional_tags: ${{ inputs.aws_waf_additional_tags }}
376+
aws_waf_rule_rate_limit: ${{ inputs.aws_waf_rule_rate_limit }}
377+
aws_waf_rule_managed_rules: ${{ inputs.aws_waf_rule_managed_rules }}
378+
aws_waf_rule_managed_bad_inputs: ${{ inputs.aws_waf_rule_managed_bad_inputs }}
379+
aws_waf_rule_ip_reputation: ${{ inputs.aws_waf_rule_ip_reputation }}
380+
aws_waf_rule_anonymous_ip: ${{ inputs.aws_waf_rule_anonymous_ip }}
381+
aws_waf_rule_bot_control: ${{ inputs.aws_waf_rule_bot_control }}
382+
aws_waf_rule_geo_block_countries: ${{ inputs.aws_waf_rule_geo_block_countries }}
383+
aws_waf_rule_geo_allow_only_countries: ${{ inputs.aws_waf_rule_geo_allow_only_countries }}
384+
aws_waf_rule_user_arn: ${{ inputs.aws_waf_rule_user_arn }}
385+
aws_waf_rule_sqli: ${{ inputs.aws_waf_rule_sqli }}
386+
aws_waf_rule_linux: ${{ inputs.aws_waf_rule_linux }}
387+
aws_waf_rule_unix: ${{ inputs.aws_waf_rule_unix }}
388+
aws_waf_rule_admin_protection: ${{ inputs.aws_waf_rule_admin_protection }}
389+
319390
# AWS VPC Inputs
320391
aws_vpc_create: ${{inputs.aws_vpc_create }}
321392
aws_vpc_name: ${{inputs.aws_vpc_name }}

0 commit comments

Comments
 (0)