NAT 디바이스 , Bastion Hosts, VPC 엔드포인트

최수환·2022년 9월 21일
0

AWS-SAA

목록 보기
12/23
post-thumbnail

이전 포스팅에서 VPC에 대해서 다루어보면서 프라이빗 서브넷은 인터넷 연결이 안되기때문에 외부에서도 접근할 수 없지만, 내부에서도 외부로 나갈수가 없다고 설명했다. 하지만 인터넷 연결을 해야하는 상황이 있다면 어떻게 해야할까? 이번 포스팅에서는 이것을 가능하게 해주는 기술들을 다루어 볼 예정이다.

Bastion Hosts


프라이빗 서브넷에 있는 인스턴스는 외부에서 접근이 안된다. 인터넷에 연결되어 있지 않기 때문이다. 그렇다면 왜 프라이빗 서브넷에 인스턴스를 프로비전 하는걸까? 이유는 보안수준이 높아야하는 기업같은 경우는 퍼블릭 서브넷에 배치하면 누구나 접근이 가능해지기 때문이다. 그렇다면 이 프라이빗 서브넷에 접근이 불가능한 걸까? Bstion Hosts를 사용하면 프라이빗 서브넷에 있는 프라이빗 인스턴스에 접근이 가능해진다.

  • 예를 들어, 그림과 같이 외부에서 접근하고자하는 사용자(기업)과 프라이빗 서브넷 사이에 Bastion Hosts를 배치하고 Bastion Hosts에서 사용자(기업)으로 SSH를 타고 오는 트래픽만을 허용하도록 Security Group 인바운드 규칙을 설정하고, 프라이빗 서브넷에 있는 인스턴스들의 Security Group에서는 이 Bastion Hosts로부터 오는 트래픽을 허용하는 인바운드 규칙을 설정하면 외부에서도 SSH포트를 타고 내부의 인스턴스에 접근이 가능하다.

NAT 디바이스

위에서 다룬 상황과 반대로 내부에서 외부와 연결하기 위해서, 즉 프라이빗 서브넷이 인터넷과 연결하기 위해서 NAT디바이스를 이용한다. NAT은 Network Address Translation, 네트워크 주소변환으로 인터넷 게이트웨이가 퍼블릭IP를 프라이빗 인스턴스의 프라이빗IP주소로 맵핑한다. NAT디바이스에는 NAT Instance와 NAT Gateway두가지가 있다.
💡💡 NAT을 사용하는 이유는, 기업이 보안 수준을 높이기 위해 프라이빗 서브넷에 인스턴스를 프로비전 했지만, 만약 패치/업데이트 or 데이터 업로드와 같은 작업을 하기 위해서는 인터넷과 연결해야하기 때문이다.
💡 NAT Instance와 NAT Gateway는 반드시 퍼블릭 서브넷에 배치해야한다!

NAT Instance


Private Subnet의 라우팅 테이블이 퍼블릭 서브넷을 향하도록 설정 후, 프라이빗 인스턴스의 보안그룹에 아웃바운드 규칙설정을 통해 퍼블릭 서브넷에 Nat Instance에 할당된 EIP를 가리키도록 한다. 이후 NAT변환을 통해 Private IP를 Public IP에 매핑해 IPV4와 연결한다.

장점

  • Bastion Host or Jump Host로 사용해서 퍼블릭IP가 없는 인스턴스에 연결할 수 있다.

단점

  • 대역폭의 요구에 자동을 대응하지 못하기 때문에 처음에 용량 설정이 중요하다.
  • 직접 퍼블릭IP주소를 할당해야 하며, 보안그룹을 적용하고 소스/대상주소 옵션을 비활성화 해야 한다.
  • 기본 라우트를 하나만 정의해서 사용하기 때문에 인스턴스나 AZ의 장애 발생하면 다른 NAT인스턴스를 가리키도록 하면서 문제를 해결하는 것이 불가능하다.(복원력/가용성이 낮다)

📌 이러한 단점들로 인해 현재는 사용을 지양한다.

NAT Gateway


NAT Instnace와 같은 방식으로 동작한다.
💡 만일 여러 AZ마다 각 프라이빗 서브넷에 인스턴스가 존재한다면 하나의 AZ의 퍼블릭 서브넷에 NAT디바이스를 배치하고 모든 프라이빗 인스턴스를 NAT디바이스에 연결하는 것은 거리도 멀고,인스턴스가 AZ밖으로 벗어날 수 없기 때문에 비효율적이다. 따라서 각 AZ마다 퍼블릭 서브넷에 NAT디바이스를 배치하는 것이 비용효율적이다.

장점

  • 대역폭의 요구에 자동을 대응하기 때문에 용량이 무제한이다.
  • 별도의 관리 또는 접속 작업을 할 필요가 없다.
  • 가용성과 복원력이 높다.

📌 현재 NAT Gateway를 사용하는 것을 지향한다.
📌 리전에 국한되어 있기 때문에 리전이 다른 인스턴스간 통신은 VPC피어링을 이용한다.

VPC 엔드포인트

만일 외부연결(인터넷)없이 내부에서만 서로 소통하고 싶다면 VPC 엔드포인트를 사용한다.
VPC엔드포인트를 VPC에서 할당받으면 Private link를 구동시킬 수 있는데 Private Link를 통해서 NAT,인터넷게이트웨이,DC,VPN연결등 어떠한 연결 없이도 비공개적으로 연결할 수 있다.

  • USE CASE : 보안이 높아야하며,외부에 연결하지 않아도 되고 비용효율적이여야 할 때 사용.
  • USE CASE : 만약 수천명이 프라이빗 서브넷의 인스턴스에 접근해야할 때 해당 서브넷을 포함한 VPC에 엔드포인트를 생성하고 수천명을 이 엔드포인트에 연결한 후 Private Link와 로드밸런서를 통해 프라이빗 인스턴스와 연결한다. ( 수천명을 일일이 연결하지 않아도 된다.)

인터페이스 VPC 엔드포인트

  • S3,DynamoDB를 제외한 모든 AWS서비스에 사용 가능하다.
  • ENI(Elastic Network 인터페이스)를 출입구로 사용한다.

게이트웨이 VPC 엔드포인트

  • 오직 S3,DynamoDB에만 사용가능하다.
  • 게이트웨이를 출입구로 사용하며 라우트테이블의 타깃으로 사용한다.

VPC엔드포인트의 서비스로 NAT,Internet Gateway,VPC피어링과 같은 어떤 연결 없이도 VPC내의 고객과 서비스를 비공개적, 비용 효율적으로 연결 가능하게 해준다.

마치며

이번 포스팅에서는 프라이빗 서브넷에서의 각 상황별 어떻게 통신하는지 알아보았다. 결국 우리가 실무에서 설계하는 것은 보안이 높아야하는 기업의 인프라다. 따라서 이러한 기술들을 적절히 사용해 클라이언트와 쌍방향 OR 단방향 OR 내부에서만 네트워크 트래픽이 흐르도록 필요에 따라 정확하게 분리하는 것이 제일 중요할 것 같다. 다음 포스팅에서는 어떻게 인스턴스,서브넷이 특정 트래픽을 허용하거나 거부할 수 있는지에 대해 다루어 볼 예정이다.

profile
성실하게 열심히!

0개의 댓글