CloudFlare 탈출기

운영하고 있는 한 사이트의 DNS 서비스를 CloudFlare에서 AWS로 옮겼다. 편의상 도메인 주소는 a.net 으로 작성한다.

먼저, CloudFlare에서 Page Rule을 사용하는 것을 옮겨야한다. 옮겨야하는 Page Rule은 다 리다이렉션 시킬 때 사용하는 것이다.

초창기에 사이트 규모가 크지 않아 이미지를 CDN을 사용하지 않고 웹 서버에 함께 넣고 쓴 적이 있다. 후에 이미지 서버에 업로드하고 Page Rule로 리다이렉션 시켰다. 이것은 모두 웹 서버에서 리다이렉션하게 시켰다.

그 다음으로 해야할 것은 IP 접속을 막아놓은 일부 IP를 막는 것이다.

ELB에 WAF를 달아서 접속을 일부 막기로 했는데, WAF는 Application Load Balancer에만 적용이 가능했다. a.net은 Classic Load Balancer를 사용하고 있었기 때문에, 이를 바꾸는 작업이 필요했다.

ELB를 교체하고 WAF를 달아서 Page Rule을 대체할 수 있었고, 그 다음은 Access이다. 관리자 페이지, 베타 서버 페이지를 CloudFlare의 Page를 이용해서 일부 사용자만 접근할 수 있게 해놓았다. 이것은 WAF의 IP 제한을 이용해서 대체하기로 했다.

마지막으로 네임 서버를 옮길 준비가 되었으니 이제 네임 서버를 CloudFlare에서 Route 53으로 옮기기로 했다.

이제 마지막 작업을 해야한다.

사이트는 www.a.net 을 도메인으로 사용해고 있고, 모든 a.net 트래픽은 www.a.net으로 리다이렉션 시키고 있다. 이전에 CloudFlare에서는 Page Rule을 이용해서 이를 모두 처리했는데, 이제 AWS 상에서 처리해야 한다.

  1. S3에서 버킷을 하나 만든다. 버킷 이름은 아마도 큰 상관이 없는데, 도메인 이름 (a.net)으로 만들었다.
  2. 1에서 만든 버킷의 속성에서
    • Static website hosting을 Redirect request으로
    • Target bucket or domain에 www.a.net
    • Protocol은 https
  3. 여기서 만든 버킷의 주소는 잠시 후에 사용해야 하기 때문에, 잘 적어놓자. 아래와 비슷한 형태이다.
    • http://[버킷 이름].s3-website-ap-northeast-1.amazonaws.com/
  4. CloudFront로 가서 Create Distribution > Web을 누르고
    1. Origin Settings에서 Origin Domain Name에 위에서 만든 버킷의 주소를 적는다. 드롭다운 메뉴에 나온 값을 누르면 절대로 안된다.
    2. Default Cache Behavior Settings에서 Forward Cookies와 Query String Forwarding and Caching를 각각 All, Forward all, cache based on all을 선택한다.
    3. Distribution Settings에서 Alternate Domain Names (CNAMEs)에 a.net을 적고, SSL Certificate는 Custom SSL Certificate을 누르고 ACM에 있는 a.net 인증서를 선택한다. 인증서가 없으면 ACM으로 가서 발급받고 오자.
  5. 4에서 만든 Distribution의 Status가 Deployed가 될 때까지 기다린다. (5-30분 걸림)
  6. 이제 Route 53으로 가서 a.net의 Record Set를 편집한다.
    • Type: A – IPv4 address
    • Alias: Yes
    • Alias Target: 3에서 만든 CloudFront의 주소 (asdfasdf.cloudfront.net과 같은 형식)
    • Routing Policy: Simple
    • Evaluate Target Health: No

DNS가 항상 그렇듯이 조금 기다리면 a.net에 대한 요청이 모두 www.a.net으로 리다이렉션되는 것을 확인할 수 있고, a.net/asdf도 www.a.net/asdf로 리다이렉션 된다. 참고로 위에서 3까지 하면 HTTP 요청을 리다이렉션 시킬 수 있다.