[aws] EC2 인스턴스에 HTTPS 적용 (elb:로드밸런서:대상그룹)

2024. 1. 9. 13:59cloud/aws

AWS EC2 SSL 적용하기

 

AWS EC2에 HTTPS (SSL)을 적용하고자 한다.
적용하기 위해서는 AWS에서 필요한 요소들은 아래와같다.
Elastic Load Balancing (ELB) / 로드밸런서 / 대상그룹 / Route53 / ACM / 도메인구입

 

본작업을 하기전에 아래와 같이 Route53과 ACM작업 도메인 구입등의 선행 작업이 필요하다.

아래 포스팅은 외부도메인을 발급받고 CNAME을 연동하고 AWS 인증서까지 발급받는 과정이다.

 

https://legioncode.tistory.com/entry/aws-Route53-ACM-%EC%99%B8%EB%B6%80%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%97%B0%EB%8F%99

 

[aws] Route53 : ACM 외부도메인 연동

AWS Route53 ACM 적용 AWS에서 도메인을 구매할경우 co.kr은 지원이 되지 않는다. 가비아 또는 후이즈 사이트에서 도메인을 구매한후 aws에 적용하는 포스팅을 해보도록 하겠다. 필요한 서비스로는 aws r

legioncode.tistory.com

 


 

아래 아키텍처 기준으로 SSL 적용을 해보도록 하겠다.

SSL 아키텍처
SSL 아키텍처

 

1. 대상그룹생성

  • AWS의 EC2 메뉴로 들어간다음 아래쪽에보면 대상그룹 이라는 메뉴가있다.
  • (EC2 > 로드 밸런싱 > 대상 그룹)
  • 대상그룹생성 버튼을 클릭한다.
  • 대상유형은 인스턴스 를선택하고 대상그룹 이름은 "프로젝트명-target" 이라 생성하였다.
  • 만약 Spring-MVC같은 단일소스라면 target은 하나만 생성하고, 백엔드와 프론트엔드가 분리되어 있다면 대상그룹을 두개생성한다. (예시 backend-target-8080 / frontend-target-80)

대상그룹 기본구성
대상그룹 기본구성
프로토콜 및 IP설정
프로토콜 및 IP설정
상태검사
상태검사

//만약 상태검사경로를 "/" 하였으나 unhealth로 표현되거나 인식이 되지 않을경우 별도의 경로생성한다.
//그리고 아래와 같이 nginx에서 처리를 하던지 컨트롤러 소스단에서 처리한다.

// nginx.conf 예시
http {
   ...
   server {
        ...
       if ($request_uri = '/healthcheck'){
           return 200 'OK';
       }
       ...

 

고급 상태 검사 설정
고급 상태 검사 설정
대상그룹 입력완료
대상그룹 입력완료

 

2. 대상그룹 등록 및 완료

  • 해당대상그룹을 선택하고 포트는 80으로 디폴트, 그리고 "아래에 보류 중인 것으로 포함" 버튼을 클릭한다.

대상등록
대상등록
대상그룹 생성완료
대상그룹 생성완료
생성된 대상그룹 목록
생성된 대상그룹 목록

 

3. 로드밸런서 생성하기

  • 대상그룹 작업을 완료하였다면 (EC2 > 로드 밸런싱 > 로드밸런서) 메뉴로 이동한다.
  • 로드밸런서 생성 버튼을 클릭한다. 위에서 작업한 대상그룹과 연결을 위한 작업이다.

로드밸런서 생성
로드밸런서 생성
로드밸런서 생성하기
로드밸런서 생성하기

 

  • 로드밸런서 이름의 경우 본인은 "프로젝트명-alb"로 입력하였다.
  • 인터넷으로 통신하기때문에 체계는 인터넷 경계, IP주소유형은 IPv4로 선택한다.

로드밸런서 기본구성
로드밸런서 기본구성

 

  • 네트워크 매핑의경우 a,b,c,d 4개의 서브넷을 선택할수있다.
  • VPC생성을 통해서 서브넷을 생성하였다면 해당 VPC서브넷에 맞게 선택해야한다.
  • 지금은 기본VPC를 사용중이라 2개이상만 선택하면된다.
  • 본인은 a와 c를 선택하였다.

로드밸런서 네트워크 매핑
로드밸런서 네트워크 매핑

 

  • 보안그룹의 경우 미리 생성했던 보안그룹을 추가한다.
  • 추후에 적용할 개발소스는 spring mvc 기반의 소스라 기본적으로 아래와 같이 포트가 인바운드 되어있다.

로드밸런서 보안그룹
로드밸런서 보안그룹

 

  • 리스너 및 라우팅 에서는 80포트와 443포트 두개의 리스너를 생성해야한다.
  • 먼저 아래와 같이 80포트를 설정하고 앞에서 생성한 "프로젝트명-target" 의 대상그룹을 선택한다.
  • 그리고 443포트 리스너를 추가하기 위해 리스너 추가 버튼을 클릭한다.

로드밸런서 HTTP 리스너생성
로드밸런서 HTTP 리스너생성
로드밸런서 HTTPS 리스너생성
로드밸런서 HTTPS 리스너생성

 

  • 최근 보안정책이 변경되었다. AWS에서 권장하는 ~~2021-06 으로 선택한다.
  • 인증서소스의 경우 ACM에서 가져오기 한다.
  • ACM선택의 경우 해당 포스팅 제일위의 링크작업이 선행되어야 한다.  Route53 : ACM 외부도메인 연동

로드밸런서 보안 리스너 설정
로드밸런서 보안 리스너 설정

 

  • 위에서 보안리스너 설정을 하고나면 추가서비스 / 로드밸런서 태그 입력폼이 있다. 이부분은 넘어간다.
  • 모든작업이 완료되고 아래 로드 밸런서 생성 버튼을 클릭한다.

로드밸런서 생성하기 마지막 단계
로드밸런서 생성하기 마지막 단계

 

  • 정상적으로 로드밸런서가 생성된것을 확인할수 있다.
  • 리스너 규칙 80과 443이 대상그룹과 정상적으로 매칭되어있다.

로그밸런서 생성확인
로그밸런서 생성확인

 

4. Route53에서 레코드생성

  • 마지막으로 Route53으로 이동하여 레코드를 생성해야한다.
  • 즉 www.도메인.co.kr을 적용하는 작업이 남아있다.
  • 아래그림처럼 해당도메인을 클릭한다.

Route53 레코드 목록
Route53 레코드 목록
Route53 레코드생성하기
Route53 레코드생성하기

 

  • 레코드 이름에는 www를 입력한다.
  • 만약 레코드 이름에 서브도메인을 사용해야 한다면 api 또는 admin 등의 서브도메인명을 입력하면 된다.
  • 레코드 유형은 A유형으로 선택한다.
  • 별칭토클을 선택하야 활성화 시키고 아래와 같이 설정한다.
  • 리전의 경우 서울이든 도쿄든 선택사항이며 아래 alb는 앞에서 생성한 것을 선택한다.

Route53 레코드생성 완료
Route53 레코드생성 완료

 

 

5. 최종확인 및 점검

  • acm확인 / Route53확인 / 대상그룹 확인을 해본다.
  • 정상적으로 셋팅되어 있다면 아래와 같이 표현된다.

acm 확인
acm 확인
route53 확인
route53 확인
대상그룹 확인
대상그룹 확인

 

6. SSL적용확인

ssl 적용확인
ssl 적용확인