인프라

쉽고 간단한 백엔드 인프라, 배포부터 보안까지 (5) - Amazon Route 53 + AWS Certificate Manager(ACM) + 가비아

ppaekkom 2023. 9. 28. 15:41

https://github.com/fineman999/simple_spring_mvc

 

GitHub - fineman999/simple_spring_mvc: Amazon Elastic Beanstalk + Amazon Route 53 + ACM + 가비아 + Github Actions(CI/CD) + Am

Amazon Elastic Beanstalk + Amazon Route 53 + ACM + 가비아 + Github Actions(CI/CD) + Amazon RDS(MySQL) - GitHub - fineman999/simple_spring_mvc: Amazon Elastic Beanstalk + Amazon Route 53 + ACM + 가비아 + ...

github.com


목차

    서론

    지난 Step에서 AWS Elastic Beanstalk와 GitHub Actions을 통해 배포자동화 작업을 진행하였다. main에 push 될 때의 이벤트를 통해 트리거하는 방식으로 진행하였다.

    아직은 현재 주소에 접속하면 상단에 주의 요함이 뜨고, `이 사이트는 보안 연결(HTTPS)이 사용되지 않습니다.`라는 문구와 함께 주의 표시가 보이는 것을 알 수 있다.

    이번 Step에서는 Route 53, AWS Certificate Manager(ACM), 가비아(DNS)를 이용하여 보안 연결(HTTPS)을 시도해 보자.

     

    아키텍처

    아키텍처

     

    가비아

    가비아 사이트

    가비아에서 원하는 도메인을 구매할 수 있다.

    검색 창에 원하는 도메인을 입력해 보자.

     

    simple-spring-mvc

    위와 같이 현재 사용할 수 있는 도메인들을 추천해 준다.

    event를 하지만 1년이 지난 후 원래 가격을 지불해야 한다.

    우리는 간단한 토이 프로젝트를 할 것이기 때문에 제일 가격이 저렴한 걸 선택하자.

     

    550원

    결제 금액을 확인하고 결제하자.

     

    도메인

    조금 기다리면 도메인 등록이 완료되었습니다라는 메일을 받는다.

    My가비아에 접속하면 구매한 도메인을 확인할 수 있다.

     

    Amazon Route 53

    Amazon Route 53

    Amazon Route 53는 가용성과 확장성이 뛰어난 도메인 이름 시스템(DNS) 웹 서비스이다. 

    AWS 클라우드에서 애플리케이션을 배포하고 관리하는 데 AWS Elastic Beanstalk를 사용하는 경우, Amazon Route 53을 사용하여 도메인에 대한 DBS 트래픽을 신규 또는 기존 Elasitc Beanstalk 환경으로 라우팅 할 수 있다.

     

    Amazon Route 53 비용

    Amazon Route 53 같은 경우 처음 25개 호스팅 영역의 경우 월별 호스팅 영역당 0.50 USD 달러 비용이 발생한다. 한국 환율로 변경하면 월마다 약 784원 정도 발생하게 된다.

    그러니 주의하고 사용하자.

     

    Get Started

    이제 AWS 검색창에 Route 53을 검색하고 Get started를 클릭하자.

     

    Get started

    Creat hosted zones

    Create hosted Zone은 DNS 레코드를 저장하고 관리하는 공간을 만드는 작업을 의미한다. DNS(Domain Name System)은 도메인 이름을 IP 주소로 해석하는 역할을 한다. Route 53을 사용하면 이러한 DNS 레코드를 관리할 수 있다.

     

    Create hosted zones을 통해 새로운 호스팅 영역을 만들 수 있다. 호스팅 영역은 특정 도메인 이름에 대한 DNS 레코드 집합을 저장하는 공간이다. 각 호스팅 영역은 해당 도메인에 대한 DNS 정보를 관리한다.

     

    새로운 웹 사이트나 애플리케이션을 AWS 인프라에 배포할 때, 해당 서비스에 대한 DNS 레코드를 호스팅 영역에 추가하여 도메인을 서비스에 연결할 수 있다.

     

    Route 53 콘솔이나 API를 사용하여 호스팅 영역을 생성하고 필요한 DNS 레코드를 추가할 수 있다.

    Create hosted zones를 클릭 후 Get started를 클릭하자.

     

    Create hosted zone

    Create hosted zone

    도메인 이름을 입력하고 호스팅 영역을 생성하자.

     

    NS(Name Server)

     

    Records

    Route 53에서 NS 레코드는 도메인 이름에 대한 네임 서버 정보를 지정하는 레코드다. NS는 Name Server의 약어로, 특정 도메인에 대한 DNS 조회를 처리할 수 있는 네임 서버를 나타낸다.

     

    일반적으로 도메인을 등록한 등록 업체(예: 가비아)는 해당 도메인에 대한 기본 네임 서버 정보를 설정한다. 그러나 AWS Route 53에서 호스팅 영역을 생성하고 DNS 레코드를 관리할 때, 도메인의 네임 서버 정보를 직접 지정해야 한다.

     

    이번 과정에서는 AWS에서 생성한 해당 호스팅 영역에 대한 네임 서버 정보를 도메인 등록 업체에서 도메인의 네임 서버로 지정해야 한다. 이렇게 하면 해당 도메인의 DNS 조회 요청이 Route 53으로 전송되고, Route 53은 호스팅 영역에 설정된 레코드를 기반으로 요청을 처리할 수 있다.

     

    그럼 가비아 설정된 NS를 수정하자.

     

    가비아 수정

    로그인 후, My가비아에 들어가서 수정하고 싶은 도메인을 클릭하서 네임 서버 설정을 클릭하자.

    라우팅 대상이 되는 4개를 복사해서, 가비아의 네임 서버에 붙여놓자. (마지막에 있는 점(.)은 지우자)

     

    Route 53과 Elastic beanstalk 연결하기

    Create record

    Route 53과 Elastic beanstalk을 연결하기 위해 레코드를 생성하자.

     

    create Record

    레코드 타입의 경우, A 레코드 CNAME 레코드 모두 사용 가능하지만 Alias를 이용할 것이기 때문에 A 레코드를 선택하자.

    Alias 레코드를 사용하면 Elastic Beanstalk 환경을 직접 선택할 수 있다. 이렇게 하면 복잡한 IP 주소나 CNAME 설정을 수동으로 관리할 필요가 없어진다.

     

    또한 Alias 레코드를 사용하면 AWS 내부 네트워크에서 호스팅 된 서비스에 대한 연결을 설정할 수 있다. 이는 더 빠른 응답 시간과 더 낮은 대역폭 비용을 제공할 수 있다.

     

    *.simple-spring-mvc.shop 에서 앞에 오는 '*' 기호는 와일드카드 문자이다. 즉, 해당 도메인에 연결된 모든 서브도메인을 나타낸다.

    이런 방식으로 와일드카드 서브도메인을 사용하면 특정 서브도메인을 일일이 추가하지 않아도 되므로 동적인 서브 도메인 관리가 가능해진다.

     

     

    AWS Certificate Manager(ACM)

    ACM

    AWS Certificte Manager(ACM)를 사용하면 AWS 서비스 및 연결된 내부 리소스에 사용할 공인 및 사설 SSL/TLS 인증서를 프로비저닝, 관리 및 배포할 수 있다. ACM은 SSL/TLS 인증서를 구매, 업로드 및 갱신하는 데 드는 시간 소모적인 수동 프로세스를 대신 처리해 준다.

     

    Elastic Beanstalk 환경에 대한 사용자 지정 도메인 이름(DNS)을 구매하고 구성한 경우, HTTPS를 사용하여 사용자가 안전하게 웹 사이트에 연결할 수 있다.

     

    Elastic Beanstalk 환경에서 HTTPS를 사용하는 가장 간단한 방법은 환경 로드 밸런서에 서버 인증서를 할당하는 것이다.

    ACM을 사용하면 도메인 이름에 대한 보안 인증서를 무료로 만들 수 있다. ACM 인증서는 AWS 로드 밸런서와 Amazon CloudFront 배포를 통해서만 사용할 수 있다. Elastic Beanstalk은 AWS 로드 밸런서를 활용하고 있으므로 쉽게 적용할 수 있다.

     

    ACM 검색

    ACM을 검색하고 Request a certificate를 클릭하자.

     

    Request certificate

    Request certificate

    Public 증명서가 필요하기 때문에 이 상태로 Next를 누르자.

     

    Request public certificate

    Domain names에는 우리가 등록한 도메인이름을 입력하면 된다.

    Route 53을 이용하여 인증서 요청에 포함된 도메인의 DNS 구성을 수정할 권한이 있기 때문에 Validation method에는 DNS validation을 선택하자. 

     

    Key algorithm

    ACM에는 세 가지 암호화 키를 선택할 수 있다.

    첫 번째는 RSA 2048이다. RSA는 고전적인 공개 키 암호화 방법 중 하나로, 현재까지 가장 널리 사용되는 키 유형 중 하나이다.

    ECDSA는 공개 키 암호화의 한 유형으로, 타원 곡선 암호화를 기반으로 한다. 뒤의 숫자는 비트의 키 길이를 뜻한다.

    RSA는 일반적으로 웹 애플리케이션에 많이 쓰이므로 RSA를 선택하자.

    그리고 Request를 클릭하자.

     

    Certificates

    인증서를 발급받으면 다음과 같이 Pending validation을 뜬 것을 확인할 수 있다.

    발급을 완료하기 위해선 이전에 생성한 Route 53과 연결을 해야 한다.

    이제 만든 Certificate ID를 클릭하자.

     

    Certificate ID

    Create records in Route 53을 클릭하자.

     

    Create DNS records in Amazon Route 53

    DNS 레코드를 생성하자.

     

    Success

    정상적으로 생성된 것을 확인할 수 있다.

     

    HTTPS 설정

    HTTP

    HTTP

    이제 우리가 지정한 DNS를 통해 EB에 접속하는 것을 확인 할 수 있다.

    하지만 아직 HTTPS로 접근이 되지 않는 것을 확인 할 수 있다.

    아직까지 Elastic Beanstalk 설정에서 로드밸런싱에 80 포트에 대해서만 세팅을 해주었기 때문이다. 

    이제 Elaist Beanstalk 설정을 수정하자.

     

    Configuration

    Configuration

    구성 정보의 Instance traffic and scaling의 edit을 클릭하자.

     

    Listeners

    Listeners

    현재는 80 포트만 확인하고 있지만 HTTPS를 접근할 수 있게 수정하자.

     

    Add Listeners

    443 포트와 HTTPS 프로토콜을 선택하자. 이전에 생성한 SSL certificate를 확인할 수 있다.

    AWS에서 *HTTPS 리스너의 경우 ELBSecurityPolicy-TLS13-1-2-2021-06 보안 정책을 추천함으로 선택하자.

    그리고 Save를 클릭하자.

     

    HTTPS 연결 확인

    정상적으로 HTTPS 연결을 확인 할 수 있다.

     

    HTTP-HTTPS 리디렉션 구성

    아직까지 HTTP로 접속하면 HTTP 상태로 접속을 하게 된다. HTTP로 진입을 하게 하면 HTTPS로 리다이렉션을 하고 HTTPS로 진입할 수 있게 수정해 주자.

     

    Load Balancers

    Load Balancers

    AWS 검색 창에 EC2에 검색하여 왼쪽하단에 Load Balancers를 클릭하면, Elastic Beanstalk에 이용하는 Application Load Balancer를 확인할 수 있다.

    해당 ALB를 클릭하자.

     

    Listeners and ruls

    현재 두 개의 포트(HTTPS, HTTP)를 확인할 수 있다. HTTP:80을 클릭하자.

     

    Edit iistener

    Edit listener

    Redirect to URL을 클릭하고 URl ports를 HTTPS 443으로 수정 후 Save changes를 클릭하자.

     

    HTTP 접속 시도시

    이제 HTTP로 접속을 시도하려면 HTTPS로 전환된 것을 확인할 수 있다.

     

     

    참고

    https://aws.amazon.com/ko/certificate-manager/

     

    인증 관리자 - AWS Certificate Manager - AWS

    AWS Certificate Manager(ACM)를 사용하면 AWS 서비스 및 연결된 내부 리소스에 사용할 공인 및 사설 SSL/TLS 인증서를 프로비저닝, 관리 및 배포할 수 있습니다. ACM은 SSL/TLS 인증서를 구매, 업로드 및 갱신

    aws.amazon.com

    https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/configuring-https.html

     

    Elastic Beanstalk 환경에 사용할 HTTPS 구성 - AWS Elastic Beanstalk

    이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

    docs.aws.amazon.com

     

    https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html

     

    HTTP-HTTPS 리디렉션 구성 - AWS Elastic Beanstalk

    이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

    docs.aws.amazon.com

    https://jie0025.tistory.com/504

     

    [Domain] 도메인 구매해서 S3에 적용하기(가비아, AWS Route53)

    ✅ 선행 지식 먼저 도메인이 무엇인지, 도메인이 왜 필요한지에 대한 글은 여기에 있다! https://jie0025.tistory.com/503 [Domain] 도메인의 역할, 왜 필요할까? ✅ 도메인이란? 인터넷 상에서 특정한 웹사

    jie0025.tistory.com

     

    반응형