본문 바로가기
개발 지식/aws

접근 범위를 제한해서 보안 강화시키기

by 김이월 2025. 11. 27.

최소 권한의 원칙(PoLP)이란?

AWS, GCP 등 다양한 클라우드 플랫폼에서 활용되는 필수적인 보안 정책으로 무언가에 액세스 할 때 필요한 최소한의 권한만 가지도록 제한하는 보안 원칙이다.

이 원칙에 따라 불필요한 권한을 제거하여 보안 사고를 예방할 수 있다.

PoLP를 어긴 예시

  1. 22번 포트(SSH)로만 접근하는 Bastion Host의 인바운드 규칙에 80 포트를 열어둔다.
  2. 루트 관리자 IP에서만 접근할 수 있어야 하는 자원에 대해 모든 IP(0.0.0.0)에서 접근을 열어둔다.

보안 그룹이란?

AWS 클라우드에서의 네트워크 보안을 의미한다.

AWS 리소스(EC2 인스턴스)를 집이라고 생각한다면 보안그룹은 집 밖에 쳐져있는 울타리와 대문이다. 집에 접근할 때 울타리와 대문에서 접근해도 되는 요청인지 보안 요원이 검사를 하는 것과 비슷하다

EC2 인스턴스 주위에 방화벽 역할을 할 보안그룹을 만들고 보안 그룹에 규칙을 지정한다. 이 보안 규칙에는 **인바운드 트래픽(보안 그룹의 외부에서 내부로 보내는 트래픽)**에서 어떤 트래픽만 허용할 지 설정할 수 있고, **아웃바운드 트래픽(보안 그룹 내부에서 외부로 나가는 트래픽)**에서 어떤 트래픽만 허용할 지 설정할 수있다.

인바운드 규칙

보안 그룹의 외부에서 내부로 보내는 요청의 규칙을 정의한다.

유형, 프로토콜, 포트범위: 트래픽의 유형을 지정한다. (SSH, HTTP 등)

소스: 접근을 허용할 IP, 보안그룹을 지정한다.

  • 보안 그룹 추가 - 해당 보안 그룹에 속한 AWS 리소스가 지정된 포트로 접속하는걸 허용한다.
  • IP 주소 추가 - 해당하는 IP 주소에서만 접근할 수 있다.
  • 0.0.0.0/0 - 인터넷의 모든 곳에서 접근 가능
  • 127.0.0.1/32 - 로컬호스트(자기 자신)만 허용
  • 10.0.0.0/8 - 사설 네트워크 Class A (내부 네트워크용)
  • 172.16.0.0/12 - 사설 네트워크 Class B(내부 네트워크용)
  • 192.168.0.0/16 - 사설 네트워크 Class C(가정/소규모 네트워크용)

설명: 해당 규칙에 대한 설명

리소스 별 사용되는 포트 번호

웹 서버 / 프론트엔드

HTTP/HTTPS

  • 80: HTTP
  • 443: HTTPS
  • 8080: HTTP 대체 포트 (개발/테스트)
  • 8443: HTTPS 대체 포트

React / Node.js 개발 서버

  • 3000: React 기본 개발 서버
  • 3001: React 추가 인스턴스
  • 5173: Vite 개발 서버
  • 4200: Angular CLI

Vue.js

  • 8080: Vue CLI 기본 포트

백엔드 / 애플리케이션 서버

Spring Boot

  • 8080: 기본 포트
  • 8081, 8082: 추가 인스턴스
  • 9090: Actuator (관리용)

Tomcat

  • 8080: HTTP
  • 8443: HTTPS
  • 8009: AJP

Node.js / Express

  • 3000: 일반적인 기본 포트
  • 5000: 대체 포트

Django

  • 8000: 개발 서버 기본 포트

Flask

  • 5000: 개발 서버 기본 포트

데이터베이스

MySQL / MariaDB

  • 3306: 기본 포트

PostgreSQL

  • 5432: 기본 포트

MongoDB

  • 27017: 기본 포트
  • 27018: Shard 서버
  • 27019: Config 서버

Redis

  • 6379: 기본 포트

Microsoft SQL Server

  • 1433: 기본 포트

Oracle Database

  • 1521: 기본 리스너 포트
  • 1522: 대체 포트

Cassandra

  • 9042: CQL native transport
  • 7000: Inter-node communication

Elasticsearch

  • 9200: HTTP API
  • 9300: 노드 간 통신

메시지 큐 / 이벤트 스트리밍

RabbitMQ

  • 5672: AMQP
  • 15672: 관리 UI
  • 5671: AMQP over SSL

Apache Kafka

  • 9092: 기본 포트
  • 9093: SSL
  • 2181: Zookeeper

ActiveMQ

  • 61616: OpenWire
  • 8161: 관리 콘솔

원격 접속

SSH

  • 22: SSH

RDP (Windows)

  • 3389: 원격 데스크톱

VNC

  • 5900: 기본 포트

모니터링 / 로깅

Prometheus

  • 9090: Prometheus 서버

Grafana

  • 3000: 대시보드 UI

Kibana

  • 5601: 웹 UI

Logstash

  • 5044: Beats 입력

Jaeger (분산 추적)

  • 16686: UI
  • 14268: HTTP 수집기

컨테이너 / 오케스트레이션

Docker

  • 2375: Docker daemon (비암호화)
  • 2376: Docker daemon (TLS)

Kubernetes

  • 6443: API 서버
  • 10250: Kubelet API
  • 30000-32767: NodePort 서비스 범위

캐시 / 세션

Memcached

  • 11211: 기본 포트

Hazelcast

  • 5701: 기본 포트

API Gateway / 프록시

Nginx

  • 80: HTTP
  • 443: HTTPS

Apache HTTP Server

  • 80: HTTP
  • 443: HTTPS

Kong

  • 8000: Proxy (HTTP)
  • 8443: Proxy (HTTPS)