◆ AWS 3-tier Architecture (구성도)
◆ AWS 3-tier Architecture (VPC, Subnet, NAT, Routing Table)
◆ AWS 3-tier Architecture (SG, ELB)
지금까지 전체적인 구성도와 네트워크 구성을 끝내게 되었습니다.
Bastion Host 생성 | WEB 서버 생성 | Extenal - ELB |
■ Bastion Host 생성
■ WEB Server 1, 2 생성
■ Bastion Host에서 WEB Server 1, 2 접속 방법
■ Extenal - ELB 생성
■ Apache WEB 서버 index.html 생성 후 테스트
■ 외부에서 웹서버 접속 테스트 ( EX-ELB 작동 확인 )
● Bastion Host
- 외부에서 Private subnet에 있는 WEB, WAS, DB서버에 직접 접속을 허용하게 되면 보안상으로
취약해질 수 있습니다.
그러므로 Bastion Host는 일종의 Proxy서버 역할을 하며 정해둔 ip를 제외하고는 Bastion Host을 거쳐
private server에 접속하지못하도록 해서 보안을 강화할 수 있습니다.
우선, Bastion Host를 생성한뒤 로컬 PC에서 SSH로 Bastion Host에 접속하는 것 까지 해보겠습니다.
단계 1 : Amazon Linux 이미지를 선택해줍니다
단계 2 : 프리티어에서 사용할 수 있는 t2.micro 유형을 선택해줍니다.
단계 3 : 3 tier VPC와 public1 subnet을 선택해줍니다
단계 4 : default인 SSD를 선택합니다.
단계 5 : 태그를 설정할 수 있지만, 넘어가겠습니다.
단계 6 : 앞에서 설정해둔 Bastion-SG를 선택해줍니다.
앞에서 보안 설정을 할 때는 인바운드를 0.0.0.0/0으로 설정 (모든 IP허용)으로 해놨지만
보안을 강화해야 하므로 현재 자신의 로컬PC IP를 적어줍니다.
단계 7 : 모든 구성을 마친 뒤 검토를 하고 시작하기 버튼을 눌러줍니다.
시작하기를 누르게 되면 보안 키 설정이 나오게 됩니다.
새 키 페어 생성을 하고
이름을 Bastion으로 설정합니다.
Bastion Host 역할을 하는 EC2서버가 생성된 걸 확인할 수 있습니다.
Bastion Host에 SSH로 접속을 하게 될 텐데 접속하기 위해서는
10.0.XX.XX/24와 같은 Private IP 말고 AWS에서 제공해주는 Elastic IP 서비스로 Public IP를 부착해줘야 합니다.
EC2 서버에 Elastic IP 부착하는 방법은
을 참고해 주시기 바랍니다.
Bastion Host에 SSH로 접속하기 위해 MobaXterm이라는 프로그램을 써보겠습니다.
MobaXterm 프로그램은 mobaxterm.mobatek.net/download.html에서 다운로드하실 수 있습니다.
( putty를 보통 많이 사용하시지만 mobaxterm을 사용하게 되면 더 많은 편의 기능을 사용하실 수 있습니다. )
mobaxterm 프로그램을 실행하게 되면 밑그림과 같은 창이 뜨게 됩니다.
우선 ssh 접속에 필요한 pem키를 ppk로 변환하도록 하겠습니다.
MobaXterm 창에서 상단에 위치한 Tools 버튼을 클릭해줍니다.
Tools버튼을 클릭하면 MobaXterm SSH Key Generator 가 뜨는데 클릭해서 들어가 줍니다.
Conversions ☞ Import Key를 해서 Bastion Host EC2 서버를 생성할 때 만들어둔 보안키를 넣어줍니다.
Import key를 해서 Bastion Host 보안키를 넣어주면 보안 키에 대한 설명이 간략하게 뜨게 됩니다.
Save Private Key을 클릭해서 자신의 로컬 PC에 ppk파일을 저장하여 줍니다.
Bastion Host pem키를 ppk로 변환하게 되면 컴퓨터 모양에 모자를 씌운 귀여운 아이콘의 파일이 생성되게 됩니다.
pem키를 ppk로 변환시켜준 다음에는
SSH로 접속하기 위해 ppk파일을 사용한 Session을 세팅해주겠습니다.
다시 처음 화면으로 돌아가서 상단에 위치한 Session 메뉴를 클릭해줍니다.
들어가게 되면 여러 가지 프로토콜이 뜨지만 SSH로 접속할 것 이기 때문에 SSH를 클릭하여 줍니다.
SSH 설정 메뉴에서 Advanced SSH settings를 클릭해줍니다.
1. Bastion Host에 붙여준 Elastic IP ( Public IP )를 기입해주겠습니다.
2. 옆에 있는 Use Private key체크박스를 클릭하고, 방금 생성해둔 ppk파일을 불러오기 해줍니다.
설정을 마치고 OK 버튼을 누르게 되면 서버로 접속하게 됩니다.
기본 로그인 계정인 ec2-user를 입력해서 들어가 줍니다.
로그인을 하게 되면 이처럼 Bastion Host EC2 서버에 들어오게 된 것을 확인할 수 있습니다.
● WEB server
- WEB server는 웹 브라우저와 같은 클라이언트로부터 HTTP 프로토콜로 요청을 받아,
HTML 문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어입니다.
먼저 WEB 서버를 만들기 위해서는 AWS EC2 한대를 생성해야 합니다.
위 게시물을 참고하여 미리 생성해두었던 3 tier VPC, WEB1-Subnet, WEB-SG를 적용하며 만들어줍니다.
WEB server 소프트웨어에는 APACHE, NginX 등 있지만 APACHE 서버를 설치해주겠습니다.
우선 WEB server에 접속한 뒤 아래 명령어를 입력해줍니다
[ec2@user ~]$ sudo yum -y install httpd
Apache 웹 서버를 설치해 줍니다.
[ec2@user ~]$ sudo systemctl start httpd
[ec2@user ~]$ sudo systemctl status httpd
[ec2@user ~]$ sudo systemctl enable httpd
systemctl 명령어를 사용하여 웹서버 동작과 상태를 봐줍니다.
컴퓨터를 재부팅 한 뒤에도 자동으로 작동할 수 있도록 enable 명령어도 입력해줍니다.
[ec2@user ~]$ sudo firewall-cmd --permanent --new-zone=webserver
firewall 방화벽 명령어를 사용하여 webserver라는 zone을 생성해줍니다.
[ec2@user ~]$ sudo firewall-cmd --reload
[ec2@user ~]$ sudo firewall-cmd --get-zones
firewall 재부팅을 한뒤 webserver zone이 생성되었는지 확인하기 위해 zone 목록을 출력해줍니다.
[ec2@user ~]$ sudo firewall-cmd --set-default-zone=webserver
생성해준 webserver zone을 default로 설정해줍니다.
[ec2@user ~]$ sudo firewall-cmd --get-default
명령어를 입력해 default zone이 바뀌었는지 확인하여줍니다.
[ec2@user ~]$ sudo firewall-cmd --permanent --zone=webserver --add-service=http
[ec2@user ~]$ sudo firewall-cmd --permanent --zone=webserver --add-service=ssh
웹서버 통신 허용을 위해 http와 ssh 접속을 위해 ssh 서비스까지 추가해줍니다.
[ec2@user ~]$ sudo firewall-cmd --reload
[ec2@user ~]$ sudo firewall-cmd --zone=webserver --list-all
firewall을 reload 해준 뒤
http, ssh 서비스가 제대로 올라갔는지 확인해줍니다.
[ec2@user ~]$ sudo systemctl restart firewalld
[ec2@user ~]$ sudo systemctl status firewalld
[ec2@user ~]$ sudo systemctl enable firewalld
방화벽 설정이 완료되었다면 systemctl 명령어를 사용하여 방화벽 서비스를 재구동하고 상태를 봐줍니다.
그 후 enable 명령어를 입력하여 서버 재부팅 이후에도 동작할 수 있게끔 설정해줍니다.
※ WEB Server 2 생성 후 위와 같이 똑같이 설정해줍니다. ( APACHE 웹서버 설치, 방화벽 설정 )
이제 베스천 호스트에서 WEB Server로 접속하는 법 을 알아보겠습니다.
로컬 PC에서 ssh -i 옵션과 Bastion Host ppk키를 사용하고
Bastion Host를 통해 WEB server 1, 2로 접속해보겠습니다.
우선, Bastion Host ppk키가 존재하는 디렉터리로 이동후 아래의 명령어를 입력해줍니다.
ssh -i Bastion_1.ppk ec2-user@"Bastion Host private IP"
명령어를 치게 되면 Bastion Host에 정상적으로 접속이 되는 걸 보실 수 있습니다.
베스천에서 WEB 서버로 들어가기 위해서는 로컬 PC에서 베스천으로 들어가는 것과 동일하게
해당 서버 보안키가 요구됩니다.
그러므로 저희가 WEB 서버 ec2를 생성할 때 로컬 PC에 받아둔 pem키를 베스천 호스트에 이동시켜줘야 합니다.
이처럼 로컬 PC에 WEB Server 1,2 pem키가 존재하는 걸 확인할 수 있습니다.
아래 scp -i 명령어를 이용하여 Bastion Host로 WEB server 1,2 pem 키를 복사시켜줍니다.
scp -i Bastion_1.pem webserver_1.pem webserver_2.pem ec2-user@"Bastion Host Public IP":/home/ec2-user
scp -i 옵션 명령어를 치시게 되면 위처럼 전송 퍼센트, 전송 속도, 소요되는 시간이 나타나게 됩니다.
Bastion Host에 접속 후 pem키가 존재하는지 확인해 줍니다.
[Bastion Host ~]$ ssh -i webserver1_pem ec2-user@"WEB Server 1 Private IP"
[Bastion Host ~]$ ssh -i webserver2_pem ec2-user@"WEB Server 2 Private IP"
위 두 명령어를 사용하여 WEB 서버 1,2 에도 접속이 잘되는지 확인하여줍니다.
● External - ELB
외부에서 웹서버로 들어오는 통신을 배부해주는 역할인 External ELB을 이용해보겠습니다.
저번 시간에 External ELB을 생성하였지만 대상 등록에서 WEB server 1, 2를 지정해주지 않았기 때문에
대상 등록만 해주도록 하겠습니다.
2021.03.13 - [Cloud/Project] - AWS 3-tier Architecture (Network-2)
External - ELB에서 WEB server 1, 2를 등록해주겠습니다.
로드밸런싱 - 대상그룹 - target - Register targets를 클릭해줍니다.
WEB Server 1, 2를 포함시켜줍니다.
등록된 EC2를 확인한 뒤에 Register pending target을 클릭하여 등록해줍니다.
ELB는 웹서버로 트래픽을 잘 전달되고 있는지 자동으로 헬스체크를 하게 됩니다.
로드밸런싱 - 대상그룹 - target으로 들어가게 되면 헬스체크를 확인해볼 수 있습니다.
이처럼 WEB 1, WEB 2 서버에 정상적으로 트래픽이 전달되는 것을 볼 수 있습니다.
● Apache index.html 생성
웹서버에 접속하게 되면 맨 처음 보이게 될 index 파일을 제작해주겠습니다.
index.html을 생성하게 될 경로는 /var/www/html/index.html 입니다.
vi /var/www/html/index.html
으로 vi 편집기를 열어주고 index파일을 생성할 준비를 해줍니다.
<WEB 1>
<html>
<head>
<title> WEB Server 1 </title>
</head>
<body>
<h1> This is WEB 1 </h1>
<p> Welcome to WEB Server 1 <br /> nice to meet you </p>
</body>
</html>
<WEB 2>
<html>
<head>
<title> WEB Server 2 </title>
</head>
<body>
<h1> This is WEB 2 </h1>
<p> Welcome to WEB Server 2 <br /> nice to meet you </p>
</body>
</html>
WEB 서버 1, 2 모두 index.html 파일을 생성해줍니다.
생성이 완료되었으면 웹서버에 접속을 해보겠습니다.
웹서버를 접속할 때는 직접 접속할 수 없고 EX-ELB를 통하여 접속해주어야 합니다.
로드밸런서 - 설명 - DNS 이름 복사를 해준 뒤 주소창에 붙여 넣기를 해줍니다.
EX-ELB DNS를 통해서 들어가 준 뒤 새로고침을 클릭해주게 되면
생성해주었던 WEB 1, 2 서버 index.html 이 번갈아가며 나타나게 됩니다.
'Cloud > Project' 카테고리의 다른 글
AWS 3-tier Architecture 서버 생성 및 연동 ( WAS, WEB -WAS 연동) (1) | 2021.05.31 |
---|---|
AWS 3-tier Architecture Network ( SG, ELB ) (8) | 2021.03.13 |
AWS 3-tier Architecture Network ( VPC, Subnet, NAT, Routing Table ) (1) | 2021.03.08 |
AWS 3-tier Architecture 프로젝트 (1) (2) | 2021.03.03 |