๐Ÿ“… Day 14 | AWS NACL โ€” AWS์˜ ์„œ๋ธŒ๋„ท ์ˆ˜์ค€ ๋ณด์•ˆ ๐Ÿ”

๋ฐœํ–‰: (2025๋…„ 12์›” 13์ผ ์˜ค์ „ 02:56 GMT+9)
5 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๊ฐœ์š”

  • ์„œ๋ธŒ๋„ท ์ˆ˜์ค€ ๋ฐฉํ™”๋ฒฝ โ€“ ๊ฐœ๋ณ„ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋ธŒ๋„ท์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌด์ƒํƒœ(stateless) โ€“ ์ธ๋ฐ”์šด๋“œ์™€ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™์ด ๋…๋ฆฝ์ ์œผ๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, ๋ฐ˜ํ™˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ALLOW ๋ฐ DENY ๊ทœ์น™ ์ง€์› โ€“ ๊ทœ์น™ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ๊ฒƒ์ด ๋จผ์ € ํ‰๊ฐ€๋จ).
  • ๊ธฐ๋ณธ NACL โ€“ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ NACL โ€“ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ์„ค๋ช…
๋ณดํ˜ธ ๊ณ„์ธตํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท(์˜ˆ: ์›น ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, EKS ๋…ธ๋“œ)์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๋ฌด์ƒํƒœ ํ•„ํ„ฐ๋ง์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•ด ์ธ๋ฐ”์šด๋“œ์™€ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™์ด ๋ชจ๋‘ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทœ์น™ ์œ ํ˜•ALLOW์™€ DENY ํ•ญ๋ชฉ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทœ์น™ ์šฐ์„ ์ˆœ์œ„๊ทœ์น™ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: 100 โ†’ 101 โ†’ 102โ€ฆ).
๊ธฐ๋ณธ ๋™์ž‘๊ธฐ๋ณธ NACL์€ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ •์˜ NACL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

NACL ์ž‘๋™ ๋ฐฉ์‹

  1. ์ฒจ๋ถ€ โ€“ NACL์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋ธŒ๋„ท์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  2. ๋ฌด์ƒํƒœ ํŠน์„ฑ โ€“ ํฌํŠธ์— ๋Œ€ํ•œ ์ธ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋ฉด, ์‘๋‹ต ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•œ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™๋„ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ทœ์น™ ํ‰๊ฐ€ โ€“ ํŠธ๋ž˜ํ”ฝ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™(๊ทœ์น™ ๋ฒˆํ˜ธ ๊ธฐ์ค€)์ด ๋™์ž‘์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ธฐ๋ณธ vs. ์‚ฌ์šฉ์ž ์ •์˜ โ€“ ๊ธฐ๋ณธ NACL์€ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ •์˜ NACL์€ ์›ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๋‚˜๋จธ์ง€๋Š” ์•”๋ฌต์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค

ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท

๋ฆฌ์†Œ์Šคํ—ˆ์šฉ ํŠธ๋ž˜ํ”ฝ
EC2 ์›น ์„œ๋ฒ„HTTP(80), HTTPS(443), SSH(22)
Application Load Balancer์œ„์™€ ๋™์ผ

ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท

๋ฆฌ์†Œ์Šคํ—ˆ์šฉ ํŠธ๋ž˜ํ”ฝ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์˜ ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ(3306)
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์•ฑ ์„œ๋ธŒ๋„ท์—์„œ 3306 ํฌํŠธ ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ
EKS ์›Œ์ปค ๋…ธ๋“œ์„œ๋ธŒ๋„ท ๋‚ด ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ 
์ฐธ๊ณ ์ง์ ‘ ์ธํ„ฐ๋„ท ์ ‘๊ทผ ๋ถˆ๊ฐ€; ๋ชจ๋“  ์ธ๋ฐ”์šด๋“œ/์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์ด ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๊ทธ๋ฃน๊ณผ์˜ ๋น„๊ต

ํ•ญ๋ชฉ๋ณด์•ˆ ๊ทธ๋ฃนNACL
๋ฒ”์œ„์ธ์Šคํ„ด์Šค ์ˆ˜์ค€์„œ๋ธŒ๋„ท ์ˆ˜์ค€
์ƒํƒœ ์œ ์ง€์ƒํƒœ ์œ ์ง€(๋ฐ˜ํ™˜ ํŠธ๋ž˜ํ”ฝ ์ž๋™ ํ—ˆ์šฉ)๋ฌด์ƒํƒœ(๋ฐ˜ํ™˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•จ)
๊ทœ์น™ ์œ ํ˜•ALLOW๋งŒ ๊ฐ€๋ŠฅALLOW์™€ DENY ๋ชจ๋‘ ๊ฐ€๋Šฅ
๊ด€๋ฆฌ์ธ์Šคํ„ด์Šค๋ณ„ ๊ทœ์น™ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ„๋‹จ์„œ๋ธŒ๋„ท ์ˆ˜์ค€ ๊ณ ๊ธ‰ ์ œ์–ด์— ์œ ์šฉ

์ƒ˜ํ”Œ ๊ทœ์น™ ์ง‘ํ•ฉ

๊ทœ์น™ ๋ฒˆํ˜ธ๋ฐฉํ–ฅํ”„๋กœํ† ์ฝœํฌํŠธ ๋ฒ”์œ„์ถœ๋ฐœ์ง€/๋ชฉ์ ์ง€๋™์ž‘
100์ธ๋ฐ”์šด๋“œTCP800.0.0.0/0ALLOW
110์ธ๋ฐ”์šด๋“œTCP4430.0.0.0/0ALLOW
120์ธ๋ฐ”์šด๋“œTCP220.0.0.0/0ALLOW
1000์•„์›ƒ๋ฐ”์šด๋“œALLALL0.0.0.0/0ALLOW
*****DENY (์•”๋ฌต์ )

ํŒ: vpc_id, CIDR ๋ธ”๋ก ๋ฐ ๊ทœ์น™ ๋ฒˆํ˜ธ๋ฅผ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜์„ธ์š”.

Terraform ์˜ˆ์‹œ

resource "aws_network_acl" "public_nacl" {
  vpc_id = aws_vpc.main.id
  tags = {
    Name = "public-nacl"
  }
}

resource "aws_network_acl_rule" "allow_http_in" {
  network_acl_id = aws_network_acl.public_nacl.id
  rule_number    = 100
  egress         = false
  protocol       = "6"   # TCP
  rule_action    = "allow"
  cidr_block     = "0.0.0.0/0"
  from_port      = 80
  to_port        = 80
}

resource "aws_network_acl_rule" "allow_https_in" {
  network_acl_id = aws_network_acl.public_nacl.id
  rule_number    = 110
  egress         = false
  protocol       = "6"
  rule_action    = "allow"
  cidr_block     = "0.0.0.0/0"
  from_port      = 443
  to_port        = 443
}

resource "aws_network_acl_rule" "allow_ssh_in" {
  network_acl_id = aws_network_acl.public_nacl.id
  rule_number    = 120
  egress         = false
  protocol       = "6"
  rule_action    = "allow"
  cidr_block     = "0.0.0.0/0"
  from_port      = 22
  to_port        = 22
}

resource "aws_network_acl_rule" "allow_all_out" {
  network_acl_id = aws_network_acl.public_nacl.id
  rule_number    = 1000
  egress         = true
  protocol       = "-1"  # all protocols
  rule_action    = "allow"
  cidr_block     = "0.0.0.0/0"
  from_port      = 0
  to_port        = 0
}

์ฐธ๊ณ  ์ž๋ฃŒ ๋ฐ ์ถ”๊ฐ€ ์ฝ์„๊ฑฐ๋ฆฌ

  • GitHub ์ €์žฅ์†Œ:
  • Dev.to ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ:
  • LinkedIn ๊ธฐ์‚ฌ:
  • ์ด๋ ฅ์„œ(Google Drive): (์„ ํƒ ์‚ฌํ•ญ)
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

๋งˆ์ธ๋“œ์˜ ๋ˆˆ ํŒจ๋ธŒ๋ฆญ

Phase 1 โ€” C++ Sovereign Kernel Skeleton Daemon ์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ โ€“ ์‹คํ–‰ ์ค‘์ธ C++ ๋ฐ๋ชฌ์„ ๋ฐฐํฌํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ: - ์ด๋ฒคํŠธ ์ˆ˜์‹  - capability graph์˜ ์—”๋“œํฌ์ธํŠธ์™€ ์—ฃ์ง€ ์œ ์ง€

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ AWS: ๊ฐ€์ด๋“œ

์™œ AWS๊ฐ€ ํด๋ผ์šฐ๋“œ๋ฅผ ์—ฌ์ „ํžˆ ์žฅ์•…ํ•˜๋Š”๊ฐ€? Azure์™€ GCP ๊ฐ™์€ ํฐ ๊ฒฝ์Ÿ์ž๋“ค์ด ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , AWS๊ฐ€ ์šฐ์œ„๋ฅผ ์ ํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: - ๊ฐ€์žฅ ์™„์ „ํ•œ ์ƒํƒœ๊ณ„์ธ Compute, Storage, Database...

Full-Stack Dev & AI: ๋ฉˆ์ถœ ์ˆ˜ ์—†๋Š” ๋ ˆ๋ฒ„๋ฆฌ์ง€๋ฅผ ์œ„ํ•œ ๋กœ๋“œ๋งต

ํ’€์Šคํƒ ํŒจ๋Ÿฌ๋…์Šค: AI์™€ ํ•จ๊ป˜ ์‚ฌ๋ผ์กŒ๋‚˜์š”, ์•„๋‹ˆ๋ฉด ์ง€๋ฐฐ์ ์ธ๊ฐ€? ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ด ์‚ฌ๋ผ์กŒ๋‚˜์š”? AI๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , UI๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์‹ฌ์ง€์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ๋ฐฐํฌํ•˜๋Š” ์„ธ์ƒ์—์„œ...