
aws로 실제 서비스를 배포했을때 사용했었던 가비아 도메인을 Route53에 등록해서 HTTPS적용을 해보겠다
먼저 Route53에서 호스팅 영역 구성에 들어가 연결할 도메인을 입력해주자

생성했다면 레코드 유형에 NS,SOA로 생성된걸 확인할 수있다

이제 가비아에 네임서버 설정에서 각 NS를 1,2,3,4차에 입력해준다

입력이 완료되었다면 AWS Certificate Manager에 들어간다
여기서 ACM의 기능으론
인증서를 중앙에서 관리
AWS Certificate Manager(ACM)를 사용하면 AWS Management Console, AWS CLI 또는 ACM API를 통해 중앙에서 SSL/TLS 인증서를 손쉽게 관리할 수 있다. 또한 AWS CloudTrail 로그를 검토하여 각 인증서의 사용을 감사할 수 있다.
안전한 키 관리
ACM은 SSL/TLS 인증서에 사용되는 프라이빗 키를 보호하고 관리하도록 설계되었다. 강력한 암호화 및 키 관리 모범 사례를 사용하여 프라이빗 키를 보호하고 저장한다.
AWS 서비스 통합
ACM은 다른 AWS 서비스와 통합되므로, SSL/TLS 인증서를 프로비저닝하고 Elastic Load Balancer, Amazon CloudFront 배포 및 Amazon API Gateway와 함께 배포할 수 있으며 ACM을 AWS Elastic Beanstalk 및 AWS CloudFormation과 연동하여 이메일 검증 공인 인증서를 사용할 수 있으므로 공인 인증서를 관리하고 AWS 클라우드의 애플리케이션에 사용하는 데 도움이된다. AWS 리소스와 함께 인증서를 배포하려면, AWS Management Console의 드롭다운 목록에서 원하는 인증서를 선택하기만 하면 된다. 또는 AWS API나 CLI를 호출하여 인증서를 리소스와 연결하는 방법도 있다.

인증서 요청을 하기위해 Route53에 등록한 도메인을 입력하고 DNS 검증을 선택한다.
DNS 검증은 ACM에서 CNAME을 발급해주고 이 발급된 레코드를 가비아에 등록해줘야한다. 이는 우리가 소요하고 있는 DNS에 대해 권한이 있는지를 확인하는 절차로 보면 되겠다.

인증서 요청을 했다면 검증 대기중인 인증서를 확인 할 수있는데 검증이 완료되기 위해서는 CNAME 등록이 필요하다
아래 도메인을 확인해보면 CNAME 정보를 확인할 수 있다

Route 53을 확인해본다면 CNAME이 잘 등록된걸 확인 할 수있다

20분정도 기다리게된다면 인증서가 발급된걸 확인할 수있다

이제 ec2 인스턴스에 연결할 로드벨런서를 생성하고 위에서 발급받은 인증서를 설정해주려한다
여기서 ALB를 사용하겠다
사용자와 서버가 HTTPS를 이용하여 암호화 통신을 할 경우, SSL Handshake를 통한 암호화된 메시지를 전달해야 한다. 이러한 작업은 리소스 소모가 크며, 서버에 큰 부담이 된다. ALB를 채택하는 이유를 크게 2가지로 정리하면 다음과 같다.
- ALB는 HTTP의 Header, 요청 방법 등을 이용하여 사용자의 요청을 적절한 대상 그룹으로 라우팅(부하분산)을 쉽게 설정할 수 있는 특징을 지닌다.
- ALB에 SSL 인증서를 탑재함으로서 ALB가 대신하여 SSL 인증서를 이용하여 암호화 통신을 실시한다. 이를 통해 EC2 인스턴스의 부담을 줄일 수 있다.
ec2의 로드벨런서를 들어가서 ALB를 선택해주자


VPC는 인스턴스를 사용하고있는 VPC를 선택해주고 가용영역도 똑같이 선택해주자

보안그룹은 ec2보안그룹을 선택하고 리스너를 지정해주기위해 create target group을 클릭하자
Target Group 설정값
대상그룹의 EC2 포트들은 80으로 설정되어야 한다. HTTPS 통신(443)은 ALB가 진행하므로 EC2 인스턴스는 Plain Text 통신만 하면 되기에 80으로만 설정되어야 한다.

인스턴스를 선택하고 그룹 이름을 정하고 포트번호를 적어주어야하는데, 여기서 나는 서버에 80번 포트로 열어두었기 때문에 80을 적었다.각각 설정해둔 포트번호를 제대로 적어주어야 한다.

Health check - 대상 그룹에 설정한 포트로 health check 요청을 보내 설정한 정상 응답이 특정 횟수만큼 오면 해당 그룹은 정상동작 중, 응답이 조건에 맞게 오지 않으면 정상적으로 동작하지 않는 것으로 판단한다.
Health check paht는 로드 밸런서가 그룹에 Health Check를 보낼 경로를 적는다.

미리 생성 해놨던 인스턴스가보이고 아래에 create target group를 클릭한다면 HTTP target group가 생성된다

연결할 인스턴스를 선택하고 하단에 include as pending below를 눌러주자
타겟그룹을 만들어줬으니 새로고침을 해본다면 아까 만들었던 타겟그룹을 선택할 수있다.

클라이언트로부터 로드밸런서가 받을 리스너의 요청 프로토콜, 포트 및 보안 설정
https 요청을 하기 위해 https protocol 과 443 포트를 선택하고 target group 으로 이전에 생성한 그룹을 선택한다.
보안 정책은 기본 설정을 권장하고 SSL 인증서도 이전에 생성한 인증서를 선택한다.
그리고 Create load balancer 버튼을 클릭한다.

다시 route 53으로 이동해서 레코드를 생성해주자

route 53에 등록해놓았던 도메인을 Route53에서 ELB와 연결해보자
Application/Classic LoadBalancer에 대한 별칭을 클릭하여주고
자신의 ec2가 있는 리전을 선택하자
그 밑에는 방금 만든 로드 밸런서를 선택하고 단순 레코드 정의를 하고 레코드 생성을 완료한다.

여기까지 해도 HTTPS로 문제없이 사용가능하지만 HTTP로 접근해도 HTTP로 접속이 가능하다 그렇기 때문에 HTTP에 접속을 하게되더라도 HTTPS로 리디렉션해주자 로드벨런서로 이동해서 하단 HTTP:80을 선택하고 편집을 눌러주자

기존에 있었던건 삭제 하고HTTPS:443으로 리디렉션하고 저장해주자 그렇게된다면 HTTP로접근해도 자동으로 HTTPS로 리디렉션이되는걸 확인할 수 있다


'DevOps > AWS' 카테고리의 다른 글
[AWS] SAM으로 API Gateway와 lambda, dynamoDB 배포 (0) | 2023.02.03 |
---|---|
[AWS] GitHub Actions로 AWS ECS 배포 자동화 하기 (0) | 2023.01.20 |
[AWS] GitHub Actions으로 private ECR에 이미지 push 자동화하기 (0) | 2023.01.18 |
[AWS] AWS ECS 개념 (0) | 2023.01.10 |
[AWS] VPC구성하기(퍼블릭 서브넷, 프라이빗 서브넷) (0) | 2023.01.05 |