* HTTPS, SSL을 왜 사용할까?

Certificate Manager를 통한 SSL 인증서 발급

image-20231026194127360

  • AWS Certificate Manager - 인증서 요청 - 퍼블릭 인증서 요청 - [다음] 클릭

image-20231026194422350

  • [완전히 정규화된 도메인 이름] 입력 - [요청] 클릭

# AWS에서 미리 구매한 도메인이 있어야 한다!

image-20231026195225424

  • [인증서 ID] 클릭

image-20231026195520304

  • [CNAME 이름]에 값이 있는지 확인(없으면 잠시 후 새로고침) - [Route 53에서 레코드 생성] 클릭

image-20231026200006343

  • 도메인 선택 - [레코드 생성] 클릭 - 잠시 기다리면 인증서 상태가 [발급됨]으로 변함

로드 밸런서 생성

image-20231026200401890

  • EC2 - 로드 밸런서 - [로드 밸런서 생성] 클릭

image-20231026200502229

  • Application Load Balancer [생성] 클릭

image-20231026202727499

  • [로드 밸런서 이름] 입력

image-20231026202919913

  • [보안 그룹] 선택
    • 모든 ip에 대해 80, 8080, 443 포트가 열려야한다.

대상 그룹 생성

# 리스너에서 선택할 대상 그룹을 다른 페이지에서 생성 후 진행할 예정

image-20231026203222945

  • [리스너 및 라우팅] - [대상 그룹 생성] 클릭

image-20231026203553533

  • [기본 구성] - [대상 그룹 이름] 입력

image-20231026203730285

  • [상태 검사] - [상태 검사 경로] 입력
    • 추후 서버에 해당 경로로 요청을 보냈을 때 200번 응답을 보내는 api를 구현한다
	@RequestMapping("/aws")
    public ResponseEntity<String> handleAwsRequest() {
        return new ResponseEntity<>("GET 요청이 성공적으로 처리되었습니다.", HttpStatus.OK);
    }
  • [다음] 클릭

image-20231026204316178

  • 인스턴스 선택 - [80]포트 입력 - [아래에 보류 중인 것으로 포함] 클릭
  • 인스턴스 선택 - [8080]포트 입력 - [아래에 보류 중인 것으로 포함] 클릭
  • 인스턴스 선택 - [443]포트 입력 - [아래에 보류 중인 것으로 포함] 클릭
  • [대상 그룹 생성] 클릭

image-20231026205232408

  • EC2 - 대상 그룹 - [이름] 클릭

image-20231026205405285

  • 영역 부분 확인하기

# 리스너에서 선택할 대상 그룹 생성 완료, 다시 로드 밸런서 생성하던 화면으로 이동!

image-20231026205707470

  • 위로 스크롤 - [네트워크 매핑] - 위에서 확인한 영역에 맞는 [매핑] 선택

image-20231026205939006

  • [프로토콜] HTTP 선택 - [포트] 80 선택 - [기본 작업] 생성한 대상 그룹 선택(대상 그룹 안 보이면 새로고침 버튼)
  • [리스너 태그 추가] 클릭 - [프로토콜] HTTPS 선택 - [포트] 443 선택 - [기본 작업] 생성한 대상 그룹 선택

image-20231026210258533

  • [보안 리스너 설정] - 인증서 선택

  • [로드 밸런서 생성] 클릭

image-20231026211637294

  • EC2 - 로드 밸런서 - 목록에서 생성한 로드 밸런서 선택 - 아래 [리스너 및 규칙] 탭에서 80포트의 [규칙]을 선택

image-20231026211811370

  • [리스너 규칙] 탭에서 [규칙 추가] 클릭

image-20231026211938973

  • [Name] 입력 - [다음] 클릭

image-20231026212118329

  • [조건 추가] 클릭

image-20231026212224697

  • [규칙 조건 유형]에 호스트 헤더 선택 - [호스트 헤더]에 도메인 이름 입력 - [확인] 클릭
    • (호스트 헤더 = 도메인 이름)이라고 생각하면 된다.

image-20231026212425190

  • [다음] 클릭

image-20231026212522466

  • [URL로 리디렉션] 선택 - 포트에 [443]입력 - [다음] 클릭

image-20231026212707123

  • [우선 순위] 입력 - [다음] 클릭 - [생성] 클릭

image-20231026213028909

  • EC2 - 로드 밸런서 - 목록에서 생성한 로드 밸런서 선택 - 아래 [리스너 및 규칙] 탭에서 443포트의 [규칙]을 선택

image-20231026211811370

  • [리스너 규칙] 탭에서 [규칙 추가] 클릭

image-20231026211938973

  • [Name] 입력 - [다음] 클릭

image-20231026212118329

  • [조건 추가] 클릭

image-20231026212224697

  • [규칙 조건 유형]에 호스트 헤더 선택 - [호스트 헤더]에 도메인 이름 입력 - [확인] 클릭

image-20231026212425190

  • [다음] 클릭

image-20231026213312252

  • [대상 그룹] 선택 - [다음] 클릭

image-20231026213525632

  • [우선 순위] 입력 - [다음] 클릭 - [생성] 클릭

Route 53과 로드 밸런서 연결하기

image-20231026213910363

  • Route 53 - 호스팅 영역 - 목록에서 호스팅 영역 이름 선택
  • 유형이 [A]인 레코드 선택 - [레코드 편집] 클릭
  • [별칭] 활성화 - 트래픽 라우팅 대상에서 [Application/Classic Load Balancer에 대한 별칭] 선택 - [아시아 태평양(서울)] 선택 - 로드밸런서 선택 - [저장] 클릭

HTTPS 적용 완료! 이제 [https://도메인]으로 접속하면 (안) 된다… 원래 돼야하는데 안 되더라… 아래 내용을 참고하자!

=> 안 해도 된다,, 시간 기다리면 열린다.. 502에러 나면 새로고침하면서 기다리자…

서버 방화벽 열기

  • putty로 EC2 접속 후 아래 명령어 수행

## root로 로그인
[ec2-user@ip-192-168-999-999 ~]$ sudo su

## firewalld 깔려있는지 확인
[root@ip-192-168-999-999 ec2-user]# firewall-cmd --version

## firewalld 깔려 있으면 종료
[root@ip-192-168-999-999 ec2-user]# systemctl stop firewalld
[root@ip-192-168-999-999 ec2-user]# systemctl mask firewalld

## 시작 시 부팅되는 서비스 목록 조회 ==> 방화벽 관련 서비스가 있으면 종료 시키자!
[root@ip-192-168-999-999 ec2-user]# systemctl list-unit-files --type=service | grep enabled

## iptables 서비스 설치
[root@ip-192-168-999-999 ec2-user]# yum install iptables
[root@ip-192-168-999-999 ec2-user]# yum install iptables-services

## iptables 설치 확인
[root@ip-192-168-999-999 ec2-user]# rpm -qa | grep iptables

## iptables 서비스 종료
[root@ip-192-168-999-999 ec2-user]# systemctl stop iptables

## iptables 서비스 작동 확인
[root@ip-192-168-999-999 ec2-user]# systemctl status iptables

## 포트 열기
[root@ip-192-168-999-999 ec2-user]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
[root@ip-192-168-999-999 ec2-user]# iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
[root@ip-192-168-999-999 ec2-user]# iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

## 방화벽 규칙을 조회
[root@ip-192-168-999-999 ec2-user]# sudo iptables -L -v -n

## 포트 포워딩
[root@ip-192-168-999-999 ec2-user]# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
[root@ip-192-168-999-999 ec2-user]# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

## 포트 포워딩 조회
[root@ip-192-168-999-999 ec2-user]# sudo iptables -t nat -L PREROUTING

참고

태그:

카테고리:

업데이트: