AWS ELB

LUNIA·2024년 9월 16일
0

Weekly I Learned(WIL)

목록 보기
3/4
post-thumbnail

ELB(Elastic Load Balancer)란 ?

정의

트래픽(부하)을 적절하게 분배해주는 장치이다.

로드 밸런서(Load Balancer) : 트래픽(부하)을 적절하게 분배해주는 장치
따라서, 서버를 2대 이상 운영할 때 ELB를 필수적으로 도입하게 된다.

ELB의 부가 기능, SSL/TLS(HTTPS)

  • SSL / TLS 란?

    HTTP를 HTTPS로 바꿔주는 인증서로 ELB의 부가기능이다. 이를 통하여 HTTP가 아닌 HTTPS로 통신할 수 있게 만들어 준다.

HTTPS

왜 HTTPS를 적용하는가
1. 보안문제
HTTPS는 데이터를 서버와 주고 받을 때 암호화를 시켜서 통신을 한다. 암호화를 하지 않는다면 데이터를 중간에서 가로채서 해킹을 할 수 있다. 즉, HTTP 통신은 HTTPS 통신 보다 보안에 취약하다는 점이다.

2. 사용자 이탈
브라우저에 의해 HTTP 통신을 사용하는 주소의 경우 이 사이트는 보안 연결(HTTPS)이 사용되지 않았습니다. 라는 문구가 보이며 사용자로 하여금 신뢰감을 줄 수 없다. 즉, 이는 사용자의 이탈과 직결되기 때문에 HTTPS를 현업에서는 반드시 사용하게 된다.

HTTPS 인증을 받은 웹사이트의 경우 백엔드 서버와 통신하기 위해서는 백엔드 서버의 주소 또한 HTTPS 인증을 받아야한다. 따라서, 백엔드 서버와 통신할 때도 IP 주소로 통신하는 것이 아니라, HTTPS 인증을 받은 도메인 주소로 통신을 하게 된다.

도메인을 구성할 때 대표적인 도메인 예시
웹사이트 주소 : https://devLunia1109.com
백엔드 API 주소 : https://api.devLunia1109.com

ELB를 활용한 아키텍처

  • 아키텍처 ?
    컴퓨터를 기능면에서 본 구성 방식. 기억 장치의 번지 방식, 입출력 장치의 구성 방식 등을 가리키는 용어로 개발에서의 전체적인 그림을 의미한다.

1. ELB 도입 이전의 아키텍처 : EC2(백엔드 서버)에 사용자가 직접 요청해서 응답을 받아가는 형식

2. ELB 도입 이후의 아키텍처 : EC2(백엔드 서버)에 직접 요청하는 것이 아니라, ELB에 요청을 보낼 경우 ELB에서 응답을 받아가는 형식

ELB도 하나의 컴퓨터이다. 고유의 IP, 도메인을 갖고 있다. HTTPS를 ELB 컴퓨터에 적용시킴으로써 보안적인 문제점을 해결하는 것에 의의가 있다.

ELB 세팅하기

  1. EC2 검색 후 좌측 메뉴에서 로드 밸런서 항목을 클릭
  2. 리전(Region) 확인 후 로드 밸런서 생성
  3. HTTP, HTTPS 트래픽을 사용하는 애플리케이션을 위한 로드밸런서인 Application Load Balancer 선택
  4. 로드 밸런서 기본 구성 선택
  • 로드 밸런서 이름, 체계(프라이빗 IP주소 혹은 퍼블릿 서브넷), IP주소 유형(IPv4, IPv4와 IPv6, IPv6) 선택

    IPv4와 IPv6
    IPv4는 120.120.0.5와 같은 IP주소를 의미한다. 그러나, IPv4 주소가 고갈될 것이 예상되어 IPv6의 개념이 도입되었다. IPv6의 예시 주소의 경우 2dfc:0:0:0:0217:cbff:fe8c:0과 같다.

  1. 네트워크 매핑 설정하기 : 로드 밸런서가 어떠한 가용 영역으로만 트래픽을 보낼 것인지에 대한 설정
  2. 보안 그룹 설정하기 : EC2의 보안 그룹이 아니라 ELB에 대한 보안그룹을 추가적으로 설정해준다.

    EC2 메뉴의 보안그룹 탭에서 보안 그룹 생성을 클릭 후 아래의 내용(보안 그룹 이름, 인바운드 규칙, 아웃바운드 규칙)을 설정한다. 현재는 IPv4에 대한 ELB를 생성 중에 있음으로 소스에 대해서는 Anything Ipv4를 선택

    다시 ELB를 생성하는 브라우저에서 아래와 같이 생성한 보안 그룹을 선택한다.
  3. 리스너 및 라우팅 : ELB에 들어온 요청을 어떠한 EC2에 전달 할 것인지를 설정하는 영역

    상태 검사 설정 이후 다음 버튼을 클릭한다.

    백엔드 서버 인스턴스의 Port를 확인 후(현재는 80번 포트로 HTTP의 well-known-port 사용) 아래에 보유 중인 것으로 포함 버튼을 클릭하면 대상 보기 란에서 잘 추가가 됐는지 확인 후 대상 그룹 생성하기 버튼을 클릭한다.

대상 그룹을 생성 한 후 다시 리스너 및 라우팅을 설정하는 ELB 생성 브라우저로 이동한 후 새로 고침 버튼을 눌러 대상 그룹을 선택

현재 까지 리스너 및 라우팅 설정 한 줄 요약
HTTP 통신의 80번 포트로 오는 요청에 대해서는 현재 설정한 대상 그룹의 인스턴스로 보내겠다.

  1. 이후 밑의 세부 사항은 아직 신경쓰지 않고 로드 밸런서 생성하기 버튼 클릭

Health-chcek API 추가하기

const express = require('express');
const app = express();
const port = 80;

app.get('/', (req, res) => {
  res.send(`Hello World!`);
})

// ★ GET /health 요청에 대해 상태코드 200으로 응답하는 API
app.get('/health', (req, res) => {
  res.status(200).send("Success Heatlth Check");
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

ELB에 도메인 연결하기

기존 방식은 EC2에 직접 Domain을 연결했다면 이제는 ELB에 Domain을 연결한다.
Route 53을 활용하여 연결할 수도 있지만... 현재는 실습 및 연습 중이므로 https://xn--220b31d95hq8o.xn--3e0b707e/ 을 활용하여 연습한다.




HTTPS 인증서 발급받기

AWS Certificate Manager를 활용한다.


이후 Route 53에서 구매하고 연결한 Domain 주소를 색칠된 영역에 작성해준다.

취업 하면 반드시 내 서버를 만들겠어...

이후에 요청 버튼을 클릭한 후 새로 고침을 하게된다면 인증서가 생기며 검증 대기 중 이라는 상태가 된다.

해당 상태의 내용은 이 도메인의 주인이 나 인지 확인하는 과정으로 현재 인증서 창에 있는 CNAME의 값을 Route 53에서 제공하는 설정에서 CNAME 이름과 값에 작성할 것을 요구받는 내용이다.

따라서, Route 53에서 레코드 생성 버튼을 클릭 한 후 레코드 생성 버튼을 클릭할 경우 DNS 레코드가 생성됨을 확인하는 문구가 상단에 뜨게 된다.

등록을 했다면 잠시 후(1~10분) 상태가 검증 대기 중에서 성공 혹은 발급됨 이라고 작성된다.


ELB에 HTTPS 적용하기

  1. EC2를 통해 로드 밸런서 탭의 ELB를 들어간 후 하단의 리스너 및 규칙 탭에서 리스너 추가 버튼을 클릭한다.
  2. 기존에 설정한 HTTP로 설정된 프로토콜의 설정을 HTTPS로 변경한 후 대상 그룹을 기존에 설정한 대상그룹을 추가한다.
  3. 보안 리스너 설정에서 나머지는 건들지 말고 인증서(ACM에서) 항목에 위에서 생성한 인증서를 선택한 후 추가 버튼을 클릭한다.
  4. 단, 현재 까지의 설정의 경우에는 http://설정한domain 주소 를 통해서도 접근이 허용되는 보안 상에 문제가 있기에 HTTP 프로토콜로 접근하는 경우 HTTPS로 리다이렉션을 시킬 수 있도록 추가적인 설정을 한다.
    4-1. 기존의 HTTP 리스너를 삭제
    4-2. 리스너 추가
    4-3. HTTP 프로토콜에 대해 URL로 리디렉션항목을 클릭 후 하단 프로토콜을 HTTPS 프로토콜로 설정
    4-4. 추가버튼 클릭

ELB 사용 비용 없이 HTTPS에 대한 인증하기

Nginx, certbot을 EC2에 설치 및 설정에 대한 수정을 통해 가능하다.

profile
꾸준한 노력으로 문제를 해결하는 자기 주도적 개발자의 Velog입니다.

0개의 댓글