끄적이는 보송

[AWS] Private EC2 인터넷 연결하기 본문

STUDY/AWS

[AWS] Private EC2 인터넷 연결하기

끄적이는 보송 2022. 2. 23. 19:39
반응형

 

 

이 번 포스팅은 Private Subnet에 위치하는 EC2 인스턴스가 외부 인터넷과 통신하는 방법에 대해서 다룰까 한다.

 

방법이야 여러 가지지만 그중에서 NAT gateway 서비스를 사용하는 방법을 다룰까 한다. 그리고 NAT gateway 없이 Bastion Host를 NAT로도 이용하는 방법을 포스팅하려 한다.

 

NAT Gateway 서비스란

우리가 알고 있는 NAT와 동일하다. AWS에서 제공하는 서비스일 뿐. NAT 게이트웨이 서비스는 Private Subnet의 인스턴스가 VPC 외부(인터넷)의 서비스를 연결할 수 있도록 하지만 외부의 연결을 막는 역할을 한다. 실제 예로 이것을 언제 사용할까?

 

Public Sunet은 인터넷과 연결되어 있고 Priavte Subnet은 내부망이다. 만약 Private Subnet에 위치하고 있는 서버에 OS 패치, 외부 애플리케이션 소스가 담겨있는 레포지토리로부터 소스를 디플로이를 해야 한다면? 인터넷을 사용하기 위한 관문이 없으니 Public Subnet에 있는 서버로부터 카피를 해야 하는 상황이 온다. 그래서 NAT gateway 사용한다.

 

 

다음과 같은 구성이라면 Private Subnet에 있는 서버도 문제없이 인터넷을 이용할 수 있다. 반대로 외부에서 서버로 찾아갈 Public IP주소가 없기 때문에 보안에도 이상이 없다. 이상한 소스만 안 긁어온다면  서버는 NAT로 패킷을 보내고 그 패킷은 IGW를 통해 외부로 나갔다가 원래 처음에 컨넥션을 맺었던 서버에 다시 패키슬 돌려주는 역할을 한다.

 

 

 

NAT Gateway 생성 및 Private EC2 인터넷 연결

그럼 실습을 해보도록 하자. NAT gateway 생성 전에 EIP를 생성한다. EIP는 고정 IP주소라고 생각하면 된다. 접근 경로는 VPC 콘솔 화면 > 화면 좌측 사이드 바 'NAT Gateways' > 'Create route talbe'이다. 생성은 간단하다. 그런 다음과 같이 NAT gateway를 생성한다.

 

콘솔 혼경 접속 > 서비스 검색 > VPC > NAT gateways > Create NAT gateway 클릭
Private EC2를 위한 서비스라고 해서 배치되는 Subnet도 Private이라고 생각하면 안된다. NAT gateway는 인터넷과 내부망의 연결다리 역할을 해야하므로 인터넷 통신이 가능한 Subnet에 위치해야 한다. 좀 전에 생성한 EIP도 같이 부착시켜준다.
이제 생성하자.

NAT gateway를 이용할 Private EC2 서버다. 보이다시피 Public IP 주소가 없다. 

 

Private EC2. 인터넷 통신을 위한 Publiic IP가 없는 서버다. NAT gateway를 통해 이 서버가 인터넷 통신 되는것을 확인해보자.

 

라우팅 테이블은 위에서부터 읽으면서 작동한다. EC2가 속해있는 Subnet을 찾아, Subnet에 등록된 route table을 변경해줘야 한다. Public & Private subnet route table 각각 다음과 같이 설정되어 있다.

 

Public Subnet의 route table. VPC CIDR를 벗어난 목적지는 IGW를 향하라는 설정
Private Subnet의 route table. VPC CIDR를 벗어난 목적지는 NAT Gateway로 향하라는 설정

 

테스트 결과 잘 작동한다.

 

Private EC2 (10.01.147) 서버로부터 Google Ping 통신이 정상적으로 가능한 것을 확인할 수 있다.

 

 

NAT Instance

만약 서버 트래픽이 크지 않고 NAT gateway에 과금되는 예산을 아끼고자 한다면 NAT Instance도 대체제가 될 수 있다. 성능은 NAT Gateway보다 적지만 가격적인 측면에선 확실히 낫다. NAT Insance는 Community에 AMI로 많이 올라와있다. 이중 마음에 드는 것을 고르면 된다. 그리고 라우팅 테이블을 기존 것을 참고해 수정해주면 된다.

 

 

여기서 한 가지 추가 작업이 있다. 바로 Source/Destination check를 비활성화해줘야 한다. 왜 이런 작업을 해줘야 할까. 이는 인스턴스가 전송하거나 수신하는 트래픽의 소스 또는 대상이어야 함을 의미하는데 NAT 인스턴스는 소스 또는 대상이 자신이 아닐 때 트래픽을 보내고 받을 수 있어야 한다. 따라서 NAT 인스턴스에서 소스/대상 확인을 비활성화해야 한다.

 

EC2의 'Actions' > Networking > Change source/destination check 클릭 > Source / destination checking STOP 체크 해제 > Save

 

반응형
Comments