구름

EC2로 NAT Instance 생성하기 본문

Cloud/일반

EC2로 NAT Instance 생성하기

Cloudest 2020. 12. 29. 09:21
 

Cloudest - 블로그 이사했습니다

노션으로 블로그를 옮겼습니다.

흥미로운 포스팅이 올라옵니다!

cloudest.oopy.io

🛠
준비물 : AWS 계정

목표

  • 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에 직접적으로 접근할 수 없다.
  • 내부에서 인터넷과 통신하는 과정은 다음과 같다.
    1. Private Instance가 인터넷과 통신하려함
    1. Private Instance는 NAT로 라우팅 (Private Subnet의 라우팅 정책은 외부 통신을 NAT로 향하게 한다.)
    1. NAT는 IGW로 라우팅 (Public Subnet의 라우팅 정책은 외부 통신을 IGW로 향하게 한다.)
    1. 그 이후로는 인터넷과 동일하게 통신이 이루어진다.
  • 외부에서 Private Instance와 통신하는 방법은 다음과 같다.
    • SSH접속을 하고싶은 경우 Bastion Host에 접속하여 Private Instance로 재접근 (Private Subnet은 오직 Bastion Host의 IP만 SSH접근을 허용한다.)
    • Private 웹서버와 통신하는 경우 Public Subnet에 ELB를 배치하여 로드밸런싱해준다. (이 경우 ELB를 추가 해야하며 ELB로부터만 HTTP접근을 허용한다.)

       

      Load Balancer가 추가된 모습

NAT Instance 생성

  • Public & Private 서브넷 환경 구성
    1. VPC생성 후 Public, Private 둘다 서브넷 하나씩 생성
      • Public : 10.10.7.0/24
      • Private : 10.10.1.0/24
    1. IGW 생성 및 VPC연결
    1. 라우팅 테이블 생성
      • Public
      • Private (NAT Instance 생성 후 편집 예정)
    1. 기본 서브넷환경 구성 완료
  • NAT Instance 생성
    1. 이미 서버 내부적인 설정이 완료된 상태의 AMI를 공유해준 것이기 때문에 내부 작업은 필요없다.
    1. EC2인스턴스 생성 → 커뮤니티 AMI (마켓플레이스는 유료 커뮤니티는 무료) → NAT 검색 → 맨위의 이미지 사용
    1. 아래 사진과같이 설정 ( 최대절전중지동작 체크)
    1. 스토리지 볼륨유형 범용 SSD → 암호화
    1. 태그 지정
    1. SG 지정 후 인스턴스 생성
      • Private Subnet의 모든포트에 대한 모든 접근을 허용해주는 인바운드 규칙 추가
      • Private Subnet의 라우팅 테이블이 해당 NAT Instance를 가르킬 것이기 때문
    1. EC2 NAT인스턴스의 소스/대상 확인변경을 Disabled로 변경한다
    1. NAT Instance 구성 완료

테스트

  • 테스트를 위해 Bastion Host와 Private Instance 생성
    • Bastion Host
      • Public Subnet, Public IP부여, SSH개방
    • Private Instance
      • Private Subnet, Bastion Host의 SG만 SSH허용
    • 생성 완료
  • Bastion Host를 통해 Private Instance에 접속
    1. Public IP가 없는 Private Instance는 SSH로 직접 접근 불가능
    1. Bastion Host SSH접속
    1. pem키 복사 (SFTP가 귀찮다면 인스턴스 내부에 key-Cloudest.pem 파일 생성후 pem 내용을 복붙해도 된다.)
    1. chmod 400 key명령을 통해 권한을 조정한다. (소유자 이외엔 pem키 내부를 알 수 없게 하기 위함.)
    1. Private Instance에 접속

     

  • 테스트
    1. Google DNS서버에 ping 통신 → 통신 안됨
    1. Private Subnet Routing Table 연결
      모든 외부트래픽을 NAT Instance로 라우팅
    1. 다시 ping통신 → 통신 성공 (NAT Instance가 작동함)
    1. NAT 인스턴스 작동 확인 완료

결론


  • Free-Tier를 지원하지 않는 NAT Gateway 대신 NAT Instance를 생성했다.

 

'Cloud > 일반' 카테고리의 다른 글

VPC 피어링  (0) 2021.01.17
MobaXterm으로 S3에 연결하기  (0) 2021.01.07
리눅스 AWS CLI 설치 및 구성  (0) 2020.12.31
EFS - AWS의 관리형 File System ( NAS )  (0) 2020.12.28
AWS EC2 를 사용한 Linux 접속환경 구축  (0) 2020.12.21
Comments