본문 바로가기
Development(Web, Server, Cloud)/Cloud : 실습

AWS VPC를 만들어보자

by tonyhan18 2022. 1. 18.
728x90

 

 

Virtual Private Cloud를 선택하자

- aws의 퍼블릭 환경내에 각각의 프로젝트(테넌트)를 위한 작업 공간(네트워크)을 만드는 것으로 각 프로젝트 별로 별도의 공간이 제공되어야 하므로 사설 공간을 제공해 준다. 서로다른 프로젝트간에는 트래픽의 영향이 없다.

예) 우리집에 192.168.1.0/24 라는 사설 네트워크를 생성하고 친구집에도 192.168.1.0/24 라는 사설 네트워크를 만드는 것이라고 생각하면 된다.

브랜든의 블로그 :: 테넌트(tenant), 리전(region), 가용 영역(Availability Zone) (tistory.com)

 

테넌트(tenant), 리전(region), 가용 영역(Availability Zone)

 관련포스팅  - 2020/01/28 - [인프라/클라우드] - 클라우드 컴퓨팅과 API의 역할 2.1 클라우드 환경의 전체 그림 2.1.1 ) 테넌트 (tenant) - 사전적 의미로 세입자를 의미하며, 클라우드 서비스 이용자가

brenden.tistory.com

 

 

cloud -> 멀티 테넌시

테넌트 -> 프로젝트

 

각각의 프로젝트들이 있다고 하자.  퍼블릭 안에 나만의 사설 공간이 있어서 ip가 겹치더라도 충돌될일이 없다. 사설 공간끼리는 충돌될 일이 없다. 예를 들어 1.20에서 ping을 1.10에 보내더라도 보내지는 일이 없다. 바로 이런 프로젝트 하나가 VPC이다.

 

그래도 네트워크가 가능하도록 만들기위한 인터넷 게이트웨이 설치가 필요하다.

 

 

AWS에 VPC만들기(load balancer + instance)

보면 AWS에도 인터넷 게이트웨이가 존재하는 것을 확인할 수 있다.

 

 

보면 우리도 이미 VPC와 인터넷 게이트웨이가 있는 것을 확인할 수 있다.

 

VPC 마법사 시작을 클릭하자

그 중에서도 퍼블릭 및 프라이빗 서브넷에 있는 하드웨어 VPN 액세스를 제공하는 VPC를 클릭하자. 보면 우리는 VPC 아넹 있지만 게이트웨이를 통해서 인터넷으로 나갈 수 있다. 이때 private subnet은 외부에 연결은 안되고 그렇다고 인터넷으로 연결할 수 없으니 VPN(Virtual Private Network - 가설 사설망)을 통해 Corporate Data Center에 연결된다.

 

VPN을 이용하게 되면 양쪽 end-point 통신에 사용되는 모든 데이터는 "암호화", "인증", "무결성검사(데이터 위조, 변조 체크)" 되어 안전하게 통신할 수 있다. 또한, 사설 주소간 통신도 가능하게 된다.

 

다양한 방법이 있겠으나 우선은 단일 퍼블릭 서브넷이 있는 VPC로 작업하게 된다.

 

AWS에서 만들기

도쿄에서 인스턴스를 만들어보겠다.

 

두번째꺼

flavor 넘기기

 

인스턴스 2개

 

 

EBS에서 8G 짜리 볼륨 2개 만들어줌.

보면 종류도 다양한데 내려갈수록 가격이 높아진다.

자주 넣고 빼는거면 SSD

장기보존은 마그네틱을 쓰면 좋다.

 

암튼 넘기기

 

넘기기

보안그룹에 HTTP 열어놓기

그리고 SSH은 내 IP로 해놓기. 참고로 저거 보여지면 위험해서 감추었다.

 

aws에서 생성하는 인스턴스 VM은 기본적으로 원격지에서 username/password를 통해 SSH 접속하는 것을 허용하지 않는다. key-pair를 통한 접속만을 허용한다. 따라서 개인키를 분실할 경우에는 서버에 SSH 접속할 수 없게된다.

 

이렇게 만들어 냈다.

 

AWS에서 생성되는 인스턴스는 기본적으로 사설 주소가 할당된다. 단, 인터넷으로의 연결을 위하여 해당 사설주소 별로 1개의 공인주소를 각각 제공해준다. 이 공인주소는 임시 주소이므로 인스턴스가 중지->시작 된다면 변경됨. 재부팅시에는 변경되지 않는다. 웹서버의 경우에는 공인주소가 고정되어야 도메인주소와 연결이 가능하므로 해당 공인주소를 고정시키기 위한 서비스가 필요하다. -> Elastic IP(고정된 공인 주소를 제공해주는 서비스)

 

키가져다 ppk먼저 만들자

 

Save Private Key로 ppk를 만들어보자

 

Auth에 PPK도 넣어주었다.

 

마지막으로 AWS 인스턴스의 공인 IP를 입력해주고 Open 해주자

 

두개다 ec2-user로 로그인해주면 된다. 그러면 짜피 ppk가 들어가 있어서 잘 로그인된다.

 

```

sudo yum install -y httpd

```

로 아파치서버를 설치해주자

 

참고로 얘네는 기본적으로 방화벽이 없다. 왜냐하면 방화벽 없어도 보안그룹이 따로 정의되어 있기 때문이다.

일단 우리가 원하는 위치에 파일을 만드는게 불가능하다. 그런 어떻게 해야할까?

 

걍 가서 알아서 만들어라

```

cd /var/www/html

sudo vi index.html

```

```

sudo systemctl restart httpd

```

해주면 서버에 index.html이 보인다.

 

이번에는 로드밸런서를 설치해보자. 위와같이 EC2 왼쪽 탭중에 로드밸런서가 있는 것을 볼 수 있다.

 

위와같이 로드밸런서를 만드는 방법들이 나온다. 

 

아래쪽에는 Classic Load Balancer도 있다. 이걸 사용하자

 

나한테 80번으로 들어오면 서버에게 80번으로 보내겠다는 의미이다.

 

기존에 80번 포트만 열어놓은 그룹이 있기 때문에 얘를 쓰면 된다.

 

보안 설정 구성으로 갔는데 80번 쓰지말라고 빼액한다. 응애 나 80번 조아

 

다음으로 넘어가자

 

서버가 살았는지 죽었는지 체크하는 기능이다. 

 

80번포트로 접근하면 index.html을 만날 것이다. 그래서 LB도 서버의 80번 포트로 들어가서 index.html이 살아있는지 체크한다. 이걸 30초에 한번씩 응답은 5초안에 받겠다는 것이다. 

이걸 HAPorxy에서도 동일하게 동작하도록 만들 수도 있다.

 

인스턴스 두개를 모두 LB 뒤에다 추가해주자.

 

무시.

 

생성하자

 

생성 완료했다.

 

DNS이름이 있으니 주소창에 80번 포트로 검색하자. 참고로 나오는데 오래걸린다.

 

서버와 잘 연결되었다.

 

그런데 lb 안통하고 서버로 바로 접속도 가능하다. 그래서 인터넷으로 부터의 접속을 차단해버리자

 

퀴즈 : 새로운 Security Group을 하나 생성하고 해당 SG을 인스턴스에 할당한다. 이 SG은 인스턴스로 접속하는 IP를 LB로 부터의 접속만을 허용하는 (또는 LB와 인스턴스가 연결되어 있는 네트워크 대역) 여야한다. 정상적으로 구성이 되었다면 LB를 통해 접속하는 웹 접속은 정상적으로 연결되나 각각의 인스턴스의 공인주소로 접속하는 것은 차단되어야 한다.

 

 

이렇게 보안 > 보안 그룹 변경으로 인스턴스의 보안그룹을 수정해주면된다.

시작하기 전에 우리가 쓰는 VPC가 어디 대역인지 확인해야 한다. load-balaner로 접근해도 되고 EC2로 접근해도 된다. 짜피 개인 클라우드라서 VPC ID는 동일하다.

 

들어가보면 위와같이 현재 생성된 VPC 하나가 보이고 IPv4 CIDR도 보인다.

이걸 기억해놓자.

 

왼쪽으로 가면 보안 그룹이 있다.

이걸 클릭해서 새로운 보안그룹을 추가하거나 수정해주면 된다.

 

 

로드밸런서의 내부 VPC IP를 알수가 없다. 하지만 그럼에도 VPC ip를 알 수 있기 때문에 그 IP 대역 CIDR(Classless Inter-domain Routing)을 이용해서 내부 서버에 접근할 수는 있다.

 

새로운 PERMIT_LB라는 보안그룹을 만들었다. 이 그룹안에 CIDR 대역을 HTTP로 통신할 수 있도록 뚫어놓자

이제 인스턴스에 가서 보안그룹을 수정해주자

PERMIT_LB를 추가해주었다.

매우 잘 접근된다.

 

 

그런데 아직까지 서버에는 HTTP 접근이 가능하다. 우리가 보안그룹을 두개 먹여 놓았는데 devops 보안그룹이 HTTP 를 허용해서 그렇다.

 

이걸 아래와 같이 바꾸자.

 

기존 웹서버에 적용된 보안그룹

0.0.0.0/0(외부 모든 사용자) ----> tcp/80

내ip -----------------------------> tcp/22

 

변경해서 적용되어야 할 보안 그룹

172.31.0.0/0(외부 모든 사용자) ----> tcp/80

내ip -----------------------------> tcp/22

 

그리고 기존의 devops는 웹서버의 HTTP 접속도 허용해주기 때문에 SSH와 VPC 만 허용하기 위해서 위와같이 SSH 접근에 대한 내 IP 접근 규칙을 추가했다.

 

쉘을 통한 접속은 아직 허용이고

ip를 통한 접근은 막히었다.

 

 

새로운 보안 그룹을 만들어서 적용하기

1. LB에 적용할 보안 그룹 정책

외부 모든 사용자 ----->(tcp/80) LB

 

2. 웹서버에 적용할 보안 그룹 정책

LB -----> 172.31.0.0/16 ----> tcp/80

내IP(현재 내 컴퓨터가 사용하는 공인 IP주소) ----> tcp/22

 

AWS 삭제하기, 요금 발생 안되게하기

EBS에 가보면 볼륨이라는 것이 있다. 이건 스토리지의 일부분을 잘라서 서버들에게 나누어준것이다. 그렇기에 나중에 새로운 인스턴스를 만들때 만들었던 볼륨을 다시금 이어줄 수도 있다.

 

참고로 볼륨 그리고 EBS 아래 적인 스냅샷도 비용이 발생한다.

 

암튼 인스턴스를 삭제해주자.

보안 그룹도 삭제해주자. 얘네는 사실 요금은 발생하지 않지만 일단 필요없으니

 

혹시 탄력적 IP도 달려있다면 삭제해주자.

 

728x90