안전한 AWS 네트워크 구성하기(VPC, Subnet, Route Table, Internet Gateway)

Mugeon Kim·2024년 5월 23일
0
post-thumbnail

1. 작성 배경

  • 취준생때 AWS를 학습하면서 모든 프로젝트를 인바운드, 아웃바운드를 모두 열고 사용하였다. 모두 열었을 때 악성 봇, 디도스등 악의적인 요청에 위협이 될수 있습니다. 업무를 하면서 온프로미스에서 AWS에서 넘어가면서 제일 처음 보안에 대해 생각하게 되어 학습한 내용을 정리하였습니다.

구현하려는 가장 간단한 AWS 아키텍처

  • 이번 글에서는 크게 VPC, Subnet(private, public), Route Table, Internet Gateway을 다루겠습니다.

2. AWS VPC (Virtual Private Cloud)

2-1. VPC란

  • vpc란 큰 네트워크에서 용도 별로 네트워크를 쪼개서 사용하기 위한 서브 네트워크이다. 간단히 설명하면 격리된 가상 데이터 센터라고 볼 수 있다. 보통 vpc를 ip로 구분해 나눈 후, 다중 AZ ( 가용영역 )에 걸쳐 서브넷을 구성합니다. 이것을 통하여 aws의 확장 가능한 인프라를 사용한다는 이점과 보안적인 이점, 네트워크를 제어할 수 있다는 장점이 있습니다.

  • VPC는 Amazon 콘솔에서 생성됩니다. 또한 하나의 VPC는 하나의 Region내에서만 생성이 가능하지만 두개 이상의 리전에 걸치는 것은 불가능합니다. 그렇지만 하나의 VPC는 여러개의 Amazon Availability Zone (이하 AZ) 에 걸쳐서 생성될 수 있습니다. 또한 가질 수 있는 IP 주소의 Range는 2^16 = 65535로 제한됩니다.

2-2. CIDR

사이더는 ip 주소를 관리하는 체계이다.

  • 만약에 10.0.0.0/16 이라고 사용하면 16은 prefix를 의미한다.

    • prefix란 ip를 2진수로 나타내면 앞에 2진수 16자리를 고정한다.
  • 즉 10.0.0.0 을 2진수로 표현하면 00001010.00000000/.0000000.000000인데 10.0은 16자리니깐 10.0만 고정하고 뒤에 0.0은 변경할 수 있다는 것을 의미한다.

  • 하나의 수에는 256까지 사용가능한데 이때 0.0 총 2개니깐 256 * 256개의 수만큼 private ip를 사용할 수 있다는 것을 의미한다.

2-3. Subnet

  • 서브넷이란 VPC를 나누는데 사용된다. VPC는 큰 네트워크를 쪼개서 사용하는 서브 네트워크라고 했는데 이때 VPC는 IP로 구분해 나눈 후, 다중 AZ(가용영역)에 걸쳐서 서브넷을 구성한다.

  • 이때 서브넷은 public, private으로 분류한다.

2-4. 가용영역

  • 가용영역 : aws환경에서 물리적으로 분리되어 있는 데이터 센터를 논리적으로 묶은 인프라
    예를 들면 리전에 대해서 들어봤을 것이다.

  • 여기서 리전은 도시, 가용영역은 주차장이라고 할 수 있다. 만약에 주차장에 문제가 생겨 주차를 못하여도, 도시의 다른 주차장을 이용할 수 있다. 이처럼 가용영역은 데이터센터에 장애가 발생해도 다른 데이터센터로 서비스를 제공하여 클라우드 HA을 보장한다.

2-5. Internet Gateway

vpc 한개에 internet gateway를 하나만 만들 수 있고 외부에서 public subnet에 접근할 수 있고 내부에서 외부롤 통신할 수 있는 통로이다.

  • 인터넷을 사용하기 위해서는 public IP, Route Table이 설정이 되어있어야지 가능하다.

  • route table은 트래픽을 어디에 보내줄지 직접 설정하는 것이다. 들어오는 트래픽은 vpc가 알아서 인스턴스에 전달을 해주지만 처리가 되고 나서 나가야 되는 트래픽들은 인터넷으로 내보내야 하는지 내부에서 사용해야 되는지 구분할 . 수없어서 route table로 internet gateway로 가라고 말해주어야 한다.

  • 2개의 public subnet을 하나의 public route table로 관리를 한다.

2-6. Nat Gateway

private subnet은 외부에서 접근할 수 없다. 이때 외부에서 인터넷을 사용하기 위해서 들어오는 트래픽은 차단하고 나가는 트래픽만 허용해 주기 때문에 private subnet은 외부에서 접근할 . 수없다.

3. VPC 생성하기

3-1. vpc

  • vpc에 접근하여 vpc 생성을 통해 vpc등을 선택한다. ( 이때 vpc만 생성을 통해서 모든 부분을 생성할 수 있지만 subnet, rb, igw를 자동으로 생성하는 방식을 소개하겠다. )

  • public, private subnet을 각각 2개를 생성을 하고 각각의 CIDR를 설정을 합니다.
  • 이후 NAT IG는 1개의 AZfh 설정하고 VPC 엔드포인트는 옵션입니다.

라우팅 테이블


라우팅 테이블에 들어가면 현재는 public이 생성이 되어져 있습니다. private subnet을 담당하는 table을 하나 만들어서 2개의 private subnet을 연결하고 라우팅에 nat, public subnet을 연결을 합니다.

4. ALB 설정

  • alb는 load balancer로 외부의 요청을 앞단에 받아서 ec2에 부하를 분산을 시킬 수 있다. 여기서 HTTPS 인증을 수행하고 SSL Termination을 수행하여 WAS부터 내부 통신과 리스너 역활을 수행하기 위해서 사용을 하겠다.

네트워크 매핑

  • vpc를 선택하고 서브넷은 둘 다 public1, public2가 선택을 합니다. 이때 vpc는 방금 이전에 만든 vpc를 선택합니다. (기존에 default > vpc )

보안 그룹

  • alb에 접근하는 방법은 80, 22 포트를 허용합니다. 이때 22의 접근 아이피는 개인적인 ip를 허용하고 80포트는 모든 포트를 허용하게 만듭니다.

  • alb에 80과 22는 http, ssh를 적용을 합니다.

리스너

  • 리스너에서는 대상 그룹을 선택을 합니다. 이때 target group을 하나 생성을 합니다.

private subnet에 연결한 하나의 ec2를 생성을 합니다. 그렇게 되면 public ip가 없기 때문에 private subnet으로 접근이 가능합니다. 이것을 target group에 하나를 생성을 합니다.

방금 생성한 private subnet을 생성한 ec2에 80포트를 선택하고 등록합니다.

Bastion Instance

  • 바스티온 인스턴스는 가장 쉬운 private subnet 인스턴스에 접속할 수 있는 방식이다. 더욱 높은 보안성을 만들기 위해서는 session manage가 있습니다.

  • bastion instance는 private subnet 인스턴스에 ssh를 통해 해당 인스턴스에 접속한 뒤 해당 인스턴스 내부에서 ssh를 통해 Private Subnet 내부의 인스턴스에 접속

본인은 ftp를 통해 Private Instance에 접속할 수 있는 키를 Bastion Server에 올려두었다.
이후 ssh -i idiot.pem ubuntu@[Private IP] 명령어를 통해 Bastion Server에서 Private Instance로 접속이 가능하다.

HTTP 프로토콜을 통해 ALB의 DNS에 접속한다.
80포트가 열린 ALB는 리스너를 통해 80포트로 접속했음을 알 수 있다.
8080포트가 열린 타겟그룹으로 해당 트래픽이 8080포트로 전달된다.
8080포트가 열린 Private Instance는 해당 트래픽을 전달받을 수 있다.
이를 통해 아파치 톰캣 위에 올려진 스프링부트 웹서버의 URL로 접속이 가능하다.

참고 문헌


https://velog.io/@sophia5460/AWS-ALB%EB%A5%BC-%ED%86%B5%ED%95%B4-Private-Instance-%EC%86%8D-Spring-Boot-%EC%9B%B9-%EC%84%9C%EB%B2%84-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0

https://minjii-ya.tistory.com/32?category=946161

https://tech.cloud.nongshim.co.kr/2018/10/16/4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0vpc-subnet-route-table-internet-gateway/

https://www.44bits.io/ko/post/understanding_aws_vpc

profile
빠르게 실패하고 자세하게 학습하기

0개의 댓글