GW LABS

AWS 네트워크 (1) - VPC 본문

Infrastructure/Cloud Computing

AWS 네트워크 (1) - VPC

GeonWoo Kim 2021. 7. 12. 20:28

Amazon Web Service

개발자가 클라우드 컴퓨팅을 처음 배울 때 가장 어려운 점이 무엇일까? 내 경우에는 네트워크를 구성하는 부분이었다. 그 이유를 생각해보면 통상적인 업무에서는 개발 업무에 집중하고 인프라에 작업이 필요한 경우에는 인프라 담당자에게 요청하면서 개발을 진행했기 때문이다. 클라우드 컴퓨팅에서는 모든 컴퓨팅 리소스를 개발자가 다룰 수 있도록 구성되어 있기 때문에 네트워크부터 설계해야하는 상황이라면 공부가 꼭 필요하다. 이번 시리즈에서는 AWS를 통해 클라우드 컴퓨팅을 네트워크 관점으로 공부해보려고 한다. 그 중 가장 기본인 VPC부터 살펴보자.


 

 

VPC(Virtual Private Cloud)

  • 독립된 가상의 클라우드 네트워크
  • 사용자가 직접 네트워크 오브젝트들을 생성하고 제어할 수 있음

 

 

VPC 특징

  • 확장성: 클라우드 기반에 손쉽게 자원을 생성하고 삭제가 가능하며, 설정 및 관리에 편의성을 제공
  • 보안: 인스턴스 레벨과 서브넷 레벨에서 인바운드 및 아웃바운드 필터링을 수행할 수 있도록 보안 그룹과 네트워크 ACL을 제공
  • 사용자 중심: VPC 내 리소스에 대해 사용자가 원하는 대로 손쉽게 제어할 수 있으며, 네트워크 지표 및 모니터링 툴을 활용하여 사용자에게 높은 가시성 제공

 

 

VPC 리소스

  1. 서브넷: VPC 망을 부분적으로 나눈 망
    1. AWS 서브넷 예약 IP 주소: 각각의 서브넷은 예약 IP 주소가 있기 때문에 수동 IP 할당시 주의해야한다.
      1. 예제: CIDR 블록 10.0.0.0/24 (10.0.0.0 ~ 10.0.0.255) 할당 시
        1. 10.0.0.0 → 네트워크 주소
        2. 10.0.0.1 → AWS VPC 가상 라우터 주소
        3. 10.0.0.2 → AWS DNS 서버 주소
        4. 10.0.0.3 → 향후 새로운 기능에 활용할 주소
        5. 10.0.0.255 → 네트워크 브로드캐스트 주소
  2. 가상 라우터와 라우팅 테이블
    1. VPC 생성시 가상 라우터가 생성되며, 기본 라우팅 테이블을 보유하고 있음
    2. 라우팅 테이블을 생성하고 매핑하여 서브넷이 개별적인 라우팅 테이블을 갖도록 지정할 수 있음
  3. 인터넷 게이트웨이(IGW)
    1. VPC와 인터넷 간의 논리적인 연결
    2. IGW를 통해 외부 인터넷 구간으로 통신할 수 있는 대상은 퍼블릭 IP를 사용하는 퍼블릭 서브넷 내의 자원
    3. 퍼블릭 서브넷은 자신의 라우팅 테이블에 외부 인터넷 구간으로 나가는 타깃을 인터넷 게이트웨이로 지정해야 함
  4. NAT 게이트웨이
    1. 프라이빗 IP를 퍼블릭 IP로 변환하여 외부 네트워크(인터넷)와 통신하도록 하는 기술
  5. 보안 그룹과 네트워크 ACL
    1. 보안 그룹: 인스턴스 레벨에서의 보안 기술
    2. 네트워크 ACL: 서브넷 레벨에서의 보안 기술

 

 

AWS-CLI를 사용한 VPC 네트워크 생성실습

 

1. VPC 생성 및 Public subnet 생성 실습

# 1. aws cli 기본설정
aws configure

# 2. VPC 생성
aws ec2 create-vpc --cidr-block 10.0.0.0/16

# 3. 퍼블릭 서브넷 생성
aws ec2 create-subnet --vpc-id [VPC-ID] --cidr-block 10.0.0.0/24

# 4. 인터넷 게이트웨이 생성
aws ec2 create-internet-gateway

# 5. 인터넷 게이트웨이 VPC에 연결
aws ec2 attach-internet-gateway --vpc-id [VPC-ID] --internet-gateway-id [IGW-ID]

# 6. 라우팅 테이블 생성
aws ec2 create-route-table --vpc-id [VPC-ID]

# 7. 라우팅 테이블을 디폴트로 지정하기 (선택)
aws ec2 create-route --route-table-id [ROUTE-TABLE-ID] --destination-cidr-block 0.0.0.0/0 --gateway-id [IGW-ID]

# 8. 라우팅 테이블에 서브넷 연결
aws ec2 associate-route-table --subnet-id [SUBNET-ID] --route-table-id [ROUTE-TABLE-ID]

생성된 퍼블릭 서브넷

웹 콘솔로 진행할 수도 있지만 실무에 익숙해지려면 cli를 사용하는 것이 작업속도를 높일 수 있다. 위의 VPC 생성 및 퍼블릭 서브넷 생성예제에서는 서브넷을 생성하고 인터넷 게이트웨이, 라우팅 테이블을 직접 생성하고 연결까지 시켜주고 있다. 성공적으로 수행하면 위의 그림과 같이 서브넷 오브젝트가 생성된 것을 볼 수 있다. 인터넷 게이트웨이가 연결되어 있기 때문에 이 서브넷에서 생성된 EC2 인스턴스는 퍼블릭 IP를 할당받을 수 있고 IGW를 통해 외부와 직접 통신할 수 있다. 테스트해보려면 EC2를 생성한 퍼블릭 서브넷 망에서 생성하고 외부에 ping과 같은 명령어로 통신이 가능한지 확인하면 된다.

 

2. 프라이빗 서브넷 생성실습

# 1. 프라이빗 서브넷 생성
aws ec2 create-subnet --vpc-id [VPC-ID] --cidr-block 10.0.1.0/24

# 2. eip 할당
aws ec2 allocate-address

# 3. NAT gateway 생성
aws ec2 create-nat-gateway --subnet-id [SUBNET-ID] --allocation-id [EIP-ID]

# 4. 라우팅 테이블 생성
aws ec2 create-route-table --vpc-id [VPC-ID]

# 5. 라우팅 테이블에 서브넷 연결
aws ec2 associate-route-table --subnet-id [SUBNET-ID] --route-table-id [ROUTE-TABLE-ID]

# 6. 생성한 라우팅 테이블에 라우트 규칙 추가 (NAT)
aws ec2 create-route --route-table-id [ROUTE-TABLE-ID] --destination-cidr-block 0.0.0.0/0 --gateway-id [NAT-ID]

생성된 프라이빗 서브넷

#!/bin/bash
(
echo "qwe123"
echo "qwe123"
) | passwd --stdin root
sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
service sshd restart

 

프라이빗 서브넷은 IGW와 연결되어 있지 않기 때문에 직접 외부 통신을 불가하다. 대신 NAT gateway를 통해서 외부 통신을 할 수 있다. 주의할 점은 NAT gateway는 Elastic IP(AWS에서의 고정 아이피)를 할당해주고 퍼블릭 서브넷 망에서 생성해주어야 한다는 점이다. 프라이빗 서브넷을 테스트하려면 EC2 인스턴스를 해당 서브넷에서 생성해주고 아까 퍼블릭 서브넷에서 생성한 EC2 인스턴스에서 프라이빗 EC2 인스턴스로 ssh 접속을 하면된다. 위의 배시 스크립트는 프라이빗 EC2 인스턴스를 생성할 때 ssh 접근 시 루트 계정으로 진입하도록 하는 스크립트이다. EC2 생성시 고급설정에서 해당 스크립트를 입력하면 된다. 접속한 프라이빗 서브넷의 EC2 인스턴스에서 ping을 수행해보면 퍼블릭 EC2 인스턴스처럼 외부통신이 가능하다.

 

 

Reference

 

Comments