Tencent Cloud Resources

텐센트 클라우드의 다양한 소식과 기술 문서 및 정보를 확인하실 수 있습니다.

 

텐센트 클라우드를 이용한 Web Service 구성하기

 

 

 

 

3부. 텐센트 클라우드를 활용한 웹서비스 구성 – CLB, WAF

이번 순서에서는 텐센트 클라우드의 CLB 서비스에 대해 살펴보고, 이어서 WAF에 대해 알아보겠습니다.

 

CLB

CLB는 Cloud Load Balancer 의 약자입니다. 이름에서 알 수 있듯이 부하분산 역할을 수행합니다.  CLB는 OSI 7 Layer 중에서 L7 계층에서 동작합니다.

Load Balancer의 주 기능은 부하분산 입니다만, 서비스의 연속성을 늘려주는 효과도 있습니다. 웹 서버를 여러 대로 구성하고, 그 앞에 Load Balancer를 배치하여 운영할 경우, 일부 웹 서버에 장애가 발생하더라도 Load Balancer가 장애서버를 서비스 pool에서 자동으로 제외시키므로, 서비스 중단시간을 최소화 할 수 있습니다.

 

CLB를 구성하기 전, 사전 준비

지난 2부에서 웹 서버를 하나 생성했습니다. 같은 과정을 반복해서 웹 서버를 총 2대 준비합니다.  여기서는, 각각의 웹 서버 이름을 cvm1, cvm2로 생성했습니다.

 

 

구성도는 다음과 같습니다.

 

CLB Instance 생성

텐센트 클라우드 콘솔에서 Product > Cloud Load Balance > CLB Instance List 로 이동합니다. CLB Instance List 바로가기

 

 

화면 상단에서, CLB를 생성하고자 하는 리전 영역을 선택합니다. 여기서는 Seoul 리전을 선택하겠습니다. Create 버튼을 클릭하면, CLB 인스턴스를 구매할 수 있는 Cloud Load Balance CLB 화면이 나타납니다.

 

Cloud Load Balance CLB 화면에서 CLB 구매 정보를 입력하고, 인스턴스를 생성합니다.

 

 

1단계: 과금 모드 / 지역 / 인스턴스 타입 선택하기

 

과금모드는 Pay as you go , 지역은 Seoul , 인스턴스 타입은 Cloud Load Balancer 를 선택합니다.

 

 

2단계: 네트워크 선택하기

 

 

  • Network type : 인터넷으로 서비스할 수 있도록, Public network를 선택합니다.
  • Network : 여기서는 CVM을 생성할 때 선택했었던 Default-VPC 를 똑같이 선택합니다.
  • Network Billing Mode : By Traffic을 선택합니다. 트래픽 사용량 만큼 과금하는 방식입니다.
  • Bandwidth Cap : 최대 100Mbps 로 설정합니다.

 

 

3단계: 프로젝트 선택하기

 

  • Project : 관리 편의성을 위해 프로젝트를 생성하고, CLB 인스턴스를 프로젝트에 추가할 수 있습니다. 2부에서 CVM을 생성할 때 Default project를 선택했었기 때문에, 여기서도 DEFAULT PROJECT를 선택합니다.
  • Instance name에는 새 CLB의 이름을 입력합니다. 여기서는 techblog-clb 라고 입력하겠습니다.
  • Quantity : 생성하려는 CLB의 수량입니다. 기본값인 1을 그대로 선택하고 진행합니다.

 

Cost 항목에서 예상 비용을 확인하신 후, Buy Now 버튼을 클릭합니다.

 

 

4단계: CLB 구매 확인

 

 

Confirm 화면이 나타나면, Confirm 버튼을 클릭합니다. 잠시 기다리면, CLB 구매가 되었다는 안내 메시지가 나타납니다. Done 버튼을 클릭해서, 작업을 마칩니다.

다시, CLB Instance List로 이동 해 보면, 새로운 CLB가 생성되어 있는 것을 볼 수 있습니다.

 

CLB 설정하기

CLB Instance List 화면에서, 리스트에 있는 CLB 이름을 클릭하면, 세부 정보를 확인할 수 있습니다. 아래 화면은, 조금 전 생성한 CLB의 기본 정보입니다.

 

 

VIP 항목에 새로운 IP 주소가 생성되어 있는 것을 볼 수 있습니다. 이 VIP 주소는 cvm1과 cvm2를 대표하는 CLB의 Virtual IP 주소이며, 앞으로 웹 서비스에 사용하게 될 IP주소 입니다.

 

생성한 CLB 인스턴스를 사용하여 웹 서비스를 하려면 아직 몇 가지 세부 설정이 더 필요합니다. 화면 상단의 Listener Management 탭을 클릭해서, 계속해서 CLB 설정을 합니다.

 

 

1단계: HTTP Listener 생성

Listener Management 탭을 클릭 해 보면, HTTP/HTTPS Listener가 아직 만들어져 있지 않습니다.

  1. 새 Listener를 생성하기 위해, HTTP/HTTPS Listener 항목에서 Create 버튼을 클릭합니다.

 

  1. CreateListener 창이 나타나면, 이름과 port를 입력합니다.

  • Name : http-listener
  • Listen Protocol Ports : HTTP 80

이름은, Listener를 구분하기 위한 이름입니다. 프로토콜은 HTTP와 HTTPS 중에서 선택할 수 있습니다. 여기서는 HTTP를 선택하겠습니다.

입력 후, Submit 버튼을 클릭합니다.

잠시 후, Listener 가 생성된 것을 볼 수 있습니다.

 

 

 

2단계: Forwarding rule 설정

이제 TCP 80 포트에서 HTTP 패킷을 수신하도록 Listener를 만들었습니다. 리스너가 수신한 패킷을 백엔드에 있는 실제 서버로 포워딩 하기 위해서는, Forwarding rule을 만들어야 합니다.

 

 

HTTP/HTTP Listener 화면에 “You’ve not created a forwarding rule. Click Create Now” 라는 메시지가 보입니다. Create Now 를 클릭합니다.

 

CreateForwarding rules 화면이 나타납니다.

 

  1. Basic Configuration : 포워딩 규칙 이름과 세부 규칙을 입력합니다.

 

 

  • Domain Name : 사용 할 도메인 이름을 입력합니다. 여기서는 테스트로 test.com을 입력하겠습니다.
  • URL : HTTP 요청 중에서, 포워딩 규칙에 매칭 하려는 URL을 입력합니다.
  • Balance Method : Weighted Round Robin 부하분산 방법에는 세 가지 방법이 있습니다.
부하 분산 방법  특징
Weighted Round Robin 특정 인스턴스에 가중치를 주면서, 순서대로 트래픽을 전달합니다.

Web서버들의 처리 성능이 서로 다를 때, 개별 서버의 성능을 감안하여 부하를 분산할 수 있습니다.

IP Hash                사용자측 IP 주소를 hash 처리한 후, 포워딩 합니다. 세션 유지에 유리합니다.
Weighted Minimun Connections                특정 인스턴스에 가중치를 주면서, HTTP 연결 수가 가장 적은 서버에게 부하를 분산합니다

 

    1. Health Check

 

 

  • Heath Check : Enable
  • Ckeck Domain : 여기서는, 테스트로 입력한 test.com 를 입력합니다.
  • Path : 특정 URL path를 상태점검 주소로 설정할 수 있습니다. 여기서는 Root Directory of CVM / 를 선택합니다.

 

  1. Session Persistence

 

Session Persistence는, 한 사용자의 요청을 계속 같은 Web서버로 전달하는 기능입니다.  서버와 사용자 사이에, 세션 정보를 유지해야 하는 경우에 사용합니다.  여기서는, 세션 유지기능이 필요 없으므로 이 옵션은 비활성화 하고 진행합니다.

Submit 버튼을 클릭해서 설정을 마칩니다.

 

이제, Listener Management 화면에서 Forwarding rule이 생성된 것을 볼 수 있습니다. (빨간색 타원 표시)

 

 

 

 

3단계: 실제 Web서버와 Bind 하기

리스너가 받은 요청을 포워딩 규칙과 비교하고, 규칙에 일치하는 경우에 백엔드 Web서버로 전달해야 합니다. 여기서는, 포워딩 규칙과 백엔드 웹서버 사이를 서로 연결합니다.

 

 

Bind 버튼을 클릭하면, Bind with backend service 화면이 나타납니다.

 

 

  1. Select an instance
  • Bind할 대상으로, CVM 을 선택합니다.
  • 리스트에 cvm1 과 cvm2의 왼쪽 편 체크박스를 선택합니다.
  1. Port, Weight 설정 cvm1과 cvm2 인스턴스가 오른쪽 화면에 추가되면, Port 번호와 가중치 값을 설정합니다.
  • Port : HTTP 서비스를 할 예정이므로, 80 을 입력합니다.
  • Weight : 두 서버가 같은 성능을 가지고 있으므로, 가중치는 같은 값으로 입력합니다. 여기서는 10을 입력하겠습니다.

Confirm 버튼을 클릭합니다.

 

 

모든 설정이 완료되었습니다. Bound Real Serer 항목에서 cvm1과 cvm2가 Bind된 것을 확인할 수 있습니다.

 

 

웹 페이지 변경

cvm1과 cvm2 인스턴스는, 같은 내용의 HTML 페이지를 가지고 있습니다. 어느 서버가 응답을 했는지 구분할 수 있도록, cvm2 서버의 index.html 파일을 수정합니다.

cvm2 서버에 SSH 접속한 후, 다음의 명령을 실행합니다.

echo ‘<html><h1>Hello, Tencent Cloud cvm2!</h1></html>’ > /usr/share/nginx/html/index.html

 

 

CLB 동작 확인

브라우저에서, CLB의 VIP 주소로 접속해서 HTTP Request를 보냅니다. 여기서는 CLV의 IP주소인 150.109.250.151이므로, http://150.109.250.151 에 접속했습니다.

브라우저에서, F5 키를 눌러 페이지를 다시 불러옵니다. Hello, Tencent Cloud cvm1! 메시지와 Hello, Tencent Cloud cvm2! 메시지가 번갈아 나타난다면 CLB가 잘 동작하고 있는 것입니다.

 

 

 

 

WAF 구성하기

이어서, WAF에 대해서 알아보겠습니다. WAF는 Web Application Firewall 의 약자 입니다.  WAF는 사용자의 HTTP/HTTPS 요청을 분석하고 그 결과에 따라 로그를 기록하거나 차단할 수 있습니다. 공격 패킷은 WAF에 의해 차단되며 백엔드의 웹서버에 전달되지 않기 때문에, 해커의 공격은 성공하지 못합니다. WAF는 OSI 7 Layer 중에서 L7 계층에서 동작하는 기능입니다. L3나 L4 계층에서 동작하는 방화벽과는 달리, WAF는 IP주소나 Port 번호를 다루지는 않습니다. 다만 L7 계층에서 패킷 내부의 데이터를 분석하고, 그 결과에 따라 동작합니다.

구성도는 다음과 같습니다.

 

 

WAF 설정

텐센트 클라우드 콘솔에서 Product > Web Application Firewall > Defense settings 로 이동합니다. Web Application Firewall 바로가기

 

 

 

Add domains 버튼을 클릭하면, 도메인 주소를 추가하는 Add domains 화면이 나타납니다.

 

 

  • Domain Name : WAF를 통해 보호하려는 도메인 이름을 입력합니다. 여기서는 테스트로tencentcloud.com을 입력합니다.
  • Web server configurations : HTTP 80
  • Real Server Address : 3부에서 생성한 CLB의 VIP 주소를 입력합니다.

Save 버튼을 클릭합니다.  잠시 기다리면, 도메인 주소가 추가된 것을 볼 수 있습니다.

 

Intermediate IP 주소에 새로운 주소들이 표시되면, 백엔드에 WAF가 동작할 준비가 된 것입니다.

 

 

WAF 동작 테스트

  1. 로컬 테스트를 위해, hosts 파일 편집하기 WAF 설정할 때 Add domains 화면에서 입력했던 주소는, 실제 사용 가능한 주소가 아닌, 테스트 주소입니다. 공용 DNS를 통해서는tencentcloud.com 주소가 IP주소로 변환(resolve) 되지 않습니다. hosts 파일을 직접 수정하는 방법으로, 로컬 영역에서 테스트를 수행 해 보겠습니다.

Windows 환경에서는 아래 파일을 관리자 권한으로 편집합니다.

C:\Windows\System32\drivers\etc\hosts

 

Linux 환경에서는 아래 파일을 root 권한으로 편집합니다.

/etc/hosts

 

hosts 파일 마지막에 다음을 추가 합니다.

WAF의VIP주소  waf.tencentcloud.com

 

예를 들어, 이번 테스트에서 생성한 WAF의 VIP 주소는 106.53.140.61 이므로, hosts 파일에는 다음과 같이 추가했습니다.

106.53.140.61  waf.tencentcloud.co.kr

 

 

Tip  hosts 파일에 입력하는 주소는, WAF의 VIP 주소입니다. CLB의 VIP가 아닙니다.  혼동하기 쉬우니 주의하세요.

 

  1. WAF 정상 동작 확인하기

WAF가 정상 동작하는지 먼저 확인해야 합니다. WAF의 VIP 주소를 브라우저 주소 창에 입력 해 봅니다.  Hello, Tencent Cloud cvm1! 또는 Hello, Tencent Cloud cvm2! 메시지가 나타나면, WAF를 통해 백엔드의 CLB로 트래픽이 전달되고 있는 것입니다.

 

  1. 비정상 HTTP 요청을 보내보기

브라우저 주소 창에, 다음과 같이 SQL-Injection을 시도하는 HTTP GET 요청을 입력하고 전송합니다.

 

http://waf.tencentcloud.com/index.html?username=%27%20or%201=1

 

 

접근 요청이 차단되었다는 안내 메시지가 나타나면, WAF 가 잘 동작하고 있다는 의미입니다.

 

 

수고하셨습니다. 여기까지 텐센트 클라우드를 사용하여, Load Balancer와 Web Application Firewall을 구성하고 동작을 확인 해 보았습니다.

기술 블로그 내용 중에 궁금한 점이 있다면, 질문하기를 통해 문의 해 주세요.

 

 

 

 

 

 

참고링크