반응형

개요

VPC와 외부 인터넷 사이에 통신을 위해 Internet gateway를 만들고 퍼블릭 라우팅 테이블에 라우팅 대상을 지정해 Public Subnet내부의 EC2 인스턴스가 통신을 하는 것은 이미 앞서서 구현한 적이 있다. 하지만 대부분의 실 시스템은 보안을 위해 Private Subnet 상에 인스턴스를 구현한다. 이번 포스팅에서 hands on 하는 내용은 앞서 만들었던 vpc , internet gateway, public routing table에 더해 private subnet을 만들고 public subnet상에 NAT gateway를 만들어 외부에서 NAT를 통해 private subnet에 접근하는 방법을 알아 보도록 한다. (이번 포스팅은 반드시 이전 포스팅을 진행 후 실행하기 바란다.)

 

AWS의 VPC 상에서 NAT를 이용해 외부 인터넷 서버와 연결하는 방법은 NAT Gateway를 이용하는 방식과 NAT Instance를 이용하는 방식이 있으며 소규모 시스템으로 네트워크 트래픽이 크게 발생하지 않는 시스템이라면 NAT Instnace를 이용해 외부 인터넷 서버와 통신하는 것이 유리하겠지만 그외 모든 면에서 NAT Instance를 사용하는 것보다 NAT Gateway를 적용하는 것이 유리하다.

 

구분 NAT Gateway NAT Instance
유지 관리 AWS에 의해 관리되는 서비스(사용자에 의한 유지보수 불필요) 사용자에 의한 관리(인스턴스의 SW 유지보수등)
가용성 AWS에 의한 고가용성 보장 사용자에 의한 고가용성 유지보수 관리 필요
네트워크 대역폭 최대 45Gbps 보장 인스턴스 유형에 따라 대역폭 다름
비용 사용하는 NAT 게이트웨이 수, 사용기간, NAT게이트웨이를 통해 보내는 데이터 양에 따라 다름 사용하는 NAT 인스턴스 수, 사용 기간, 인스턴스 유형과 크기에 따라 요금 청구가 다름
퍼블릭 IP NAT Gateway 생성시 사용할 탈력적 IP 지정(이렇게 지정된 IP는 변경 불가) 탄력적 IP 주소 또는 퍼블릭 IP 주소를 NAT 인스턴스와 함께 사용. 새 탄력적 IP를 통해 언제든지 퍼블릭 IP 변경 가능
보안그룹 지정 불가 인스턴스에 대해 인바운드/아웃바운드 규칙 적용 가능
기타 플로우로그를 사용하여 로그 캡쳐 가능 플로우로그 사용을 통한 로그 캡쳐 가능(좌동)

 이 포스팅에서는 NAT Gateway를 이용한 인터넷 접속을 예로 들고 있다.

 

 

목표 시스템 이미지

  1. Private subnet을 만든다.
  2. NAT gateway를 만든다.
  3. private routing table을 만든다.

 

Private subnet 생성

아래와 같은 순서와 이름으로 private subnet을 만들도록 한다.

이때 CIDR(사이더)는 10.0.0.0/24를 앞서 만든 public subnet이 사용하고 있기 때문에 10.0.1.0/24로 만들도록 한다.

정상적으로 생성되었으면 아래 그림과 같이 private subnet(my-pri-subnet-01)이 생성된 걸 확인할 수 있다.

 

 

 

NAT Gateway 생성

아래와 같이 NAT Gateway를 생성하도록 한다.

NAT Gateway는 public subnet에 위치해야 하기 때문에 서브넷 선택시 이전 포스팅에서 생성했던 public subnet(my-pub-subnet-01)을 선택하도록 한다.

 

 

Private Routing Table 생성

아래와 같이 Private subnet을 위한 Routing Table을 만들어 주도록 한다.

생성된 private routing table에서 아래 캡쳐와 같이 '서브넷 연결' 탭을 선택하도록 한다.

서브넷 연결 편집을 통해 private routing table과 private subnet(my-pri-subnet-01)을 연결해 준다.

다음으로 private routing table에 NAT Gateway를 등록 하도록 한다.

위 캡쳐 이미지에서 '라우팅 편집'을 클릭하도록 한다.

아래와 같이 0.0.0.0/0(네트워크내 모든 리소스)가 NAT Gateway를 활용할 수 있도록 한다.

 

 

결론

이제 private subnet에 EC2 Instance를 하나 생성하도록 한다. 이 인스턴스는 public ip를 지정하지 않아도 된다.

public subnet의 EC2 인스턴스에서 private ip를 이용해 ssh로 private subnet 내에 만든 EC2에 접근할 수 있다.

(이때 public subnet의 EC2 인스턴스는 private subnet의 EC2에 접근을 위해 페어키가 복사 되어있어야 한다.
 e.g. scp -i [복사에 사용할 공개키] [scp로 복사할 파일:여기선 pem 파일]  [ec2사용자@ip:서버에 복사할 위치]

$scp -i ./sample_vpc_ssh_key.pem ./sample_vpc_ssh_key.pem ec2-user@3.38.*.**:~

public subnet의 ec2에 접속해 ssh로 private subnet의 EC2에 접근할 수 있는지 확인해 보자. 마지막으로 private subnet의 EC2에서 www.naver.com에 ping 테스트가 되는지 확인해 보자.

 

 

이번 포스팅은 여기까지 끝~

반응형

+ Recent posts