AWS(Amazon Web Services)는 전 세계에서 가장 많이 사용되는 클라우드 플랫폼이에요. 이번 주부터 2주간 AWS를 배울 거예요.

이번 주에는 IAM으로 보안 설정을 하고, VPC로 네트워크를 설계한 뒤, EC2 인스턴스에 Docker 앱을 배포합니다. Session 2에서 배운 네트워크 개념이 AWS에서 어떻게 적용되는지 직접 확인하게 될 거예요.

사전 준비

공부할 내용

1. IAM — 가장 먼저 배워야 할 것

IAM(Identity and Access Management)은 AWS에서 누가 무엇을 할 수 있는지 관리하는 서비스예요. EC2보다 먼저 배우는 이유: IAM을 모르면 모든 것을 root 계정으로 하게 되고, 그건 보안 사고의 시작이에요.

아래 개념들의 차이를 이해하세요:

  • Root 계정 vs IAM User — 왜 Root 계정을 일상적으로 쓰면 안 되나?
  • IAM Policy vs IAM Role — Policy는 “규칙"이고, Role은 “서비스가 맡는 권한"이에요. 사람이 아니라 EC2 인스턴스나 Lambda 같은 서비스가 다른 AWS 리소스에 접근할 때 Role을 사용해요.
  • 최소 권한 원칙 — 학습 중에는 AdministratorAccess를 쓰되, 프로덕션에서는 절대 안 돼요.

참고 자료

2. NAT

여러분의 서버가 10.0.1.50 같은 사설 IP를 가지고 있다면, 인터넷에서 이 IP로 직접 접근할 수 없어요. 그런데 여러분은 집에서 인터넷을 잘 쓰고 있죠? 집 공유기가 뭘 하고 있는 건지 알아보세요.

참고 자료

3. VPC — 네트워크 설계

VPC(Virtual Private Cloud)는 AWS 안에서 나만의 격리된 네트워크예요. Session 2,4 에서 배운 IP, 서브넷, NAT, 방화벽이 여기서 그대로 적용됩니다.

Session 2 개념AWS에서 대응하는 것
CIDR / 서브넷VPC CIDR + Subnet
Public vs Private IPPublic Subnet (IGW 연결) vs Private Subnet
NATNAT Gateway (Private → 인터넷 나가기)
방화벽 (Stateful)Security Group
방화벽 (Stateless)Network ACL (NACL)
라우팅 테이블Route Table

알아야 할 것:

  • Availability Zone (AZ): 최소 2개 AZ에 서브넷을 두는 게 왜 기본인지
  • Public Subnet vs Private Subnet: Route Table에 IGW 경로가 있느냐 없느냐의 차이
  • Internet Gateway vs NAT Gateway: 각각 언제 필요한지

참고 자료

4. EC2 — 서버 인스턴스

EC2(Elastic Compute Cloud)는 가상 서버를 대여하는 서비스예요.

알아야 할 것: Instance Type, AMI, Key Pair, Elastic IP

참고 자료


프로젝트 실습

Step 1: IAM User 만들기

Root 계정 대신 사용할 IAM User를 만드세요.

요구사항:

  • Console 로그인 활성화
  • AdministratorAccess 정책 연결 (학습용)
  • Access Key 생성 후 aws configure로 등록

Step 2: VPC 구성

아래 구조의 VPC를 직접 설계하고 만드세요.

요구사항:

  • VPC CIDR: 10.0.0.0/16
  • Public Subnet 2개 + Private Subnet 2개, 서로 다른 AZ에 배치
  • Internet Gateway를 만들어서 Public Subnet의 Route Table에 연결
  • 각 서브넷의 CIDR은 Session 2 실습 B에서 설계한 것을 사용하세요!

Step 3: EC2 인스턴스 생성

요구사항:

  • AMI: Ubuntu 24.04 LTS
  • Instance Type: t3.micro
  • 위에서 만든 VPC의 Public Subnet A에 배치
  • Public IP 자동 할당 활성화
  • Security Group (web-sg): SSH(22)는 내 IP만, HTTP(80)은 전체 허용

Step 4: EC2에 Docker 앱 배포

EC2에 SSH로 접속해서 Docker를 설치하고, Session 3의 Docker Compose 앱을 배포하세요.

# 앱 배포
git clone <your-repo>
cd my-server
docker compose up -d

Step 5: 외부에서 접속 확인

curl http://<EC2-Public-IP>/
curl http://<EC2-Public-IP>/api/info
curl http://<EC2-Public-IP>/health
flowchart LR
  subgraph AWS VPC
    subgraph Public Subnet
      subgraph EC2
        subgraph Docker Compose
          Nginx --> Node.js
        end
      end
    end
    IGW["Internet Gateway"]
  end
  Client -- "http://[EC2-IP]" --> IGW --> EC2

Step 6: Elastic IP 연결

EC2에 Elastic IP를 연결해서 고정 IP로 접속할 수 있게 만드세요.

실험해보기

  1. Security Group 실험: 80번 포트 인바운드 규칙을 삭제하고 접속해보세요. → timeout. 다시 추가하면 바로 접속 됨. AWS에서 “접속이 안 돼요"의 90%는 Security Group 문제예요.
  2. SSH에 잘못된 키 사용: 다른 key pair로 접속 시도하면? Permission denied.
  3. 인스턴스 중지/시작: EIP 없이 중지 후 시작하면 Public IP가 바뀌는 것을 확인하세요.

Challenge (선택) Private Subnet에 EC2 인스턴스를 만들고, NAT Gateway를 통해 인터넷에 접속할 수 있도록 설정해보세요. (비용 주의: NAT Gateway는 시간당 과금! 다 했으면 꼭 삭제하세요.)