본문 바로가기
개발/AWS

[AWS] Route 53과 CloudFront로 S3 웹사이트 올리기

by 유다110 2019. 3. 9.
반응형

1단계: Route 53 설정 & 2단계: 도메인 등록


AWS 서비스에서 Route 53에 들어가 'Domain registration'을 선택해 'Register Domain' 버튼을 눌러 도메인을 생성한다.


내가 갖고픈 도메인 이름을 검색하고 TLD(Top Level Domain; .com, .org와 같은 최상위 도메인)를 선택하면 그에 따른 가격이 나온다. 난 내 깃헙 아이디를 따라 yuda110.com을 샀다. 대체로 1년에 12달러다.


도메인이 활성화되는 데에는 최대 3일이 걸리지만 대체로 두어 시간 안에 완료된다.




3단계: ACM에서 SSL/TLS 인증서 받기


- HTTPS를 사용하려면 SSL/TLS 인증서가 필요하다.

* 전송 계층 보안(Transport Layer Security, TLS, 과거 명칭: 보안 소켓 레이어/Secure Sockets Layer, SSL)은 암호 규약이다. 이 규약은 인터넷 같이 TCP/IP 네트워크를 사용하는 통신에 적용되며, 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 확보해준다.

편리하게도 인증서는 AWS Certificate Manager에서 해결할 수 있다. 공인/사설 인증서 두 가지가 있으나 서울 리전에서는 사설 인증서가 지원되지 않고 AWS 자습서에서도 공인인증서 위주로 설명되어 있으니 공인인증서를 (강제)선택하도록 하겠다.

- ACM 공인인증서 요청

AWS Certificate Manager 콘솔에 들어간다. 여기서 인증서 프로비저닝을 누른 뒤, 공인인증서 요청을 선택하고 도메인 이름을 입력한다.


나는 yuda110.com을 입력했다.


나는 Route 53에서 DNS 구성을 수정할 수 있기 때문에 DNS 검증 방법을 택했다. (그렇지 못하다면 이메일 검증 방법을 선택해야 한다.) 


모두 마치면 DNS에 CNAME을 추가할 때까지 검증 보류 상태가 된다. Route 53에 도메인이 있다면 'Route 53d에서 레코드 생성'이라는 버튼만 누르면 바로 검증이 가능하다. AWS 최고!!!

검증에는 최대 30분 정도 걸린다고 하는데 난 5분쯤 걸렸다.




4단계: S3 버킷을 만들고 다른 도메인 이름으로 요청을 리디렉션하도록 구성


S3 콘솔로 가서 버킷 하나를 새로 만든다. 내 도메인과 이름을 다르게 해야 한다!!! 아직 이유는 잘 모르겠으나 호스팅할 버킷 이름과 도메인 이름이 같으면 문제가 생기는 듯 하다. 이것 때문에 엄청 헤매다가 어떤 분의 블로그에서 도움을 얻었다.

난 도메인이 yuda110.com이어서 버킷 이름을 yuda110-content라고 정했다.


버킷을 만들었으면 '속성'에서 '정적 웹사이트 호스팅'을 선택.

'이 버킷을 사용하여 웹 사이트를 호스팅합니다.' 선택.

인덱스 문서에 index.html을 지정해준다. 그리고 저장.


버킷 정책을 업데이트해서 S3에 퍼블릭 액세스를 부여한다.


아래 json에서 my-bucket-name만 자기 버켓 이름으로 바꿔주자.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*"
        }
    ]
}

* 추가로 이 버킷의 엔드포인트 URL을 따로 적어둔다. 다음 절차에서 CloudFront 배포를 생성하거나 업데이트할 때 이 값이 필요하다.(예 http://yuda110-content.s3-website.ap-northeast-2.amazonaws.com)



5단계: CloudFront 배포 생성 또는 업데이트

Amazon CloudFront는 개발자 친화적 환경에서 짧은 지연 시간과 빠른 전송 속도로 데이터, 동영상, 애플리케이션 및 API를 전 세계 고객에게 안전하게 전송하는 고속 콘텐츠 전송 네트워크(CDN) 서비스다.


CloudFront 콘솔에서 'Create Distribution' 버튼을 누른다. 

다음 창이 나타나면 Web 아래의 'Get Started'를 누른다.(RTMP는 리얼 타임 메시징 프로토콜인데 아직 잘 모르겠다.)


Origin Domain Name에 4단계에서 만든 https 리디렉션용 버킷 엔드포인트 URL을 입력한다. 주의할 건, 아래 옵션으로 나오는 목록에서 고르자 말고 복사해둔 것을 그대로 붙여넣어야 한다는 것이다. 둘이 다르다!

 

Default Cache Behavior Settings에서 Viewer Protocol Policy가 HTTP and HTTPS로 되어 있는지 확인한다. 나머지는 전부 기본값으로 한다.


Distribution Settings에서 CNAMEs에 사용자들이 콘텐츠 엑세스에 사용할 도메인 이름을 입력한다. 나는 yuda110.com으로 했다. 두 개를 적어도 된다.(ex. example.com, www.example.com)

SSL Certificate은 3단계에서 만든 인증서를 가져오면 된다.

Custom SSL Client Support는 Only Clients that Support Server Name Indication(SNI)을 선택한다. 다른 옵션을 선택할 경우 HTTPS 요청을 제공하는 전용 IP 주소의 요금을 지불해야 한다.

끝!! 완료 버튼을 누른 뒤 20분 정도만 기다리면 CloudFront가 각 엣지에 배포된다.




6단계: CloudFront 배포로 트래픽을 라우팅하는 Route 53 레코드 생성


그럼 이제 마지막 단계이다. Route 53에 CloudFront 배포로 트래픽을 라우팅하는 레코드를 추가한다.

Route 53 콘솔에서 'Hosted zones' 선택한 후, 내 도메인을 선택하고 'Create Record Set'을 눌러 다음을 입력한다.


이름: 인터넷 트래픽을 리디렉션할 도메인(혹은 하위 도메인) example.com

형식: 기본값

별칭: '예'를 선택한 뒤, 5단계에서 만든 CloudFront 배포를 선택한다.


그럼 진짜 끝!! 프로토콜이 https로 바뀌었다!



참고: 

CloudFront에서 HTTPS 요청을 제공하는 방식 선택

인터넷 트래픽을 다른 도메인으로 리디렉션, HTTP 요청을 HTTPS로 리디렉션

static website hosting에서 Custom Domain과 HTTPS(SSL) 사용하기

반응형

댓글