본문 바로가기
카테고리 없음

[AWS] CORS와 EC2에 HTTPS 적용하기

by hbIncoding 2023. 2. 27.

1. CORS(Cross-Origin Resouce Sharing)

  • 브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한하는데 그래서 cross-orign 요청을 하려면 서버의 동의가 필요하다. 만약 서버가 동의한다면 브러우저에서 요청을 허락하고, 동의하지 않으면 브라우저에서 거절
  • 이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데 이것을 CORS라한다.
  • Cross-origin 이란 다음 중 한가지라도 다른 경우를 말한다.
    • 프로토콜 : http와 https는 프로토콜이 다르다.
    • 도메인 : domain.com 과 other-domain.com 은 다르다.
    • 포트번호 : 8080포트와 3000 포트는 다르다.

  1) CORS의 필요성

  • CORS가 없는 모든 곳에서 데이터 요청이 가능하면 보안성이 떨어진다.
    • 기존사이트와 동일하게 작동하게 하여 사용자의 세션을 탈취 가능
  • 브라우저를 보호하고 필요한 경우에만 서버와 협의하여 요청 할 수 있도록 하기 위해서 필요

2. CORS 동작

  1) Simple requests 경우

  • 이 요청은 추가적으로 확인하지 않고 바로 본 요청을 보낸다.
  • HTTP method가 다음중 하나이면서
    • GET
    • HEAD
    • POST
  • 자동으로 설정되는 헤더를 제외하고, 설정할 수 있는 다음헤더들만 변경하면서
    • Accept
    • Accept-Language
    • Content-Language
  • Content-Type이 다음과 같은 경우
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

  2) preflight요청일 경우

  • Simple Request가 아닌 모든 요청은 모두 preflight요청을 한다.
  • 실제 요청을 보내는 것이 안전한지 확인하기 위해 OPTIONS 메서드를 사용하여 cross-oring HTTP요청을 보낸다.
  • 사용자 데이터에 영향을 미칠 수 있는 요청이므로 사전에 확인 후 본 요청을 보내는 것이다.

  •  

 

2. EC2서버 HTTPS 적용시키기

  • 준비물 : 도메인(나는 가비에 에서 550원에 하나 구매), 열어놓은 EC2 인스턴스

  1) EC2 보안 규칙 설정

  • 위와 같이 보안 규칙을 설정해준다
  • 3306은 RDS를 사용하지 않으면 제외해도 된다

  2)Route 53 설정

  • 구매한 도메인 이름만 작성하고 퍼블릭 호스팅 영역을 선택해 준다.

  • 유형의 NS에 있는 값/트래픽 라우팅 대상 4개를 기억해 두자.
  • A 유형과 CNAME은 나중 단계에 추가하닌까 지금은 신경 꺼두자

  3)가비아 네임서버 설정

  • 가비아 도메인관리 페이지에서 해당 도메인의 네임서버 설정을 바꿔줘야 한다.
  • 위와 같이 앞서 기억해준 NS유형의 값/트래픽 라우팅 대상 4개를 잘 붙여넣어준다.
    • Route53에서의 값과 다르게 뒤에 점(.) 하나는 빼자
  • 소유자 인증을 하고 적용하자

  4)ACM(AWS Certificate Manager)가서 SSL인증서 요청

  ㄱ. 인증서 요청하기

  • 해당 페이지에서 인증서 요청 클릭

  • 위와 같이 작성해 준다. 도메인 이름과 DNS검증, 태그는 생략한다.

   ㄴ. 레코드 생성하기

  • 이거는 발급이 이미 완료됐지만, 발급 요청중 또는 대기중으로 뜰 것이다.
  • 침착하게 <Route 53에서 레코드 생성>을 누르자

  • 이미 전에 생성해서 안되지만 처음할 때는 CNAME 레코드를 생성해주면 된다.
  • 위에 값들은 아마 자동으로 다 적혀있을 것이다.

  5)다시 Route 53에서 레코드를 넣어준다.

  • 만들어 준 호스팅 영역으로 들어간다.
  • 현재 2개의 레코드가 있을 것이다.(NS와 SOA)
  • 이제 CNAME형태의 레코드를 생성해보자
  • 앞서 ACM에서 생성한 인증서의 도메인을 보면 CNAME의 이름과 값을 쉽게 복사할 수 있다.

  • 이름 : 언더바(_)부터 나의 도메인 .sparta-prac-lhb.shop 이전까지 잘 넣어주자
  • 값은 언더바부터 점(.)까지 알뜰하게 다 넣어주면 된다.
  • 레코드를 생성하면 된다.

  6)가비아에서 DNS설정 해주기

  • 위와 같이 도메인 연결을 들어가 준다.

  • 원래 만들어져있던 건지, 아니면 만들어 줬던 건지 기억이 안나지만 아무튼 알아서 아래와 같이 설정해주자.

  • 여기도 CNAME의 이름과 값을 위와같이 넣어주면 된다. 특히  호스트에서 마지막에 점(.)까지 넣어준 것을 확인하자.
    • 뺴도 되나 모르겠지만 넣어을 때 됐으니 넣어준다.
    • 타입 : CNAME
    • 호스트 : 레코드 이름
    • 값/위치 : 값/트래픽 라우팅 대상

  7)EC2 가서 로드 밸런싱 대상 그룹 만들어주기

  • 대상 그룹(target group)을 들어간다.

  • 위와 같이 설정해준다. 그룹이름만 지어주지 거의 그대로 진행하면 될 것 이다.

  • 현재 사용중인 인스턴스를 체크한 후 포트 80과 443포트를 <아래에 보류 중인 것으로 포함>으로 추가해준다.
    • 혹시 몰라서 8080도 추가해줬긴 했었다.
  • 그리고 대상 그룹 생성을 진행

  8)로드 밸런서 생성하기

  • 앞서 EC2에서 로드밸런싱 탭에서 로드밸런서를 눌러주고 로드 밸런서를 생성해주자.
    • 사진은 완성된 이후 모습니다.

  • Application Load Balancer( 가장 좌측) 을 생성해준다.

  • 기본 구성은 이름만 지어주면 될 것 이다. 나머지는 안건들여도 된다.

  • 네트워크 매핑은  a와 c를 선택해준다. 어디서는 4개 다 선택해도 상관없다고 하는데 잘 모르겠다. 난 a,c 2개 했다.

  • 보안 그룹은 default는 놔두고 ec2의 보안그룹과 같은 종류를 추가해준다. 
    • 나는 launch-wizard-6였다.

  • 리스너는 위와 같이 HTTP 80포트와 HTTPS 433포트를 추가해준다. 둘다 대상그룹은 좀전에 만들어 준 것을 선택해주면 된다.
    • 나는 이미 만들고 적용해서 적용이 안되는 모습니다.

  • 보안 리스너는 인증서만 받아와주면 된다. 안보인다면 오른쪽 새로고침 버튼을 눌러보자.
    • 없다면 ACM에서 인증서 상태를 확인해보자.
    • 인증서 생성에 5~30분 늦으면 1시간 걸린다고는 하나, 거의 만들고 있는 본인이 무언가 놓쳤을 확률이 높다.
  • 인증서까지 받았다면 <로드밸런서 생성>을 눌러서 생성을 완료하자.

  9)로드 밸랜서 리스너 편집하기

  • 우선 HTTP:80 리스너 부터 편집해주자.

  • HTTP 80으로 들어오는 것을 HTTPS 443 으로 리디렉션 시켜주자.
    • 전달, 리디렉션, 고정 응답 변환 옵션 이 있는데 리디렉션으로 바꿔주면 위와 같이 설정창이 바뀔 것이다.

  10)Route 53 에서 A 레코드 추가

  • 다시 Route 53으로 와서 아까만든 호스팅영역에서 레코드를 생성해주자.

  • 이번에는 A 유형의 레코드를 추가하고 값에 인스턴스 퍼블릭 IP를 넣어준다.

  • 별칭을 열어주고 위와 같이 설정해준다
    • Application/Classic Load Balancer
    • ap-notheast-2
    • 아까 생성한 로드 밸런서

  11)설정 완료

  • 위 과정들을 통해 모든 설정이 완료되었다. 
  • 바로 요청하면 502에러가 뜰 것이지만 시간이 지나면 HTTPS 적용이 완료된 것을 확인할 수 있을 것이다.

 

3. 참조자료

1) CORS란? : https://hannut91.github.io/blogs/infra/cors

 

CORS란 무엇인가? – Yunseok's Dev Blog

 

hannut91.github.io

2)EC2 HTTPS 적용하기 : https://pgmjun.tistory.com/69

 

[AWS] EC2 도메인 연결 및 HTTPS 적용하기

EC2 도메인 연결 & EC2 HTTPS 적용 안녕하세요 오늘은 AWS EC2에 도메인을 연결하고 HTTPS까지 적용해보는 시간을 갖도록 하겠습니다. 이 글은 이전에 생성한EC2가 이미 있다는 가정하에 HTTPS와 도메인

pgmjun.tistory.com