AWS 인프라 구축 - Private EC2 구성

공부는 혼자하는 거·2023년 1월 20일
0

업무

목록 보기
9/14

요구사항

한개의 서버는 외부에서 접근 못하도록 격리시키고, 웹과 통신하는 서버가 앞단에서 request를 받아 격리된 서버로 요청을 보내도록 AWS 를 사용해 네트워크를 구성해보자. 일단 가장 먼저 VPC부터 만들자. AWS 계정을 생성했으며 자동으로 Default VPC가 생기고, 이 vpc로 경로가 잡히지만, 사용하지 않고, 직접 만들어보자.

VPC

public server와 private server가 동일한 VPC내에 실행되도록 설정을 해야한다. public subnet은 webserver 호스팅을 하도록, private subnet은 deep learning 자원을 호스팅하는 restful server를 호스팅하도록 설정할 거다.

Subnet

public subnet private subnet 생성해줍니다.

Internet Gateway

Route Table

먼저 public subnet 부터 연결한 거 하나 만들고..

private 도..

똑같이 private subnet 할당해주면 된다.. 짤에서는 public subnet 2개 private subnet 6개 할당해줬는데, 꼭 이렇게 안 해도 됨

EC2

public ec2 instance

보안그룹 http, https 허용

고정 IP 도 할당해주자.

private ec2 instance

Load Balancing

Target group




health check success code는 200-499 까지 해주자..일단은..

public instance 를 보류 중에 넣고 next

Load Balancer

load balancer 타입 application 선택

보안그룹 새로 생성하고 inbound 룰에 https도 추가, anywhere

!

리스너에 https도 추가, acm 인증서 발행, 도메인이 있다고 가정

지금 로드밸런서는 단순리 aws ssl 인증서를 도입하기 위해 만든 로드밸런서도 실제로 public instance를 2개 띄워서
로드밸런싱 할 수도 있겠지만 그러지 않겠다.

private ec2 instance 접속

Private Instance는 Public IP가 없고, Subnet에 연결된 Routing table에 IGW로 향하는 규칙도 없다. local(VPC 대역) 끼리만 통신가능한 상태. 이러한 Private Instance로 접속하려면 통신이 되는 Local 대역의 서버에서 접속하면 된다. 또는 load balancer를 이용하거나..

public ec2를 Bastion Instance(Public 네트워크에서 Private 네트워크에 대한 액세스를 제공하기 위한 목적을 가진 서버)로 만들어주자.

먼저 ssh로 public instance에 접속해준다. private ec2 instance key file을 복사해서 public 안에 똑같이 만들어준다.

ubuntu@ip-10-1-1-199:~$ vi ec2-private.pem
ubuntu@ip-10-1-1-199:~$ chmod 400 ec2-private.pem 
ubuntu@ip-10-1-1-199:~$ sudo ssh -i ec2-private.pem ubuntu@10.1.3.135
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-1028-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Jan 20 02:59:15 UTC 2023

  System load:  0.0               Processes:             98
  Usage of /:   5.4% of 28.89GB   Users logged in:       0
  Memory usage: 11%               IPv4 address for eth0: 10.1.3.135
  Swap usage:   0%

0 updates can be applied immediately.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-10-1-3-135:~$

10-1-3-135 private ip로 접속했다!

문제는 여기서(private instance) 네트워크에 접속하지 못한다는 거다.

확인해보면 packet 이 도달하지 못하는 걸 알 수 있다. 이러면 각종 패키지를 이 인스턴스에 설치해주지 못하므로, nat gateway를 깔아주자

NAT gateway

gateway 생성 후 route table에 가서 private subnet을 맴핑해준다.

이제 잘 됨

이제 테스트 삼아서 여기에 nginx도 설 치해주자.

Route53

도메인주소 있다고 가정

public ec2 instance에서 private ec2 http call

curl 'http://10.1.3.135' -i -X GET

private ip로 성공!

private 이 네트워크 콜을 받을 때는.

Private -> Routing Table -> NATGateway -> InternetGateway -> Internet

사용자가 웹으로 접근 시는,

internet->internetGateWay->Router->Route Table->Load Balancer->public subnet 안의 public ec2 instance->private ec2 instance

이런 식으로 구성할 거다..

좀 더 적으려다가 velog에는 이까지만..

참고

https://stackoverflow.com/questions/57358449/how-to-send-http-https-request-in-private-ec2-instance

https://a1010100z.tistory.com/174

https://kimjingo.tistory.com/172

https://roseline.oopy.io/dev/access-aws-private-db-through-vpn

https://tech.cloud.nongshim.co.kr/2018/10/16/%ec%b4%88%eb%b3%b4%ec%9e%90%eb%a5%bc-%ec%9c%84%ed%95%9c-aws-%ec%9b%b9%ea%b5%ac%ec%b6%95-5-1-nat-%ec%84%9c%eb%b2%84-%ec%83%9d%ec%84%b11/

profile
시간대비효율

0개의 댓글