AWS 네트워크 구성

VPC (Virtual private cloud)

공식 문서

AWS 상에서 내가 사용할 클라우드 자원의 네트워크를 직접 구성하는 서비스이다.

네트워크 망 구성도
VPC 구성도

일반적인 네트워크 망은 수많은 물리적 장비를 직접 설치하고 구성 및 구축까지 해야하지만

VPC는 클라우드 서비스이므로 물리적 장비를 직접 설치할 필요가 없다.

망의 논리적인 구조를 웹 콘솔에서 관리하고 네트워크 정책을 설정할 수 있다.

관련 서비스로는 Subnet, Internet gateway, Route table, Security group 등이 존재한다.

VPC 생성

AWS의 VPC 메뉴로 접속하여 생성 버튼을 누른다.

적절한 이름을 생성하고 IP 주소는 CIDR 주소로 입력한다.

미리 정의된 사설 IP 대역(참고)을 활용하여 적절한 C 클래스의 주소를 넣어보자.

C 클래스의 경우 서브넷마스크가 255.255.255.0 이기 때문에 이 VPC 망에서 사용 가능한 호스트는 256개이다.

(왜 256개인지 이해되지 않는다면 CIDR 표기법을 다시 공부해야 한다)

참고로 여기에 입력하는 IP 주소는 private 주소가 되며 VPC 망 내에서만 인식이 가능하다.

public IP 주소는 AWS가 직접 관리하기 때문에 사용자가 컨트롤할 수 없다.

이번 실습에서는 10.20.30.0/24 대역을 사용한다.

서브넷

서브넷마스크와 유사한 서비스이다.

할당된 네트워크를 더욱 작은 단위로 쪼개어 효율적으로 망을 구성할 수 있도록 돕는다.

즉, VPC가 하나의 큰 망이면 서브넷은 작은 단위의 망이라고 볼 수 있다.

위에서 만든 VPC는 최대 256개의 호스트를 갖는데, 이 안에서 더 세밀하게 망을 구성해본다.


  • 관리용으로 사용할 Subnet: 32개의 호스트
    • bastion 서버로 사용 (아래에서 따로 설명)
  • 내부망으로 사용할 Subnet: 32개의 호스트
    • Database 등 외부에 직접 노출하지 않을 인프라 구성
    • VPC 내부에서만 접근 가능
  • 외부망으로 사용할 Subnet: 64개의 호스트, 2개 구성
    • 외부에서 접속 가능한 Application 구성
    • 외부의 트래픽을 견뎌야 하기 때문에 호스트의 수를 가장 많이 할당(총 128개)
    • 리전은 서울로 선택
    • Availability Zone(가용영역, AZ)은 ap-northeast-2a, 2b, 2c, 2d가 존재
      • AZ는 데이터 센터를 의미한다.
      • 특정 AZ가 장애가 발생해도 서비스를 유지하려면 2개의 subnet을 다른 AZ로 생성하는 것이 좋다.
      • 2b는 EC2 인스턴스가 생성되지 않는다. 2a와 2c에 1개씩 구성한다.

서브넷 생성

서브넷 메뉴로 접속하면 아래와 같은 화면이 나타난다.

방금 생성한 VPC를 선택하면 아래 서브넷 설정 탭의 내용이 변경된다.

  1. 서브넷 이름은 용도에 맞게 적당히 넣어주면 된다.
  2. 가용 영역(AZ)는 한 곳에 집중되지 않게 선택한다. 특히 외부망 2개 서브넷은 꼭 다른 AZ를 선택한다.
  3. CIDR 블록이 여기서 또 나오는데, IP를 어떻게 구성할지를 먼저 생각해보자.
    1. 0번 호스트부터 관리망 32개, 내부망 32개, 외부망 64개, 외부망 64개 순으로 사용한다고 가정한다.
    2. 사용할 개수는 2의 멱승개로 구성했다. CIDR로 표기하기 위함이다.
    3. 관리망: 10.20.30.0/27
    4. 내부망: 10.20.30.32/27
    5. 외부망1: 10.20.30.64/26
    6. 외부망2: 10.20.30.128/26

서브넷마스크는 왜 /27, /26일까?

VPC의 서브넷마스크가 /24 이므로 일단 24보다 큰 숫자 중에서 골라야 한다.

/27이면 호스트 개수가 5개 비트만큼, /26이면 호스트 개수가 6개 비트만큼 할당된다.

  • 32 - 27 = 5 ⇒ $2^5$ = 32개
  • 32 - 26 = 6 ⇒ $2^6$ = 64개

32개, 64개 호스트 주소를 할당했지만 실제로 그만큼 사용할 수는 없다.

몇 개의 호스트의 쓰임새는 이미 예약되어 있기 때문이다. (이 문서에서 확인)

Bastion 서버

Bastion [ˈbæstiən]. "요새", "보루"를 뜻하는 영어 단어

오버워치에서 자리만 잘 잡으면 말도 안되는 화력을 보여주었던 이 녀석하고 스펠링이 같다.

bastion 서버는 외부의 공격으로부터 서버를 효과적으로 방어하기 위한 수단이다.

외부에서 EC2에 접속하기 위해서는 일반적으로 SSH를 사용하는데,

bastion에만 외부 SSH 접속을 허용하고 그 외 모든 서버는 bastion을 통해서만 접속할 수 있게 통제한다.

  • 장점
    • 서비스 트래픽과 관리자용 트래픽 구분 가능
    • bastion에만 보안을 집중하면 되기 때문에 효율적
    • bastion이 공격으로 인해 피해를 보면 bastion만 재구성하면 되므로 서비스 영향을 최소화할 수 있음.

Internet gateway

공식 문서

VPC에 속한 클라우드 자원이 외부 인터넷과 통신할 수 있게 만들어주는 서비스이다.

생성하고 VPC를 선택하면 끝이다.

Route table

공식 문서

라우터와 비슷한 역할을 하는 서비스이다.

라우터는 네트워크 계층에 속하는 장비로, 서로 다른 네트워크 간의 통신을 중계한다.

목적지 정보(MAC 주소)를 테이블에 가지고 있다면 forwading 시켜주고 아니면 drop한다.

Route table 생성

  1. 생성한 VPC를 선택하고 용도에 맞는 적당한 이름을 기입하여 Route table을 생성
  2. 관리망, 내부망, 외부망 전용 총 3개를 만들어도 되고, 인터넷 접근 가능 1개/불가능 1개를 만들어도 된다.
  3. 생성된 Route table 정보로 들어가면 라우팅 정보와 연결할 서브넷을 편집할 수 있다.
    • VPC 내부망끼리는 모두 통신이 가능해야 한다. 10.20.30.0/24 는 모든 라우팅에 추가한다.
    • 인터넷에 접근하려면 위에서 생성한 Internet gateway를 라우팅에 추가한다.
      • 외부망은 외부에서 application에 접근해야 하기 때문에 인터넷 통신이 필요하다.
      • 관리망은 외부에서 SSH를 통해 관리 목적으로 접근해야 하기 때문에 인터넷 통신이 필요하다.

Security group

공식 문서

AWS 클라우드 자원의 인바운드 및 아웃바운드 정책을 관리하는 방화벽 서비스이다.

Security group 생성

관리망, 외부망, 내부망 순으로 보안 그룹을 생성한다.

순서는 바뀌어도 상관이 없으나, 허용 대상을 보안 그룹으로 선택할 수 있기 때문에

순서를 맞춰서 만들면 왔다갔다 하는 귀찮음을 줄일 수 있다.

각 망의 쓰임새에 맞는 인바운드 포트만 개방하고 아웃바운드는 건드리지 않는다.

또한 보안을 위해 내 IP 혹은 특정 대역에만 포트를 열어두는 것이 좋다.

  • 관리망 (bastion)

    1. 접근이 필요하므로 SSH(22) 포트를 개방한다.

    2. (Optional) bastion 서버가 살아있는지 보기 위해 ping을 사용하려면 ICMP - IPv4을 개방한다.

  • 외부망 (application)
    1. 외부에서 HTTP 포트로 접근하여 어플리케이션을 사용한다. HTTP 포트를 모두에게 개방한다. Anywhere-IPv4, IPv6을 선택하면 된다. HTTP 기본 포트가 아니라 다른 포트를 사용한 경우 TCP를 선택하고 해당 포트를 개방한다.
    2. HTTPS까지 사용하는 경우엔 HTTPS까지 개방한다.
    3. bastion에서 SSH로 접근해야 한다. 관리망 보안 그룹을 허용 대상으로 선택하면 해당 보안 그룹에 속한 모든 자원에 공통적으로 적용된다.
    4. (Optional) 관리망 보안 그룹에 대해 ICMP 포트를 개방하여 ping을 사용할 수 있다.
    5. (Optional) 관리망 보안 그룹에 대해 telnet 포트를 개방하면 특정 포트가 살아있는지 확인할 수 있다.

'모두' 를 대상으로 개방
보안 그룹을 대상으로 선택

  • 내부망 (인프라)
    1. mysql을 사용할 예정이기 때문에 mysql 기본 포트 3306을 개방한다. 대상은 외부망 보안 그룹으로 지정한다.
    2. 기타 다른 인프라를 사용하는 경우 해당 포트를 외부망 보안 그룹에게 개방한다.
    3. bastion에서 SSH로 접근해야 한다. 이전에 설정한 관리망 보안 그룹을 선택하면 보안 그룹에 속한 모든 자원으로부터 SSH 접근이 가능하다.
    4. (Optional) 관리망 보안 그룹에 대해 ICMP 포트를 개방하면 ping을 사용하여 확인할 수 있다.
    5. (Optional) 관리망 보안 그룹에 대해 telnet 포트를 개방하면 특정 포트가 살아있는지 확인할 수 있다.
    6. (Optional) 보안 그룹 이야기는 아니지만, 구축 초기에 mysql 설치 등 이유로 인터넷에 접근이 필요할 수 있다. 그런 경우 서브넷 메뉴에 가서 내부망 그룹의 라우팅 테이블에 인터넷 게이트웨이를 임시로 추가하여 사용한다.

EC2 생성

여기서는 구성한 망을 적용하는 방법에 대해서만 다룬다.

  1. EC2 생성 메뉴로 접속한다.
  2. OS는 입맛대로 선택한다. 가급적이면 LTS인 버전이 안정적이다.
  3. 네트워크는 생성한 VPC를, 서브넷은 EC2의 용도에 따라 알맞게 선택한다.
  4. 나머지 옵션은 필요에 따라 적절하게 선택하고 생성하면 된다.

+ Recent posts