์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ” ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ๊ทธ๋ฃน(Security Group) ์„ค์ • ์›๋ฆฌ

๐Ÿ” ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ๊ทธ๋ฃน(Security Group) ์„ค์ • ์›๋ฆฌ

AWS ยท GCP ยท Azure ๋‹ค ํ†ตํ•˜๋Š” ์ง„์งœ ๋ณด์•ˆ ๊ทธ๋ฃน ์™„์ „ ์ •๋ณต ๊ฐ€์ด๋“œ ๐Ÿš€
ํ”„๋กœ๊ทธ๋žจ๊ฐœ๋ฐœ > ํด๋ผ์šฐ๋“œ/DevOps | ์žฌ๋Šฅ๋„ท ์ง€์‹์ธ์˜ ์ˆฒ
๐Ÿ˜… ์•ผ ๋‚˜ ์–ด์ œ EC2 ์„œ๋ฒ„ ์˜ฌ๋ ธ๋Š”๋ฐ ์™ธ๋ถ€์—์„œ ์ ‘์†์ด ์•„์˜ˆ ์•ˆ ๋ผ... ๋ญ๊ฐ€ ๋ฌธ์ œ์•ผ?

ใ…‹ใ…‹ใ…‹ 100% ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ์•ˆ ํ•œ ๊ฑฐ์ž„. ์ธ๋ฐ”์šด๋“œ ๋ฃฐ ํ™•์ธํ•ด๋ด ๐Ÿ”
์ธ๋ฐ”์šด๋“œ? ์•„์›ƒ๋ฐ”์šด๋“œ? ๊ทธ๊ฒŒ ๋ญ”๋ฐ... ๐Ÿ˜ญ

ใ…‹ใ…‹ ์ง€๊ธˆ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ์•Œ๋ ค์ค„๊ฒŒ. ์ด๊ฑฐ ์•Œ๋ฉด ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ๋ฐ˜์€ ๋จน๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๊ฑฐ์ž„ ๐Ÿ’ช

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

๋ณด์•ˆ ๊ทธ๋ฃน(Security Group) ๋™์ž‘ ๊ฐœ๋…๋„ ๐ŸŒ ์ธํ„ฐ๋„ท (์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ) ์š”์ฒญ ๐Ÿ” ๋ณด์•ˆ ๊ทธ๋ฃน ๐Ÿ“ฅ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํฌํŠธ 22 (SSH) ยท ํฌํŠธ 80 (HTTP) ํฌํŠธ 443 (HTTPS) ยท ํ—ˆ์šฉ IP ์ง€์ • ๐Ÿ“ค ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™ ๊ธฐ๋ณธ: ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ (0.0.0.0/0 โ†’ All) ํ—ˆ์šฉ๋จ ๐Ÿ–ฅ๏ธ EC2 ์ธ์Šคํ„ด์Šค (์„œ๋ฒ„) ์ฐจ๋‹จ! ๐Ÿšซ ํ—ˆ์šฉ ์•ˆ ๋œ ํฌํŠธ โœ• ๋ณด์•ˆ ๊ทธ๋ฃน์€ ์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ์˜ ๊ฐ€์ƒ ๋ฐฉํ™”๋ฒฝ โ€” ํ—ˆ์šฉ ๊ทœ์น™๋งŒ ์กด์žฌ, ๊ฑฐ๋ถ€ ๊ทœ์น™ ์—†์Œ Stateful ๋ฐฉ์‹: ์ธ๋ฐ”์šด๋“œ ํ—ˆ์šฉ ์‹œ ์‘๋‹ต ํŠธ๋ž˜ํ”ฝ์€ ์ž๋™ ํ—ˆ์šฉ
๐Ÿ›ก๏ธ 1. ๋ณด์•ˆ ๊ทธ๋ฃน(Security Group)์ด๋ž€ ๋ญ”๊ฐ€์š”?

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

๐Ÿ’ก ํ•ต์‹ฌ ํฌ์ธํŠธ! ๋ณด์•ˆ ๊ทธ๋ฃน์€ ํ—ˆ์šฉ(Allow) ๊ทœ์น™๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์  ๊ฑฐ๋ถ€(Deny) ๊ทœ์น™์€ ์—†์–ด์š”.
๊ทœ์น™์— ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์ฐจ๋‹จ โ€” ์ด๊ฒŒ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹์ด์—์š”!

AWS์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์€ EC2 ์ธ์Šคํ„ด์Šค, RDS, Lambda, ELB ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ ,
ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์— ์—ฌ๋Ÿฌ ๋ณด์•ˆ ๊ทธ๋ฃน์„ ๋™์‹œ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
(์ตœ๋Œ€ 5๊ฐœ๊นŒ์ง€ ๊ธฐ๋ณธ ์ ์šฉ ๊ฐ€๋Šฅ, ์š”์ฒญ ์‹œ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Œ)

๐Ÿ”‘ ๋ณด์•ˆ ๊ทธ๋ฃน vs ๋„คํŠธ์›Œํฌ ACL(NACL) ์ฐจ์ด์  ๋ณด์•ˆ ๊ทธ๋ฃน๊ณผ ์ž์ฃผ ํ˜ผ๋™๋˜๋Š” ๊ฐœ๋…์ด ๋„คํŠธ์›Œํฌ ACL(Access Control List)์ธ๋ฐ์š”,
์ด ๋‘˜์€ ์ ์šฉ ๋ ˆ๋ฒจ์ด ๋‹ฌ๋ผ์š”!

๋ณด์•ˆ ๊ทธ๋ฃน โ†’ ์ธ์Šคํ„ด์Šค(์„œ๋ฒ„) ๋ ˆ๋ฒจ ๋ฐฉํ™”๋ฒฝ, Stateful
๋„คํŠธ์›Œํฌ ACL โ†’ ์„œ๋ธŒ๋„ท ๋ ˆ๋ฒจ ๋ฐฉํ™”๋ฒฝ, Stateless

Stateful์ด๋ž€? ์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜๋ฉด, ๊ทธ ์‘๋‹ต ํŠธ๋ž˜ํ”ฝ์€ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ž๋™์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
Stateless์ธ NACL์€ ์ธ๋ฐ”์šด๋“œ/์•„์›ƒ๋ฐ”์šด๋“œ๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ด์š”.
๐Ÿ“ฅ๐Ÿ“ค 2. ์ธ๋ฐ”์šด๋“œ vs ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™ ์™„์ „ ์ดํ•ด
๊ทผ๋ฐ ์ธ๋ฐ”์šด๋“œ๋ž‘ ์•„์›ƒ๋ฐ”์šด๋“œ๊ฐ€ ์ •ํ™•ํžˆ ๋ญ์•ผ? ๋ฐฉํ–ฅ์ด ํ—ท๊ฐˆ๋ ค ๐Ÿ˜ต

๊ฐ„๋‹จํ•ด! ์„œ๋ฒ„ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋ผ ใ…‹ใ…‹
๋“ค์–ด์˜ค๋Š” ๊ฑฐ = ์ธ๋ฐ”์šด๋“œ, ๋‚˜๊ฐ€๋Š” ๊ฑฐ = ์•„์›ƒ๋ฐ”์šด๋“œ!
๐Ÿ“ฅ ์ธ๋ฐ”์šด๋“œ(Inbound) ๊ทœ์น™

์ธ๋ฐ”์šด๋“œ๋Š” ์™ธ๋ถ€์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ, ๊ทธ ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐฉํ–ฅ์ด ์ธ๋ฐ”์šด๋“œ์˜ˆ์š”.
SSH๋กœ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ๋„ ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์˜ˆ์‹œ - ํฌํŠธ 22 (SSH): ๋‚ด IP(์˜ˆ: 123.456.789.0/32)๋งŒ ํ—ˆ์šฉ
- ํฌํŠธ 80 (HTTP): ๋ชจ๋“  IP(0.0.0.0/0) ํ—ˆ์šฉ
- ํฌํŠธ 443 (HTTPS): ๋ชจ๋“  IP(0.0.0.0/0) ํ—ˆ์šฉ
- ํฌํŠธ 3306 (MySQL): ํŠน์ • ๋ณด์•ˆ ๊ทธ๋ฃน ID๋งŒ ํ—ˆ์šฉ
๐Ÿ“ค ์•„์›ƒ๋ฐ”์šด๋“œ(Outbound) ๊ทœ์น™

์•„์›ƒ๋ฐ”์šด๋“œ๋Š” ์„œ๋ฒ„์—์„œ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜, DB์— ์—ฐ๊ฒฐํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด์—์š”.
AWS ๊ธฐ๋ณธ ์„ค์ •์€ ์•„์›ƒ๋ฐ”์šด๋“œ ์ „์ฒด ํ—ˆ์šฉ(All traffic, 0.0.0.0/0)์ด์—์š”.

โš ๏ธ ์ฃผ์˜! ์•„์›ƒ๋ฐ”์šด๋“œ๋ฅผ ๋„ˆ๋ฌด ์ œํ•œํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€ ์„ค์น˜๋‚˜ API ํ˜ธ์ถœ์„ ๋ชป ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•„์š”ํ•œ ํฌํŠธ/IP๋งŒ ์—ด์–ด๋‘๋Š” ์ตœ์†Œ ๊ถŒํ•œ ์›์น™(Least Privilege)์„ ์ ์šฉํ•˜์„ธ์š”!
๊ตฌ๋ถ„ ๋ฐฉํ–ฅ ๊ธฐ๋ณธ๊ฐ’ ์ฃผ์š” ์šฉ๋„
์ธ๋ฐ”์šด๋“œ ์™ธ๋ถ€ โ†’ ์„œ๋ฒ„ ์ „์ฒด ์ฐจ๋‹จ ์›น ์ ‘์†, SSH, DB ์—ฐ๊ฒฐ
์•„์›ƒ๋ฐ”์šด๋“œ ์„œ๋ฒ„ โ†’ ์™ธ๋ถ€ ์ „์ฒด ํ—ˆ์šฉ API ํ˜ธ์ถœ, ํŒจํ‚ค์ง€ ์„ค์น˜, ์™ธ๋ถ€ DB
๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™ ๊ตฌ์„ฑ ์š”์†Œ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ โ‘  ์œ ํ˜•(Type) ๐Ÿ“‹ ํ”„๋กœํ† ์ฝœ ์ข…๋ฅ˜ SSH, HTTP HTTPS, RDP MySQL, Custom ์„ ํƒํ•˜๋ฉด ํฌํŠธ๊ฐ€ ์ž๋™ ์ž…๋ ฅ๋จ โ‘ก ํ”„๋กœํ† ์ฝœ ๐Ÿ”Œ ์ „์†ก ๋ฐฉ์‹ TCP (์—ฐ๊ฒฐ ์ง€ํ–ฅ) UDP (๋น„์—ฐ๊ฒฐ) ICMP (ํ•‘ ํ…Œ์ŠคํŠธ) All: ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ ํ—ˆ์šฉ โ‘ข ํฌํŠธ ๋ฒ”์œ„ ๐Ÿšช ์ ‘์† ๋ฌธ(ํฌํŠธ) 22 (SSH) 80 (HTTP) 443 (HTTPS) ๋ฒ”์œ„ ์ง€์ • ๊ฐ€๋Šฅ ์˜ˆ: 8000-9000 โ‘ฃ ์†Œ์Šค/๋Œ€์ƒ ๐ŸŽฏ ํ—ˆ์šฉํ•  ์ถœ์ฒ˜ IP ์ฃผ์†Œ/CIDR ๋ณด์•ˆ ๊ทธ๋ฃน ID 0.0.0.0/0 (์ „์ฒด) IPv4 / IPv6 ๋ชจ๋‘ ์ง€์› โ‘ค ์„ค๋ช…(์„ ํƒ) ๐Ÿ“ ๊ทœ์น™ ๋ฉ”๋ชจ ๊ด€๋ฆฌ ํŽธ์˜๋ฅผ ์œ„ํ•œ ์„ค๋ช… ํ…์ŠคํŠธ ์˜ˆ: "๊ฐœ๋ฐœํŒ€ SSH" ๋‚˜์ค‘์— ๋ณด๋ฉด ์ง„์งœ ํŽธํ•จ ใ…‹ใ…‹ ์ด 5๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด์„œ ํ•˜๋‚˜์˜ ๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค ๐ŸŽ‰
๐ŸŒ 3. CIDR ํ‘œ๊ธฐ๋ฒ• โ€” IP ๋ฒ”์œ„ ์ง€์ •์˜ ํ•ต์‹ฌ
์†Œ์Šค ์„ค์ •ํ•  ๋•Œ 0.0.0.0/0 ์ด๋Ÿฐ ๊ฑฐ ๋ณด์ด๋˜๋ฐ ์ € /0 ์ด ๋ญ์•ผ? ๐Ÿ˜…

ใ…‹ใ…‹ใ…‹ ๊ทธ๊ฒŒ CIDR ํ‘œ๊ธฐ๋ฒ•์ด์•ผ! ์ด๊ฑฐ ์•Œ๋ฉด IP ๋ฒ”์œ„ ์„ค์ •์ด ์™„์ „ ์‰ฌ์›Œ์ง

CIDR(Classless Inter-Domain Routing)์€ IP ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.
IP์ฃผ์†Œ/์ˆซ์ž ํ˜•ํƒœ๋กœ ์“ฐ๋Š”๋ฐ, ๋’ค์˜ ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ๋ฒ”์œ„๊ฐ€ ์ข์•„์ง‘๋‹ˆ๋‹ค.

CIDR ํ‘œ๊ธฐ ์˜๋ฏธ IP ๊ฐœ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ
0.0.0.0/0 ๋ชจ๋“  IP ํ—ˆ์šฉ ์•ฝ 43์–ต ๊ฐœ ๊ณต๊ฐœ ์›น์„œ๋ฒ„
192.168.1.0/24 192.168.1.0 ~ 192.168.1.255 256๊ฐœ ์‚ฌ๋‚ด ๋„คํŠธ์›Œํฌ
10.0.0.0/16 10.0.0.0 ~ 10.0.255.255 65,536๊ฐœ VPC ๋‚ด๋ถ€
203.0.113.5/32 ๋”ฑ ํ•˜๋‚˜์˜ IP๋งŒ 1๊ฐœ ํŠน์ • ๊ฐœ๋ฐœ์ž IP
๐Ÿ’ก ๊ฟ€ํŒ! SSH(ํฌํŠธ 22)๋Š” ์ ˆ๋Œ€ 0.0.0.0/0์œผ๋กœ ์—ด์ง€ ๋งˆ์„ธ์š”!
์ „ ์„ธ๊ณ„ ํ•ด์ปค๋“ค์ด 22๋ฒˆ ํฌํŠธ ์Šค์บ”์„ 24์‹œ๊ฐ„ ๋Œ๋ฆฌ๊ณ  ์žˆ๊ฑฐ๋“ ์š” ๐Ÿ˜ฑ
๋ฐ˜๋“œ์‹œ ๋ณธ์ธ IP(๋‚ดIP/32) ๋˜๋Š” VPN IP๋งŒ ํ—ˆ์šฉํ•˜์„ธ์š”!
โš™๏ธ 4. ์‹ค์ „ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ์˜ˆ์‹œ
๐ŸŒ ์›น ์„œ๋ฒ„(EC2) ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •

์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•  ๋•Œ์˜ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •์ด์—์š”.
์ด ์ •๋„๋ฉด ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์จ๋„ ๋  ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค ใ…‹ใ…‹


# ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ (Inbound Rules)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์œ ํ˜•      โ”‚ ํ”„๋กœํ† ์ฝœ โ”‚ ํฌํŠธ  โ”‚ ์†Œ์Šค              โ”‚ ์„ค๋ช…        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ SSH       โ”‚ TCP      โ”‚ 22   โ”‚ ๋‚ดIP/32           โ”‚ ๊ด€๋ฆฌ์ž SSH  โ”‚
โ”‚ HTTP      โ”‚ TCP      โ”‚ 80   โ”‚ 0.0.0.0/0         โ”‚ ์›น ์ ‘์†     โ”‚
โ”‚ HTTPS     โ”‚ TCP      โ”‚ 443  โ”‚ 0.0.0.0/0         โ”‚ ๋ณด์•ˆ ์›น ์ ‘์†โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

# ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™ (Outbound Rules)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์œ ํ˜•      โ”‚ ํ”„๋กœํ† ์ฝœ โ”‚ ํฌํŠธ  โ”‚ ๋Œ€์ƒ              โ”‚ ์„ค๋ช…        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ All       โ”‚ All      โ”‚ All  โ”‚ 0.0.0.0/0         โ”‚ ์ „์ฒด ํ—ˆ์šฉ   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDS) ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •

DB ์„œ๋ฒ„๋Š” ์ ˆ๋Œ€ ์ธํ„ฐ๋„ท์— ์ง์ ‘ ๋…ธ์ถœํ•˜๋ฉด ์•ˆ ๋ผ์š”!
์›น ์„œ๋ฒ„์˜ ๋ณด์•ˆ ๊ทธ๋ฃน ID๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ์ •์„์ž…๋‹ˆ๋‹ค.


# RDS ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์œ ํ˜•      โ”‚ ํ”„๋กœํ† ์ฝœ โ”‚ ํฌํŠธ  โ”‚ ์†Œ์Šค                  โ”‚ ์„ค๋ช…   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ MySQL/Auroraโ”‚ TCP   โ”‚ 3306 โ”‚ sg-์›น์„œ๋ฒ„๋ณด์•ˆ๊ทธ๋ฃนID    โ”‚ ์›นโ†’DB  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
๐Ÿ”ฅ ๋ณด์•ˆ ๊ทธ๋ฃน ID๋ฅผ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์™œ ์ข‹๋ƒ๊ณ ? IP ์ฃผ์†Œ๋Š” ์„œ๋ฒ„๊ฐ€ ์žฌ์‹œ์ž‘๋˜๋ฉด ๋ฐ”๋€” ์ˆ˜ ์žˆ์–ด์š”.
ํ•˜์ง€๋งŒ ๋ณด์•ˆ ๊ทธ๋ฃน ID๋Š” ๋ณ€ํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ, ์›น ์„œ๋ฒ„ IP๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ DB ์ ‘์† ๊ทœ์น™์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š”!
์ด๊ฒŒ ๋ฐ”๋กœ ๋ณด์•ˆ ๊ทธ๋ฃน ์ฐธ์กฐ(Security Group Reference) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค ๐ŸŽฏ
๐Ÿ—๏ธ 3-Tier ์•„ํ‚คํ…์ฒ˜ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค๊ณ„

์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” 3๊ณ„์ธต ๊ตฌ์กฐ์—์„œ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค๊ณ„์˜ˆ์š”.
์›น โ†’ ์•ฑ โ†’ DB ์ˆœ์„œ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ํ๋ฅด๊ณ , ๊ฐ ๊ณ„์ธต์€ ์•ž ๊ณ„์ธต์˜ ๋ณด์•ˆ ๊ทธ๋ฃน๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ ์›น ๊ณ„์ธต (ALB/EC2) ์ธ๋ฐ”์šด๋“œ: 80, 443 โ†’ 0.0.0.0/0
์•„์›ƒ๋ฐ”์šด๋“œ: 8080 โ†’ ์•ฑ ๊ณ„์ธต ๋ณด์•ˆ ๊ทธ๋ฃน

โš™๏ธ ์•ฑ ๊ณ„์ธต (EC2)
์ธ๋ฐ”์šด๋“œ: 8080 โ†’ ์›น ๊ณ„์ธต ๋ณด์•ˆ ๊ทธ๋ฃน๋งŒ
์•„์›ƒ๋ฐ”์šด๋“œ: 3306 โ†’ DB ๊ณ„์ธต ๋ณด์•ˆ ๊ทธ๋ฃน

๐Ÿ—„๏ธ DB ๊ณ„์ธต (RDS)
์ธ๋ฐ”์šด๋“œ: 3306 โ†’ ์•ฑ ๊ณ„์ธต ๋ณด์•ˆ ๊ทธ๋ฃน๋งŒ
์•„์›ƒ๋ฐ”์šด๋“œ: ๊ธฐ๋ณธ ํ—ˆ์šฉ
3-Tier ์•„ํ‚คํ…์ฒ˜ ๋ณด์•ˆ ๊ทธ๋ฃน ํ๋ฆ„๋„ ๐ŸŒ ์ธํ„ฐ๋„ท 80/443 ๐ŸŒ ์›น ๊ณ„์ธต ALB / EC2 SG-WEB ์ธ๋ฐ”์šด๋“œ 80, 443 โ† 0.0.0.0/0 ์•„์›ƒ๋ฐ”์šด๋“œ 8080 โ†’ SG-APP 8080 โš™๏ธ ์•ฑ ๊ณ„์ธต EC2 (๋ฐฑ์—”๋“œ) SG-APP ์ธ๋ฐ”์šด๋“œ 8080 โ† SG-WEB๋งŒ ์•„์›ƒ๋ฐ”์šด๋“œ 3306 โ†’ SG-DB 3306 ๐Ÿ—„๏ธ DB ๊ณ„์ธต RDS (MySQL) SG-DB ์ธ๋ฐ”์šด๋“œ 3306 โ† SG-APP๋งŒ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ธฐ๋ณธ ํ—ˆ์šฉ DB ์ง์ ‘ ์ ‘๊ทผ ์ฐจ๋‹จ! โœ• ๊ฐ ๊ณ„์ธต์€ ๋ฐ”๋กœ ์•ž ๊ณ„์ธต์˜ ๋ณด์•ˆ ๊ทธ๋ฃน๋งŒ ํ—ˆ์šฉ โ†’ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ ์ธํ„ฐ๋„ท์—์„œ DB๋กœ ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ โ€” ์ด๊ฒŒ ์ง„์งœ ๋ณด์•ˆ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค ๐Ÿ”
๐Ÿ”„ 5. Stateful ๋™์ž‘ ์›๋ฆฌ โ€” ๋ณด์•ˆ ๊ทธ๋ฃน์˜ ํ•ต์‹ฌ ํŠน์„ฑ

๋ณด์•ˆ ๊ทธ๋ฃน์ด Statefulํ•˜๋‹ค๋Š” ๊ฒŒ ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด๋ด…์‹œ๋‹ค.
์ด๊ฒŒ NACL๊ณผ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๊ณ , ์‹ค๋ฌด์—์„œ ์—„์ฒญ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด์—์š”!

๐Ÿ“Œ Stateful ๋™์ž‘ ์˜ˆ์‹œ 1๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ(123.0.0.1)๊ฐ€ ์„œ๋ฒ„์˜ ํฌํŠธ 80์œผ๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋ƒ„
2๏ธโƒฃ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™: ํฌํŠธ 80, 0.0.0.0/0 ํ—ˆ์šฉ โ†’ โœ… ํ†ต๊ณผ!
3๏ธโƒฃ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ (์˜ˆ: ํด๋ผ์ด์–ธํŠธ์˜ ์ž„์‹œ ํฌํŠธ 54321๋กœ)
4๏ธโƒฃ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™์— ํฌํŠธ 54321์ด ์—†์–ด๋„ โ†’ โœ… ์ž๋™ ํ—ˆ์šฉ!

์™œ๋ƒ๋ฉด? ๋ณด์•ˆ ๊ทธ๋ฃน์ด "์ด ์—ฐ๊ฒฐ์€ ๋‚ด๊ฐ€ ํ—ˆ์šฉํ•œ ์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์˜ ์‘๋‹ต์ด์•ผ"๋ผ๊ณ  ์ƒํƒœ(State)๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”!
โš ๏ธ NACL(Stateless)๊ณผ ๋น„๊ต NACL์€ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„์š”.
๊ทธ๋ž˜์„œ ์ธ๋ฐ”์šด๋“œ๋กœ 80 ํ—ˆ์šฉํ•ด๋„, ์‘๋‹ต ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•œ ์•„์›ƒ๋ฐ”์šด๋“œ ์ž„์‹œ ํฌํŠธ(1024-65535)๋„ ๋”ฐ๋กœ ์—ด์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
NACL ์„ค์ •ํ•  ๋•Œ ์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด ์™œ ์•ˆ ๋˜๋Š”์ง€ ํ•œ์ฐธ ํ—ค๋งค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ใ…‹ใ…‹ใ…‹
โœ… 6. ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ๋ชจ๋ฒ” ์‚ฌ๋ก€ (Best Practices)
๊ทธ๋ž˜์„œ ์‹ค๋ฌด์—์„œ ๋ณด์•ˆ ๊ทธ๋ฃน ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹์•„? ํŒ ์ข€ ์ค˜๋ด ๐Ÿ™

ใ…‹ใ…‹ ์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด ๋‚˜์ค‘์— ๋ณด์•ˆ ๊ฐ์‚ฌ์—์„œ ํ„ธ๋ฆด ์ˆ˜ ์žˆ์–ด... ์ž˜ ๋“ค์–ด๋ด ๐Ÿ‘€
๐ŸŽฏ ์›์น™ 1: ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ (Least Privilege)

ํ•„์š”ํ•œ ํฌํŠธ๋งŒ, ํ•„์š”ํ•œ IP๋งŒ ์—ด์–ด๋‘์„ธ์š”.
"์ผ๋‹จ ๋‹ค ์—ด์–ด๋†“๊ณ  ๋‚˜์ค‘์— ๋ง‰์ž"๋Š” ์ƒ๊ฐ์€ ์ ˆ๋Œ€ ๊ธˆ๋ฌผ์ž…๋‹ˆ๋‹ค ๐Ÿšซ
ํŠนํžˆ 0.0.0.0/0์œผ๋กœ ๋ชจ๋“  ํฌํŠธ๋ฅผ ์—ฌ๋Š” ๊ฑด ์ž์‚ดํ–‰์œ„์˜ˆ์š” ใ…‹ใ…‹

๐Ÿท๏ธ ์›์น™ 2: ์—ญํ• ๋ณ„ ๋ณด์•ˆ ๊ทธ๋ฃน ๋ถ„๋ฆฌ

ํ•˜๋‚˜์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์— ๋ชจ๋“  ๊ทœ์น™์„ ๋•Œ๋ ค๋„ฃ์ง€ ๋งˆ์„ธ์š”.
์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

๐Ÿ“Œ ์—ญํ• ๋ณ„ ๋ณด์•ˆ ๊ทธ๋ฃน ๋ถ„๋ฆฌ ์˜ˆ์‹œ - sg-bastion: ๋ฐฐ์Šค์ฒœ ํ˜ธ์ŠคํŠธ์šฉ (SSH ํ—ˆ์šฉ)
- sg-web: ์›น ์„œ๋ฒ„์šฉ (80, 443 ํ—ˆ์šฉ)
- sg-app: ์•ฑ ์„œ๋ฒ„์šฉ (๋‚ด๋ถ€ ํ†ต์‹ ๋งŒ)
- sg-db: DB์šฉ (์•ฑ ์„œ๋ฒ„๋งŒ ํ—ˆ์šฉ)
- sg-monitoring: ๋ชจ๋‹ˆํ„ฐ๋ง ์—์ด์ „ํŠธ์šฉ
๐Ÿ“ ์›์น™ 3: ์„ค๋ช…(Description) ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑ

๊ทœ์น™๋งˆ๋‹ค ์„ค๋ช…์„ ๊ผญ ์จ๋‘์„ธ์š”.
6๊ฐœ์›” ํ›„์— "์ด ๊ทœ์น™ ์™œ ์žˆ๋Š” ๊ฑฐ์ง€?" ํ•˜๋ฉด์„œ ๋ฉ๋•Œ๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š” ใ…‹ใ…‹ใ…‹
์˜ˆ: "2024-01 ๊ฐœ๋ฐœํŒ€ ๊น€์ฒ ์ˆ˜ ์š”์ฒญ - ์‚ฌ๋ฌด์‹ค IP SSH ์ ‘์†"

๐Ÿ” ์›์น™ 4: ์ •๊ธฐ์ ์ธ ๊ทœ์น™ ๊ฐ์‚ฌ

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ทœ์น™์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ •๋ฆฌํ•˜์„ธ์š”.
AWS Config๋‚˜ Security Hub๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฏธ์‚ฌ์šฉ ๋ณด์•ˆ ๊ทธ๋ฃน์ด๋‚˜ ๊ณผ๋„ํ•œ ๊ถŒํ•œ์„ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿšซ ์›์น™ 5: ์ ˆ๋Œ€ ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ๋“ค
๐Ÿšจ ์ด๊ฒƒ๋งŒ์€ ์ ˆ๋Œ€ ํ•˜์ง€ ๋งˆ์„ธ์š”! โŒ SSH(22๋ฒˆ) ํฌํŠธ๋ฅผ 0.0.0.0/0์œผ๋กœ ์—ด๊ธฐ
โŒ RDP(3389๋ฒˆ) ํฌํŠธ๋ฅผ 0.0.0.0/0์œผ๋กœ ์—ด๊ธฐ
โŒ DB ํฌํŠธ(3306, 5432, 1433)๋ฅผ ์ธํ„ฐ๋„ท์— ์ง์ ‘ ๋…ธ์ถœ
โŒ ๋ชจ๋“  ํฌํŠธ(0-65535)๋ฅผ ์ „์ฒด ํ—ˆ์šฉ
โŒ ๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™์— ์„ค๋ช… ์—†์ด IP๋งŒ ์ ๊ธฐ
โŒ ํ‡ด์‚ฌํ•œ ์ง์› IP ๊ทœ์น™ ๋ฐฉ์น˜ํ•˜๊ธฐ
๐Ÿ’ป 7. AWS CLI๋กœ ๋ณด์•ˆ ๊ทธ๋ฃน ๊ด€๋ฆฌํ•˜๊ธฐ

์ฝ˜์†” ํด๋ฆญํด๋ฆญ๋„ ์ข‹์ง€๋งŒ, CLI๋ฅผ ์“ฐ๋ฉด ์ž๋™ํ™”์™€ IaC(Infrastructure as Code)๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ์š”.
DevOps ์—”์ง€๋‹ˆ์–ด๋ผ๋ฉด CLI ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ ์ค‘์˜ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค ใ…‹ใ…‹

๐Ÿ†• ๋ณด์•ˆ ๊ทธ๋ฃน ์ƒ์„ฑ

# ๋ณด์•ˆ ๊ทธ๋ฃน ์ƒ์„ฑ
aws ec2 create-security-group \
  --group-name my-web-sg \
  --description "์›น ์„œ๋ฒ„์šฉ ๋ณด์•ˆ ๊ทธ๋ฃน" \
  --vpc-id vpc-xxxxxxxx

# ์ถœ๋ ฅ ์˜ˆ์‹œ
{
  "GroupId": "sg-0123456789abcdef0"
}
๐Ÿ“ฅ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์ถ”๊ฐ€

# HTTP(80) ์ „์ฒด ํ—ˆ์šฉ
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

# HTTPS(443) ์ „์ฒด ํ—ˆ์šฉ
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 443 \
  --cidr 0.0.0.0/0

# SSH(22) ํŠน์ • IP๋งŒ ํ—ˆ์šฉ
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.5/32
๐Ÿ” ๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™ ์กฐํšŒ

# ํŠน์ • ๋ณด์•ˆ ๊ทธ๋ฃน ์ƒ์„ธ ์กฐํšŒ
aws ec2 describe-security-groups \
  --group-ids sg-0123456789abcdef0

# ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰
aws ec2 describe-security-groups \
  --filters Name=group-name,Values=my-web-sg
๐Ÿ—‘๏ธ ๊ทœ์น™ ์‚ญ์ œ

# ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์‚ญ์ œ
aws ec2 revoke-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.5/32
๐Ÿ—๏ธ 8. Terraform์œผ๋กœ ๋ณด์•ˆ ๊ทธ๋ฃน ์ฝ”๋“œํ™” (IaC)

์š”์ฆ˜ ์‹ค๋ฌด์—์„œ๋Š” ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ฝ˜์†”์—์„œ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค Terraform ๊ฐ™์€ IaC ๋„๊ตฌ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ํŠธ๋ Œ๋“œ์˜ˆ์š”.
์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋ฒ„์ „ ๊ด€๋ฆฌ, ๋ฆฌ๋ทฐ, ์ž๋™ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ฑฐ๋“ ์š” ๐Ÿš€


# main.tf - ์›น ์„œ๋ฒ„ ๋ณด์•ˆ ๊ทธ๋ฃน Terraform ์ฝ”๋“œ

resource "aws_security_group" "web_sg" {
  name        = "web-server-sg"
  description = "์›น ์„œ๋ฒ„์šฉ ๋ณด์•ˆ ๊ทธ๋ฃน"
  vpc_id      = aws_vpc.main.id

  # ์ธ๋ฐ”์šด๋“œ: HTTP ํ—ˆ์šฉ
  ingress {
    description = "HTTP from Internet"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # ์ธ๋ฐ”์šด๋“œ: HTTPS ํ—ˆ์šฉ
  ingress {
    description = "HTTPS from Internet"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # ์ธ๋ฐ”์šด๋“œ: SSH (๊ด€๋ฆฌ์ž IP๋งŒ)
  ingress {
    description = "SSH from Admin"
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["203.0.113.5/32"]
  }

  # ์•„์›ƒ๋ฐ”์šด๋“œ: ์ „์ฒด ํ—ˆ์šฉ
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name        = "web-server-sg"
    Environment = "production"
    ManagedBy   = "terraform"
  }
}

# DB ๋ณด์•ˆ ๊ทธ๋ฃน (์•ฑ ์„œ๋ฒ„๋งŒ ํ—ˆ์šฉ)
resource "aws_security_group" "db_sg" {
  name        = "database-sg"
  description = "RDS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ ๋ณด์•ˆ ๊ทธ๋ฃน"
  vpc_id      = aws_vpc.main.id

  ingress {
    description     = "MySQL from App Server"
    from_port       = 3306
    to_port         = 3306
    protocol        = "tcp"
    security_groups = [aws_security_group.app_sg.id]
  }

  tags = {
    Name = "database-sg"
  }
}
๐Ÿ’ก Terraform ๋ณด์•ˆ ๊ทธ๋ฃน ๊ด€๋ฆฌ ๊ฟ€ํŒ! - aws_security_group_rule ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉด ๊ทœ์น™ ์ถฉ๋Œ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ
- lifecycle { create_before_destroy = true } ์„ค์ •์œผ๋กœ ๋ฌด์ค‘๋‹จ ์—…๋ฐ์ดํŠธ
- ๋ณ€์ˆ˜(variables)๋กœ IP ๋ชฉ๋ก ๊ด€๋ฆฌํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ˜๏ธ 9. GCP ยท Azure์—์„œ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน ๊ฐœ๋… ๋น„๊ต

AWS๋งŒ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด, ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ์—์„œ ๋น„์Šทํ•œ ๊ฐœ๋…์ด ๋ญ”์ง€ ์•Œ์•„๋‘๋ฉด ์ข‹์•„์š”.
์ด๋ฆ„์€ ๋‹ฌ๋ผ๋„ ์›๋ฆฌ๋Š” ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ…‹ใ…‹

ํด๋ผ์šฐ๋“œ AWS GCP Azure
๋ฐฉํ™”๋ฒฝ ๊ฐœ๋… Security Group Firewall Rules NSG (Network Security Group)
์ ์šฉ ๋ ˆ๋ฒจ ์ธ์Šคํ„ด์Šค ๋„คํŠธ์›Œํฌ/์ธ์Šคํ„ด์Šค ์„œ๋ธŒ๋„ท/NIC
Stateful โœ… Yes โœ… Yes โœ… Yes
๊ฑฐ๋ถ€ ๊ทœ์น™ โŒ ์—†์Œ โœ… ์žˆ์Œ โœ… ์žˆ์Œ
์šฐ์„ ์ˆœ์œ„ ์—†์Œ(๋ชจ๋‘ ํ—ˆ์šฉ) ์ˆซ์ž๋กœ ์ง€์ • ์ˆซ์ž๋กœ ์ง€์ •(๋‚ฎ์„์ˆ˜๋ก ์šฐ์„ )
๐Ÿ”ต GCP Firewall Rules ํŠน์ง• GCP๋Š” VPC ๋ ˆ๋ฒจ์—์„œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ , ํƒœ๊ทธ(Tag)๋‚˜ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ธ์Šคํ„ด์Šค์— ์ ์šฉํ•ด์š”.
Allow์™€ Deny ๊ทœ์น™ ๋ชจ๋‘ ์ง€์›ํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„(Priority) ์ˆซ์ž๋กœ ๊ทœ์น™ ์ˆœ์„œ๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŸฃ Azure NSG ํŠน์ง•
Azure์˜ NSG๋Š” ์„œ๋ธŒ๋„ท์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(NIC)์— ์—ฐ๊ฒฐํ•ด์š”.
์ธ๋ฐ”์šด๋“œ/์•„์›ƒ๋ฐ”์šด๋“œ ๋ชจ๋‘ Allow/Deny ๊ทœ์น™์„ ์ง€์›ํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„ 100~4096 ๋ฒ”์œ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ˜ฑ 10. ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •ํ•  ๋•Œ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜๋“ค
๋‚˜ ์–ด์ œ RDS ํฌํŠธ ์ธํ„ฐ๋„ท์— ์—ด์–ด๋†จ๋‹ค๊ฐ€ DBAํ•œํ…Œ ํ˜ผ๋‚ฌ์–ด ใ… ใ… 

ใ…‹ใ…‹ใ…‹ใ…‹ ๊ทธ๊ฑฐ ์ง„์งœ ํด๋ž˜์‹ ์‹ค์ˆ˜์ž„... ๋‚˜๋„ ์ฒ˜์Œ์—” ๊ทธ๋žฌ์–ด ๐Ÿ˜…
์ด๋Ÿฐ ์‹ค์ˆ˜ ๋” ์žˆ์–ด? ๋ฏธ๋ฆฌ ์•Œ์•„๋‘๊ณ  ์‹ถ์–ด

ใ…‡ใ…‡ ์ง„์งœ ๋งŽ์•„. ๋‹ค ์•Œ๋ ค์ค„๊ฒŒ ใ…‹ใ…‹
โŒ ์‹ค์ˆ˜ 1: ์ž„์‹œ๋กœ ์—ด์–ด๋†“๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ

๋””๋ฒ„๊น…ํ•˜๋ ค๊ณ  ์ž ๊น 0.0.0.0/0์œผ๋กœ ์—ด์–ด๋†“๊ณ  ํ‡ด๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ใ…‹ใ…‹ใ…‹
์ด๋Ÿฐ ์ž„์‹œ ๊ทœ์น™์ด ๋ช‡ ๋‹ฌ์”ฉ ๋ฐฉ์น˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์‹ค๋ฌด์—์„œ ์ •๋ง ๋งŽ์•„์š”.
AWS Config ๊ทœ์น™์ด๋‚˜ Lambda ํ•จ์ˆ˜๋กœ ๊ณผ๋„ํ•œ ๊ถŒํ•œ ๊ทœ์น™์„ ์ž๋™ ํƒ์ง€ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋‘์„ธ์š”!

โŒ ์‹ค์ˆ˜ 2: ๋ณด์•ˆ ๊ทธ๋ฃน ํ•˜๋‚˜์— ๋ชจ๋“  ๊ทœ์น™ ๋•Œ๋ ค๋„ฃ๊ธฐ

๊ด€๋ฆฌํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค๊ณ  ํ•˜๋‚˜์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์— ๋ชจ๋“  ๊ทœ์น™์„ ๋„ฃ์œผ๋ฉด,
๋‚˜์ค‘์— ์–ด๋–ค ์ธ์Šคํ„ด์Šค์— ์–ด๋–ค ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š”์ง€ ํŒŒ์•…์ด ์•ˆ ๋ผ์š”.
์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์žฅ๊ธฐ์ ์œผ๋กœ ํ›จ์”ฌ ํŽธํ•ฉ๋‹ˆ๋‹ค.

โŒ ์‹ค์ˆ˜ 3: ๋ณด์•ˆ ๊ทธ๋ฃน ์‚ญ์ œ ์‹œ ์˜์กด์„ฑ ํ™•์ธ ์•ˆ ํ•˜๊ธฐ

๋‹ค๋ฅธ ๋ณด์•ˆ ๊ทธ๋ฃน์˜ ์†Œ์Šค๋กœ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์‚ญ์ œํ•˜๋ ค ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
์‚ญ์ œ ์ „์— ๋ฐ˜๋“œ์‹œ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”!

โŒ ์‹ค์ˆ˜ 4: IPv6 ๊ณ ๋ ค ์•ˆ ํ•˜๊ธฐ

IPv4๋งŒ ํ—ˆ์šฉํ•ด๋†“๊ณ  "์™œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์ ‘์†์ด ์•ˆ ๋˜์ง€?" ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์š”.
IPv6 ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ::/0 ๊ทœ์น™๋„ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โŒ ์‹ค์ˆ˜ 5: ๋ณด์•ˆ ๊ทธ๋ฃน ๋ณ€๊ฒฝ ํ›„ ์ฆ‰์‹œ ์ ์šฉ ์ฐฉ๊ฐ

๋ณด์•ˆ ๊ทธ๋ฃน ๊ทœ์น™์€ ๋ณ€๊ฒฝ ์ฆ‰์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค โ€” ์ด๊ฑด ๋งž์•„์š”.
ํ•˜์ง€๋งŒ ๊ธฐ์กด ์—ฐ๊ฒฐ(established connection)์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”.
๊ทœ์น™ ๋ณ€๊ฒฝ ํ›„ ๊ธฐ์กด ์„ธ์…˜์„ ๋Š์–ด์•ผ ์ƒˆ ๊ทœ์น™์ด ์™„์ „ํžˆ ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Š 11. ๋ณด์•ˆ ๊ทธ๋ฃน ๋ชจ๋‹ˆํ„ฐ๋ง & ๊ฐ์‚ฌ ๋„๊ตฌ

์„ค์ •๋งŒ ์ž˜ ํ•ด๋†“๋Š”๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ์—์š”.
์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐ์‚ฌ๊ฐ€ ๋ณด์•ˆ์˜ ์™„์„ฑ์ž…๋‹ˆ๋‹ค ๐Ÿ’ช

๐Ÿ” AWS ๊ธฐ๋ณธ ๋„๊ตฌ๋“ค
1. AWS Config ๋ณด์•ˆ ๊ทธ๋ฃน ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ž๋™์œผ๋กœ ๊ธฐ๋กํ•˜๊ณ , ๊ทœ์น™ ์œ„๋ฐ˜ ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.
์˜ˆ: "SSH๊ฐ€ 0.0.0.0/0์œผ๋กœ ์—ด๋ฆฐ ๋ณด์•ˆ ๊ทธ๋ฃน ํƒ์ง€" ๊ทœ์น™ ์„ค์ • ๊ฐ€๋Šฅ

2. AWS Security Hub
CIS AWS Foundations Benchmark ๊ธฐ์ค€์œผ๋กœ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •์„ ์ž๋™ ์ ๊ฒ€ํ•ด์ค๋‹ˆ๋‹ค.
"unrestricted SSH access" ๊ฐ™์€ ์ทจ์•ฝ์ ์„ ์ž๋™์œผ๋กœ ์ฐพ์•„์ค˜์š”.

3. VPC Flow Logs
์‹ค์ œ๋กœ ์–ด๋–ค ํŠธ๋ž˜ํ”ฝ์ด ํ—ˆ์šฉ/์ฐจ๋‹จ๋˜์—ˆ๋Š”์ง€ ๋กœ๊ทธ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
CloudWatch Logs๋‚˜ S3์— ์ €์žฅํ•ด์„œ ๋ถ„์„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4. Amazon GuardDuty
๋น„์ •์ƒ์ ์ธ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ AI๋กœ ํƒ์ง€ํ•ด์ค๋‹ˆ๋‹ค.
๋ณด์•ˆ ๊ทธ๋ฃน์ด ๋šซ๋ ธ์„ ๋•Œ ์ด์ƒ ์ง•ํ›„๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๐Ÿ’ก VPC Flow Logs ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•
aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-xxxxxxxx --traffic-type ALL --log-destination-type cloud-watch-logs --log-group-name /aws/vpc/flowlogs


์ด๊ฑธ ์ผœ๋‘๋ฉด ๋ณด์•ˆ ๊ทธ๋ฃน์—์„œ ์–ด๋–ค ํŠธ๋ž˜ํ”ฝ์ด ACCEPT/REJECT ๋˜๋Š”์ง€ ๋‹ค ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!
๐ŸŽ“ 12. ๋งˆ๋ฌด๋ฆฌ โ€” ๋ณด์•ˆ ๊ทธ๋ฃน, ์ด์ œ ๋‘๋ ต์ง€ ์•Š์ฃ ?
์™€ ์ด๊ฑฐ ๋‹ค ์ฝ๊ณ  ๋‚˜๋‹ˆ๊นŒ ๋ณด์•ˆ ๊ทธ๋ฃน์ด ์™„์ „ ์ดํ•ด๋์–ด! ๊ณ ๋งˆ์›Œ ใ…‹ใ…‹ใ…‹ ๐Ÿ™

ใ…‹ใ…‹ ์ด์ œ ๋„ˆ๋„ ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ๊ณ ์ˆ˜ ๋์Œ! ์‹ค์Šต๋„ ๊ผญ ํ•ด๋ด ๐Ÿ’ช
๊ทผ๋ฐ ์ด๋Ÿฐ ํด๋ผ์šฐ๋“œ ์„ค์ • ๋„์›€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ณณ ์—†์–ด?

์žฌ๋Šฅ๋„ท(jaenung.net) ๊ฐ€๋ด! ํด๋ผ์šฐ๋“œ/DevOps ์ „๋ฌธ๊ฐ€๋“ค์ด ๋งŽ์•„์„œ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ •๋ถ€ํ„ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๊นŒ์ง€ ๋„์›€๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ๐Ÿ˜Ž

์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”!

๐Ÿ“š ์˜ค๋Š˜์˜ ํ•ต์‹ฌ ์ •๋ฆฌ
  • โœ… ๋ณด์•ˆ ๊ทธ๋ฃน์€ ์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ์˜ ๊ฐ€์ƒ ๋ฐฉํ™”๋ฒฝ โ€” ํ—ˆ์šฉ ๊ทœ์น™๋งŒ ์กด์žฌ
  • โœ… Stateful: ์ธ๋ฐ”์šด๋“œ ํ—ˆ์šฉ ์‹œ ์‘๋‹ต ํŠธ๋ž˜ํ”ฝ ์ž๋™ ํ—ˆ์šฉ
  • โœ… ์ธ๋ฐ”์šด๋“œ(์™ธ๋ถ€โ†’์„œ๋ฒ„) / ์•„์›ƒ๋ฐ”์šด๋“œ(์„œ๋ฒ„โ†’์™ธ๋ถ€) ๋ฐฉํ–ฅ ๊ตฌ๋ถ„
  • โœ… CIDR ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ IP ๋ฒ”์œ„ ์ง€์ • (/32 = ๋‹จ์ผ IP, /0 = ์ „์ฒด)
  • โœ… ์ตœ์†Œ ๊ถŒํ•œ ์›์น™: ํ•„์š”ํ•œ ํฌํŠธ๋งŒ, ํ•„์š”ํ•œ IP๋งŒ
  • โœ… ์—ญํ• ๋ณ„ ๋ณด์•ˆ ๊ทธ๋ฃน ๋ถ„๋ฆฌ โ†’ ๊ด€๋ฆฌ ํšจ์œจ UP
  • โœ… ๋ณด์•ˆ ๊ทธ๋ฃน ID ์ฐธ์กฐ ๋ฐฉ์‹์œผ๋กœ ๋™์  ํ™˜๊ฒฝ ๋Œ€์‘
  • โœ… Terraform์œผ๋กœ IaC ๊ด€๋ฆฌ โ†’ ๋ฒ„์ „ ๊ด€๋ฆฌ + ์ž๋™ํ™”
  • โœ… AWS Config, Security Hub, VPC Flow Logs๋กœ ์ง€์† ๋ชจ๋‹ˆํ„ฐ๋ง

ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ์€ ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๊ณ  ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—์š”.
์ง€์†์ ์ธ ๊ฒ€ํ† ์™€ ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ์‚ด์•„์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.
์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๐Ÿ”

ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋‚˜ ๋ณด์•ˆ ์„ค์ •์— ๋Œ€ํ•ด ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด,
์žฌ๋Šฅ๋„ท์—์„œ ํด๋ผ์šฐ๋“œ/DevOps ์ „๋ฌธ๊ฐ€๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”.
๋‹ค์–‘ํ•œ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์ „๋ฌธ๊ฐ€๋“ค์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์™€์ค„ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค ๐Ÿ˜Š


๐Ÿ” ๋ณด์•ˆ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜! ์˜ค๋Š˜๋ถ€ํ„ฐ ๋ณด์•ˆ ๊ทธ๋ฃน ์„ค์ • ์ œ๋Œ€๋กœ ํ•ด๋ด…์‹œ๋‹ค ๐Ÿ’ช
๊ถ๊ธˆํ•œ ์ ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š” โ€” ๊ฐ™์ด ์„ฑ์žฅํ•ด์š”! ๐ŸŒฑ

๋Œ“๊ธ€ ์ž‘์„ฑ

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

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

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