[AWS] Https 적용하기
AWS - HTTPS 적용: 로드밸런서와 ACM을 활용한 보안 통신 설정
✅소개
AWS(Amazon Web Services) 환경에서 웹 애플리케이션을 운영할 때, 보안 통신인 HTTPS를 적용하는 것은 중요한 과정 중 하나입니다. 이를 통해 데이터의 안전한 전송이 보장되고 사용자들의 개인 정보를 보호할 수 있습니다. 이번 글에서는 AWS의 로드밸런서와 ACM(AWS Certificate Manager)을 활용하여 어떻게 HTTPS를 설정하는지에 대해 알아보겠습니다.
✅호스팅 영역 생성
먼저 AWS 콘솔에서 Route 53에 들어가서 호스팅 영역을 생성합니다.
그 다음 호스팅 영역 생성
을 합니다.
여기에 도메인 입력을 입력합니다. 저는 가비아에서 도메인을 샀습니다. 유형은 퍼블릭 호스팅 영역으로 했습니다. 그리고 생성합니다. 생성된 호스팅 영역에 들어가면 기존 레코드가 있을 겁니다. 레코드 생성
버튼을 눌러줍니다.
레코드 이름은 빈칸으로 두고 값에 EC2 퍼블릭 IP(EIP)를 기입하고 레코드를 생성
합니다.
여기에서 NS(네임서버)가 있는데 값/트래픽 라우팅 대상을 보면 4개의 네임서버가 보입니다. 마지막 온점(.) 을 뺀 상태로 가비아에서 순서대로 네임서버를 수정해줍니다.
1차부터 4차까지 순서대로 입력합니다.
✅ACM에서 SSL/TLS 인증서 발급
ACM은 AWS에서 제공하는 인증서 관리 서비스로, 무료로 SSL/TLS 인증서를 발급받을 수 있습니다.
📌ACM에서 SSL/TLS 인증서 발급 단계
- AWS 콘솔에서 ACM으로 이동: 서비스 메뉴에서 ACM을 선택하여 ACM 대시보드로 이동합니다.
- 인증서 요청: “인증서 요청”을 클릭하고 도메인을 추가하여 요청합니다.
- DNS 검증: 요청한 도메인의 DNS 레코드를 생성하여 ACM이 확인할 수 있도록 합니다.
- 인증서 발급 완료: DNS 검증이 완료되면 SSL/TLS 인증서가 발급됩니다.
다시 AWS로 돌아와서 ACM(Amazon Certificate manager)로 가서 인증서 요청을 해야합니다.
ACM메뉴로 들어가서 요청
버튼 클릭합니다.
퍼블릭 인증서로 다음
버튼을 누릅니다.
정규화된 도메인 이름이니 유동성 있게 와일드 카드를 써서
(*.도메인 이름, *.example.com)
로 합니다. 그리고 요청
버튼을 누르고 시간이 지나면
이렇게 발급됨 상태가 됩니다.
✅타겟 그룹 및 보안 그룹 생성
로드밸런서에서 사용하는 보안 그룹과 네트워크 ACL을 적절히 설정해야 합니다. 필요한 포트(일반적으로 443)가 열려 있고, 필요한 IP 주소로부터의 액세스만 허용되도록 구성합니다.
먼저 EC2 → 로드 밸런싱 → 대상그룹으로 들어가줍니다.
대상 그룹 생성
버튼을 누릅니다.
대상 그룹 이름과 프로토콜: 포트를 입력합니다. 여기에서는 제 스프링부트 어플리케이션이 9090포트로 되어 있기 때문에 http: 9090으로 합니다.
VPC와 프로토콜 버전은 기본값으로 둡니다. 상태 검사는 요청을 보내고 응답을 받는(연결이 잘 됐는지) 테스트를 합니다.
1
2
3
4
5
6
7
8
@RestController
public class HealthController {
@GetMapping
public String healthCheck(){
return "health ok-test";
}
}
이렇게 HealthController를 아무데나 만들고 url 매핑설정을 안 했기 때문에 저기 위에 기본 상태 검사 경로 /
로 들어올 수 있고 응답이 되면 health ok-test가 반환이 되겠죠? 그리고 다음
버튼 누릅니다.
그러면 이렇게 존재하는 인스턴스 목록이 나오고 체크를 하면 아래에 보류 중인 것으로 포함
버튼이 활성화 되고 어플리케이션 실행 포트를 입력하고 저 버튼을 눌러줍니다.
그럼 아래에 대상 그룹에 포함된 인스턴스가 보일겁니다. https 적용하기 때문에 인스턴스 보안그룹에 인바운드로 https 설정이 되어있어야 합니다. 그리고 대상 그룹 생성
버튼 누르면 대상 그룹이 생성이 되고 클릭하여 들어가면
이렇게 아까 상태 검사 경로로 들어가서 응답이 잘 됐는지 확인할 수 있습니다.
✅AWS 로드밸런서 생성
로드밸런서는 트래픽을 여러 EC2 인스턴스로 분산시켜주는 역할을 합니다. HTTPS를 적용하기 위해서는 먼저 로드밸런서를 생성해야 합니다.
📌로드밸런서 생성 단계
- AWS 콘솔에 로그인: AWS Management Console에 로그인합니다.
- EC2 대시보드로 이동: 서비스 메뉴에서 EC2를 선택하여 EC2 대시보드로 이동합니다.
- 로드밸런서 생성: “로드밸런서” 섹션에서 “로드밸런서 생성”을 클릭합니다.
- 로드밸런서 유형 선택: Application Load Balancer(ALB) 유형을 선택합니다.
- 리스너 추가: “리스너 및 정책 구성” 단계에서 HTTPS 프로토콜을 선택하고 인증서를 추가합니다.
EC2 → 로드 밸런싱 → 로드밸런서로 들어옵니다.
저기서 로드 밸런서 생성
을 누릅니다.
맨왼쪽 유형을 생성합니다.
이름은 형식을 지켜 마음 대로 입력합니다. 체계나 IP유형은 그대로 합니다.
네트워크 가용영역을 설정해야 하는데, 인스턴스가 속한 가용영역을 꼭 체크해주세요. 귀찮으시면 전체를 체크해도 상관없습니다.
보안 그룹은 디폴트 없애고 본인의 인스턴스에 적용된 보안그룹을 선택합니다.
리스너 및 라우팅인데 http 80은 기본으로 되어있습니다. 리스너를 하나 추가하여 https를 선택하고 대상 그룹은 아까 만들었던 대상그룹을 선택해줍니다.
보안 리스너는 아까 ACM에서 만들었던 인증서를 선택해줍니다. 그리고 로드 밸런서 생성
버튼을 눌러줍시다!
✅API 레코드 추가
다시 Route 53 메뉴로 돌아와서 생성한 호스팅 영역으로 들어갑니다.
여기서 subdomain을 api로 했습니다. 값에는 EIP입력했구요 레코드 생성!
https로 api.도메인이름 으로 send 눌렀을 때 아까 health check 컨트롤러에서 응답을 잘 하네요!
Comments powered by Disqus.