본문 바로가기

개발

AWS S3 + CloudFront + 커스텀 도메인(HTTPS) 웹사이트 배포하기

목표: HTTPS 가 적용된 커스텀 도메인으로 정적 파일 배포하기(S3 + CloudFront)

 

진행 절차

  1. AWS Route53 에서 도메인 구입
  2. AWS S3 버킷 생성
  3. index.html 파일 생성하여 2번에서 생성한 S3 버킷에 업로드
  4. 구입한 도메인에 대한 인증서 발급 (AWS Certificate Manager)
  5. CloudFront 생성
  6. AWS Route53에서 A 레코드 생성
  7. 도메인으로 index.html 접속 확인!

준비사항

  1. AWS 에 가입된 아이디(카드 등록)
  2. 도메인을 구매할 비용

 

1. AWS Route53 에서 도메인 구입

 

사용하던 aws 계정이라서 기존의 도메인이 1개 존재합니다. 처음이시라면 0 이 보입니다

  1.  AWS Route53 에 접속
  2.  [도메인] 메뉴 -> [등록된 도메인] 클릭

[도메인 등록] 버튼 클릭하면 도메인을 검색하고 구매할 수 있는 창이 나타납니다.

해당 창에서 도메인을 구매하시면 됩니다.

이미 가비아와 같은 다른 업체에서 구매하신 도메인이 있는 경우 그 도메인을 AWS Route53 에 등록하셔야 합니다.

 

도메인 구매를 완료하면 정적 파일을 업로드 할 AWS S3 버킷을 생성해야 합니다.

 

 

2. AWS S3 버킷 생성

AWS S3 로 가서 [버킷 만들기] 버튼 클릭

1. 자신이 원하는 버킷 이름으로 입력하면 됩니다. 

- CloudFront를 사용한다면 버킷 이름을 도메인 명과 동일시하지 않아도 됩니다.(다른 블로그 글들과 헷갈리실까 봐 명시)

- 저는 예시 및 구분을 위해 도메인명과 똑같이 설정했습니다.

2. 버킷이 생성 될 AWS 리전에 대한 선택입니다. 원하는 리전을 선택하면 됩니다. 서울 리전으로 하였습니다.

 

버킷 만들기 버튼을 클릭하여 버킷 생성을 완료합니다.

위 그림과 같이 버킷 생성을 완료하였습니다.

 

 

3. index.html 파일 생성하여 2번에서 생성한 S3 버킷에 업로드

 

index.html 을 먼저 생성하여 Hello World 를 출력하는 코드를 작성하고 저장합니다.

<h1>Hello World</h1>

 

위에서 만든 S3 버킷을 클릭하여 들어가서 index.html 파일을 업로드 합니다.

업로드 버튼을 누르셔도 되고 html 파일을 드래그 앤 드랍 하셔도 업로드 가능합니다.

업로드를 완료하였습니다. 

 

 

4. 구입한 도메인에 대한 인증서 발급(AWS Certifiacate Manager)

 

구매한 도메인에 대한 인증서 발급을 진행하겠습니다.

AWS Certificate Manager 로 접속합니다. 

주의! 리전을 버지니아 북부로 선택하고 인증서를 발급받아야 합니다. 

이후 생성 할 CloudFront 에서는 버지니아 북부에 있는 인증서만 사용할 수 있습니다.

 

새로운 인증서를 발급받기 위해 요청 버튼을 누릅니다. 

그리고 바로 다음을 누릅니다. 

[완전히 정규화된 도메인 이름] 에 인증서가 인증할 수 있는 도메인 명들을 입력해야 합니다.

여러 도메인 명을 입력할 수 있어서 사용할 도메인명 각각을 추가해줘도 되지만, *를 사용하여 여러 도메인을 커버하게 할 수 있습니다.

 

예)

chobo-developer.com -> 인증서가 chobo-developer.com 주소만 인증 가능

static.chobo-developer.com -> 인증서가 static.chobo-developer.com 주소만 인증 가능

*.chobo-developer.com ->www.chobo-developer.com, static.chobo-developer.com ... 과 같이 모든 서브도메인 인증 가능

 

검증 방법은 [DNS-검증] 을 그대로 유지한 채 완료하였습니다.

완료 버튼을 누르면 위와 같이 파란색 창이 나오면서 [인증서 보기] 버튼이 있습니다. 

(왼쪽의 [인증서 나열] 탭을 클릭하여 방금 만든 인증서를 클릭해도 됩니다. 안 보이면 새로고침 하시면 됩니다.)

 

그러면 상태가 [검증 대기 중] 입니다. 이 검증을 완료하기 위해서 

[Route53에서 레코드 생성] 버튼을 누릅니다. 

그러면 위 창이 뜨는데 바로 [레코드 생성] 버튼을 누릅니다.

 

그리고 나서 AWS Certificate Manager(ACM) 메뉴의 [인증서 나열] 탭에 가서 일정 시간 후에 상태가 [발급됨] 으로 변경됩니다.

이러면 이제 도메인 인증서 발급이 완료된 것입니다.

 

 

5. CloudFront 생성

 

AWS CloudFront 에 접속합니다.

[배포 생성] 버튼을 클릭합니다.

원본 도메인을 선택해야하는데 입력 창을 클릭하면 처음에 만들었던 s3 버킷을 선택할 수 있게 목록이 나옵니다.

자신이 위에서 만든 s3 버킷을 선택해주면 됩니다.

S3 버킷을 선택하면 1번과 2번처럼 입력이 들어갑니다.

[S3 버킷 엑세스]에서는 3가지가 있는데, S3에 CloudFront 만 접근할 수 있게 [원본 엑세스 제어 설정]을 선택합니다. 

그리고 그 아래 [제어 설정 생성] 버튼을 눌러서 생성 후 선택합니다. 

선택하면 위와같이 입력됩니다. 

HTTPS 만으로 접속이 가능하길 원하기 때문에 [Redirect HTTP to HTTPS] 선택합니다. 

중요! [대체 도메인 이름]에는 CloudFront에 연결될 수 있는 도메인 명을 입력해야합니다.

위 예제에서는 S3 에 업로드한 index.html 파일을 보기위해 static.chobo-developer.com/index.html 로 접속할 예정입니다.

그래서 static.chobo-developer.com 을 입력하였습니다. 이 이름은 아래 A 레코드와도 관련이 있습니다.

 

[사용자 정의 SSL 인증서] 에서는 입력할 박스를 클릭하면 이전에 만든 인증서를 선택할 수 있습니다.

여기서 만약 자신이 생성한 인증서가 보이지 않는다면, 인증서를 발급받은 리전이 [버지니아 북부] 가 아닐 확률이 높습니다.

CloudFront에 인증서를 적용하기 위해서는 버지니아 북부 리전에 인증서를 발급 받아야합니다. 

CloudFront 설정을 완료하고 [배포 생성] 버튼을 누르면 위와 같이 파란색 창이 나오고 [정책 복사]란 버튼이 나옵니다.

[정책 복사] 버튼을 꼭 클릭해서 정책을 복사하셔야 합니다.

[정책 복사] 버튼을 클릭하면 문자열로 된 정책이 복사가 됩니다.(컨트롤C 처럼)

이 복사한 것을 S3 정책에 붙여넣어야합니다. 

S3 [권한] 탭으로 이동하여 아래에 내려보면 [버킷 정책] 란이 있습니다.

편집을 누르고 위에서 복사한 정책을 붙여넣고 적용합니다.

그리고 CloudFront 로 돌아가서 생성한 것이 상태가 [활성화됨] 으로 변경될 때 까지 기다립니다.

 

6. AWS Route53 에서 A 레코드 생성

 

CloudFront 가 활성화되면 마지막으로 Route53 에 가서 A 레코드를 생성해야합니다.

Route53 메뉴로 가서 [호스팅 영역] 을 누릅니다.

[호스팅 영역]에서 자신이 이전에 만든 도메인이 있습니다. 클릭합니다. 

[레코드 생성]을 누릅니다.

1. [레코드 이름] 란에는 CloudFront 생성 시 설정한 [대체 도메인 이름] 과 같게 해주어야 합니다.

CloudFront 생성 시 [대체 도메인 이름] 을 static.chobo-developer.com 으로 해주었으니 "static" 을 입력해야합니다.

2. 별칭으로 변경합니다.

3. CloudFront 배포에 대한 별칭을 선택한 뒤 그 아래에서 자신이 이전에 만든 CloudFront 를 선택할 수 있습니다.

그리고 레코드 생성을 누릅니다. 

레코드 생성을 누르면 [상태 보기] 버튼이 나타납니다. 클릭합니다.

그러면 현재 상태가 진행중인지 완료되었는지 확인할 수 있습니다. 새로고침을 누르면서 확인합니다.

그러다 상태가 [INSYNC]가 되면 완료된 것이므로 접속을 해볼 수 있습니다.( 가끔 바로 안될 때도 있습니다 ... )

 

7. 도메인으로 index.html 접속 확인!

 

브라우저에서 static.chobo-developer.com 으로 접속하면 https 가 적용된 것을 볼 수 있습니다!

 

끝!

 

 

 

심심치 않게 이 설정을 할 때가 있었는데,

할 때마다 빼먹거나, 다시 찾아보고, 잘 안되고 하는 일의 반복이어서 정리를 한번 해봤습니다. 

위 내용을 찾으시는 분들은 한번에 성공하실 수 있게 최대한 자세히 적어보았습니다ㅎㅎㅎ