Local PC에서 AWS Private Subnet에 접근하기

minseok·2023년 10월 1일
0
post-thumbnail

왜 학습 하는가?

이유

과거 현업에서 elasti cache를 local pc에서 접근하고 싶은 필요가 생겼지만 접근이 불가능하다.
예전 기억으로는 당시에 검색을 해보니 elasti cache는 VPC안의 Private Subnet안에 존재하여 외부에서 접근이 불가능하다는 답변이 있었다.

문제를 겪었으면 문제를 없애기 위해 학습해보자


학습 과정

  1. AWS에 관한 책을 이정도 내용이면 문제를 해결할 수 있겠다. 싶은 지점까지 읽기
  2. 병목 지점과 비슷한 상황을 재현하고 단위 테스트(?)를 하자
    2.1 elasti cache 말고 local에서 ssh tunneling을 해서 NAT instance를 통과해 private subnet의 instance에 접근하기
    (원하는 것은 외부에서 Private subnet의 리소스에 접근하는 것이다.)

마무리

  1. Private Subnet에 IGW를 라우팅하는 사용자 지정 Routing Table을 만들었는데
    그러지 않고 기본 Routing Table을 묵시적으로 연결해도 된다고 한다.
  2. Network Interface, ACL, Gateway Endpoint이란 키워드를 발견했다.
    SSH 터널링을 하기 위해서 필수 조건은 아닌 것 같지만 많이 보이는 키워드여서
    추가적으로 학습을 할 생각이다.
  3. AWS Docs를 자세하게 보는 것은 처음인데 꽤 구체적이고 친절하게 설명을 해준다.
    앞으로 궁금한 점이나 학습이 필요하면 AWS Docs를 위주로 봐도 좋을 것 같다.




시작하기

VPC 외부에서 NAT Instance를 통해 Private Subnet EC2 SSH tunneling

IGW, Routing Table, VPC, Subnet, Instance를 사용해서 SSH 터널링을 했다.
(내부에는 기본으로 연결되는 보안 그룹같은 요소들이 있을 것 이다.)

진행 과정은 인터넷에 검색하면 많은 자료가 나와 간단하게 SSH 터널링을 하기 위해 알아야 하는 각 AWS 요소들의 특징만 상기시키기 위해 적는다.




아래는 직접 구현한 구조(사용 서비스, CIDR...)를 다이어그램화 시켰다.

Internet gateway(IGW) : VPC와 인터넷 간의 통신할 수 있게 해준다.

  1. 리소스(ec2...)에 public IP가 존재하는 경우 IGW를 사용하면 리소스가 인터넷에 연결할 수 있음
  2. 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결되는 경우, 이를 퍼블릭 서브넷이라고 함
  3. 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 없는 라우팅 테이블과 연결되는 경우, 이를 프라이빗 서브넷이라고 합니다.
  4. VPC를 떠나 인터넷으로 나갈 때 Network Address Translation을 제공
    외부에서는 Private IP가 아니라 인스턴스의 public IP 혹은 탄력적 주소로 설정
인터넷 게이트웨이로 향하는 라우팅을 설정하려면 "0.0.0.0/0 -> IGW"을 추가합니다.
그러면 VPC 내부의 트래픽을 VPC 외부로 보낼 수 있음

결론적으로 서브넷의 라우팅 테이블에 IGW 연결 여부가 퍼블릭/프라이빗 서브넷을 결정한다.

요금
!! IGW 자체의 요금은 없으나 IGW를 사용한느 EC2에는 데이터 전송 요금이 부과 !!

IGW Docs https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Internet_Gateway.html






Routing table : 서브넷 또는 게이트웨이의 네트워크 트래픽이 전송되는 위치를 결정

라우팅 테이블은 목적지 및 대상을 지정한다.
예를 들어 서브넷이 인터넷 게이트웨이를 통해 인터넷에 엑세스할 수 있도록 하려면 서브넷 라우팅 테이블에 아래와 같이 추가한다.

0.0.0.0/0 -> igw-id

모든 라우팅 테이블에는 VPC 내부 통신을 위한 로컬 라우팅이 포함(기본 값)
로컬 경로(VPC)보다 더 구체적인 경로를 추가할 수도 있음
또한 라우팅 테이블에 라우팅이 여러 개 있는 경우, 트래픽에 일치하는 가장 구체적인 라우팅 사용

VPC를 만들면 기본 라우팅 테이블이 바로 생성되며 서브넷이 라우팅 테이블과 연결하지 않은 경우 기본 라우팅 테이블을 사용함

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Route_Tables.html#RouteTables




Subnet : VPC의 IP 주소 범위, 특정 서브넷에서 AWS 리소스를 생성할 수 있다.

서브넷은 단일 가용 영역 내에서만 존재하며, 여러 영역으로 확장할 수 없다.
서브넷의 유형은 4가지가 존재

  • 퍼블릭 서브넷 : 서브넷에 인터넷 게이트웨이로 직접 연결되는 경로가 존재, 해당 서브넷 리소스는 인터넷에 엑세스가 가능
  • 프라이빗 서브넷 : 인터넷에 직접 연결되 경로가 존재하지 않음, 경유해야 인터넷에 엑세스가 가능하다.
  • VPN 서브넷 : 서브넷에 가상 프라이빗 게이트웨이를 통해 Site-to-Site VPN 연결로 연결되는 경로가 존재
  • 격리된 서브넷 : 서브넷에 VPC 외부 대상에 대한 경로가 없음, 격리된 서브넷의 리소스는 동일한 VPC의 다른 리소스와만 서로 액세스 가능

각 서브넷은 서브넷 외부로 나가는 아웃바운드 트래픽에 대해 허용된 경로를 지정하는 라우팅 테이블이 연결되어야 함(자동으로 기본 라우팅 테이블과 묵시적으로 연결)


AWS 리소스 보안을 위해서는 프라이빗 서브넷을 사용해야 좋다.
리소스 보안 강화를 위해 보안 그룹, ACL를 사용할 수 있다.
보안 그룹은 EC2같은 리소스에 대한 인 바운드, 아웃 바운드 트래픽을 제어하고
ACL은 서브넷 수준에서 인 바운드, 아웃 바운드 트래픽을 제어함

각 서브넷에는 ACL이 연결되어야 하고 모든 서브넷은 기본 ACL과 자동으로 연결한다.

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-subnets.html




VPC : 논리적으로 격리된 가상 Network

  • VPC를 사용하면 정의한 논리적으로 격리된 가상 네트워크에서 AWS리소스를 시작할 수 있다.
  • 1개의 리전에 종속된다.
  • 각각 VPC는 독립적이며 VPC간 통신을 원한다면 피어링 서비스를 사용해야 함

요금
VPC에 따르는 추가 요금은 없음.

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html




NAT Instacne

AWS NAT Gateway 대신에 사용, VPC 내부의 다른 리소스에 트래픽을 전달해줄 수 있다.
EC2로도 동일한 역할을 할 수 있고 이 때 NAT Instance라고 한다.
(NAT Gateway의 비용이 비싸다고 하여 제일 저렴한 EC2를 학습에서 사용)

profile
즐겁게 개발하기

0개의 댓글