목표
- Free-Tier에 속하지 않는 완전관리형 서비스 NAT Gateway를 대신하는 NAT Instance 생성하여 연결하기
- NAT Gateway는 데이터전송 비용을 빼고도 한달에 43$ 정도의 비용이 필요하다. (서울 Region 기준)
- Free-tier의 750시간 무료 EC2를 활용하지 않아도 소규모 테스트 환경에서 t2.micro linux가 약 4배 저렴하다.
NAT Gateway란?
- NAT는 대부분 여러 대의 호스트가 하나의 공인IP를 사용하여 인터넷에 접속하기 위한 경우로 사용한다.
- NAT는 Private Subnet의 인스턴스를 인터넷에 연결하는 동시에 인터넷은 Private Subnet의 인스턴스에 연결하지 못하게 한다.
- AWS는 고가용성을 제공하는 완전관리형 서비스 NAT Gateway를 제공한다.
Priavate Subnet
Private Instance
- DB서버, Private Instance와 같이 외부에서 접근하면 안되는 서버들을 Private Subnet에 위치시킨다.
- 하지만 Private Instance도 인터넷을 사용할 일이 있기 때문에 NAT를 통해 인터넷에 접근한다.
- AWS에서 가장 기초적인 Public/Private 서브넷의 구성은 아래 사진과 같다.
- 이 경우 Public IP를 가지지 않고 격리되어있기 때문에 인터넷에서는 Private Instance에 직접적으로 접근할 수 없다.
내부에서 인터넷과 통신하는 과정은 다음과 같다.
- Private Instance가 인터넷과 통신하려함
- Private Instance는 NAT로 라우팅 (Private Subnet의 라우팅 정책은 외부 통신을 NAT로 향하게 한다.)
- NAT는 IGW로 라우팅 (Public Subnet의 라우팅 정책은 외부 통신을 IGW로 향하게 한다.)
- 그 이후로는 인터넷과 동일하게 통신이 이루어진다.
외부에서 Private Instance와 통신하는 방법은 다음과 같다.
- SSH접속을 하고싶은 경우 Bastion Host에 접속하여 Private Instance로 재접근 (Private Subnet은 오직 Bastion Host의 IP만 SSH접근을 허용한다.)
- Private 웹서버와 통신하는 경우 Public Subnet에 ELB를 배치하여 로드밸런싱해준다. (이 경우 ELB를 추가 해야하며 ELB로부터만 HTTP접근을 허용한다.)
NAT Instance 생성
Public & Private 서브넷 환경 구성
- VPC생성 후 Public, Private 둘다 서브넷 하나씩 생성
- Public : 10.10.7.0/24
- Private : 10.10.1.0/24
- IGW 생성 및 VPC연결
- 라우팅 테이블 생성
- Public
- Private (NAT Instance 생성 후 편집 예정)
- 기본 서브넷환경 구성 완료
- VPC생성 후 Public, Private 둘다 서브넷 하나씩 생성
NAT Instance 생성
- 이미 서버 내부적인 설정이 완료된 상태의 AMI를 공유해준 것이기 때문에 내부 작업은 필요없다.
- EC2인스턴스 생성 → 커뮤니티 AMI (마켓플레이스는 유료 커뮤니티는 무료) → NAT 검색 → 맨위의 이미지 사용
- 아래 사진과같이 설정 ( 최대절전중지동작 체크)
- 스토리지 볼륨유형 범용 SSD → 암호화
- 태그 지정
- SG 지정 후 인스턴스 생성
- Private Subnet의 모든포트에 대한 모든 접근을 허용해주는 인바운드 규칙 추가
- Private Subnet의 라우팅 테이블이 해당 NAT Instance를 가르킬 것이기 때문
- EC2 NAT인스턴스의 소스/대상 확인변경을 Disabled로 변경한다
- NAT Instance 구성 완료
테스트
테스트를 위해 Bastion Host와 Private Instance 생성
- Bastion Host
- Public Subnet, Public IP부여, SSH개방
- Private Instance
- Private Subnet, Bastion Host의 SG만 SSH허용
- 생성 완료
- Bastion Host
Bastion Host를 통해 Private Instance에 접속
- Public IP가 없는 Private Instance는 SSH로 직접 접근 불가능
- Bastion Host SSH접속
- pem키 복사 (SFTP가 귀찮다면 인스턴스 내부에 key-Cloudest.pem 파일 생성후 pem 내용을 복붙해도 된다.)
chmod 400 key
명령을 통해 권한을 조정한다. (소유자 이외엔 pem키 내부를 알 수 없게 하기 위함.)
- Private Instance에 접속
테스트
- Google DNS서버에 ping 통신 → 통신 안됨
- Private Subnet Routing Table 연결
- 다시 ping통신 → 통신 성공 (NAT Instance가 작동함)
- NAT 인스턴스 작동 확인 완료
결론
- Free-Tier를 지원하지 않는 NAT Gateway 대신 NAT Instance를 생성했다.
Uploaded by Notion2Tistory v1.1.0