[AWS] CloudFront 실습
S3 버킷 새로운 버킷 만들기
AWS 리전 : 현재 있는 지역에서 조금 멀리 떨어져 있는 곳으로 선택
eg. 미국 동부 오하이오 혹은 서부 오레곤 지역
버킷 이름 : awslearner-cloudfront-practice
객체 소유권 : ACL 활성화됨 체크
객체 소유권 : 버킷 소유자 선호
이 버킷의 퍼블릭 액세스 차단 설정 :
모든 퍼블릭 액세스 차단 : 체크 해제
그 이외 : default
버킷 만들기 click
버킷에 사진 업로드하기
사진을 올리는 이유는 다른 지역에 있는 버킷에 들어있는 사진을 여는 과정을 확인해보기 위해서.
예를들면 사는 곳은 한국인데 버킷지역이 미국으로 되어 있다면?
권한 :
ACL(액세스 제어 목록)
미리 정의된 ACL :
퍼블릭 읽기 액세스 권한 부여 선택
⭢ 버킷 레벨뿐만 아니라 오브젝트 레벨에서도 Public 권한이 생기는 것 (바람직한 방법 X 보안이슈)
실제 프로덕션에서는 이 파일을 업로드 및 삭제할 수 있는 권한을 지닌 사람, 파일 읽기만 가능한 사람. 이런식으로 사용자와 그룹을 따로 나눠서 관리해야하는 것
업로드 Click
객체 URL click
이미지가 로딩되는 과정에서 약간의 버퍼링
⮕ 버킷의 리젼과 살고있는 지역이랑 가깝다면 속도는 빨랐을 것이다.
지역이 달라도 업로드, 다운로드 속도를 향상시킬수있는 방법은? Clouldfront CDN
CloudFront 대시보드로 들어가준다
새로운 CloudFront 배포 생성 click
여기서 배포 : 새로운 분산 네트워크를 하나 만든다는 뜻
Cloudfront 배포 생성
원본
Origin domain : S3 버킷 뿐만아니라 ELB 다양한 오리진을 선택할 수 있다.
아까 만들어준 S3 버킷을 찾아서 선택해준다. ⭢ 그러면 자동으로 이름이 입력이 된다.
Origin path - optional : 선택사항. 복잡한 폴더 구조로 이루어져있는 버킷 안에서 특정 폴더만 선택해서 사용하고 싶을 때 정의
공개 : 제한을 두지 않고 아무나 네트워크에 접근 권한이 생기게 된다.
버킷 또한 퍼블락 액세스가 차단이 되어있어야한다. 보안적인 측면에서 바람직 X 옵션
원본 액세스 제어 설정(권장) : 버킷 안에 있는 콘텐츠는 클라우드 프론트를 통해서만 접근 가능
Legacy access identities : OAI라고 불리는 원본 액세스 id를 사용해서 버킷에 접근한다
OAI? 클라우드 프론트에 존재하는 가상 유저. 컨텐츠 접근 권한을 가지고 있다.
새 OAI 생성 버튼을 누르게 되면, 이미 OAI 이름이 정의가 되어서 나온다.
버킷 정책 : 읽기 권한을 사용자에게 부여할지 안할지에 대한 권한을 묻는 것
예, 버킷 정책 업데이트 선택
오리진으로 보내는 요청에 사용자 지정 헤드를 추가할 때 필요하다. 필요없음으로 PASS
Enable Origin Shield : 원본의 부하를 줄이고 가형성을 보호하는데 도움이 추가되는 캐싱 계층이라 설명이 되어있음.
캐시 적정률 샹상을 통해서 더 효울적인 콘텐츠 로딩을 위해 사용되어 질 수 있다. 그렇지만 사용시 추가 요금 발생 default는 아니오
기본 캐시 동작
경로 패턴 : 사용자가 변경 불가
기본값(*) : 여기서 *는 정규 표현식 값중 하나. 모든 것을 의미
자동으로 객체 압축 : 컨텐츠를 오리진으로 보낼 때 압축해서 보낼지 아닐지에 대한 여부
HTTP 헤더중 하나인 Accept-Encoding 헤더에 지정된 대로 뷰어가 지원하는 경우에만 파일을 압축합니다.
뷰어

HTTP란? HyperText Transfer Protocol의 약자
HTTPS의 S는 Secure의 약자. 안전한. HTTP보다 보안적인 측면에서 뛰어나다.
Redirect HTTP to HTTPS 선택
요청이 HTTP로 올지 HTTPS로올지 모르며 두 종류의 요청이 오더라도 모두 HTTPS로 규결시킬 수 있는 방법인 두 번째 옵션을 사용하자는 것
첫번째 옵션은 HTTP를 허용하고 있고
세번째 옵션은 HTTP를 거부하고 있다.
허용된 HTTP 방법 :
API 요청을 할 때 발생할 수 있는 GET HEAD와 같은 상활 중 무엇을 허용할지를 묻는 것
디폴트로 선택된 GET, HEAD 선택
뷰어 액세스 제한 : No 선택
Yes할 경우 클라우드 프론트에 서명된 URL 또는 서명된 쿠키를 사용해야함
이는 EC2 인스턴스에 접속할 때 썻던 PEM 파일과 비슷한 개념. 액세스 권한을 부여받은 사용자만 콘텐츠에 접근할 있게 하는 것.
캐시 키 및 원본 요청
AWS에서는 캐시 정책과 오리진 요청 정책 사용을 권장하고 있지만, Legacy cache 사용할 수도 있다.
본 실습에서는 권장하고 있는 첫번째 옵션 선택
캐시 정책 : 현재 캐시 정책에 대해 자세히 알고 싶다면 정책 보기 클릭
Managed-CachingOptimized에 대한 세부 정보를 볼 수 있다.
최소 TTL(초)은 1초
최대 TTL(초)는 31536000 (365일 1년)
기본 TTL(초)은 86400 (24시간)
압축방식은 Gzip 또는 Brotli를 지원하고 있다.
함수 연결 - 선택 사항
클라우드 프론트를 사용할 때 일어날 수 있는 다양한 상황에서 클라우드 프론트 함수 및 람다 엣지 이 둘 중 하나를 사용할 수 있다.
개발자가 구현한 코드에 근거하여 이벤트가 발생할 경우 이 함수를 실행하라는 것
함수에 ARN을 넣고 함수를 사용할 수 있다.
웹 애플리케이션 방화벽(WAF)
설정
가격 분류 : 이옵션에 따라 엣지 로케이션이 얼마나 많이 전 세계에 생성될지 결정된다.
엣지 로케이션이 많아질수록 속도는 비약적으로 향상될 것. 단점 : 추가 비용 발생
전 세계 사용자들을 위해서라면 첫 번째 옵션을 사용하는 것이 맞으나 실습이므로 최선의 비용으로 클라우드 프론트를 구축할 것이므로 두번째 혹은 세번째 옵션을 사용할 것 ⭢ 본실습 두번째 옵션 선택
대체 도메인 이름(CNAME) - 선택 사항 : 만약 도메닌 주소를 이미 구매했다면 여기서 사용할 수 있다.
클라우드 프론트를 구축할 때 필요한 것은 아니지만 도메인 주소를 제공하지 않으면 사용자를 위해 클라우드 프론트는 이밎 도메인 주소를 생성해준다.
사용자 정의 SSL 인증서 - 선택 사항 : 이건 버지니아 지역에서 생성한 것이어야만한다.
SSL 인증서는 버지니아 지역에서만 생성 가능.
인증서 요청 버튼을 누르면 새창이 뜬다. AWS로부터 Public SSL 인증서를 생성할 수 있다.
인증서를 사용하는 이유 중 하나는 HTTP 요청을 HTTPS로 리다이렉트 할 때 사용되어진다. 우린 인증서 없이 진행할 수 있다.
리전이 버지니아 북부로 바뀐는 것을 확인할 수 있다.
지원되는 HTTP 버전 :
기존 버전인 1.0과 1.1이 포함되어 2를 사용할지 아니면 최근에 추가된 3을 사용할지를 선택
빠른 네트워크 처리 및 안정적인 네트워크 연결을 위해 가장 최신 버전을 사용하는 것을 권장
따라서 3 선택
기본값 루트 객체 - 선택 사항 : PASS
표준 로깅 : PASS
IPv6 : zurl
IPv에 비해서 더욱 다양한 IP 주소를 포함한다. 그만큼 복잡도는 ⭡⭡⭡
배포 생성 click
배포 도메인 이름 : 클라우드 프런트에서 직접 생성된 URL
원본
이는 콘텐츠가 들어있는 S3 버킷과 동일
원본 액세스 Id도 있음
경로 패턴 : 기본값으로 되어있는 데 이는 앞서 경로값을 정의 하지 않았기 때문에
모든 요청을 HTTPS로 바꿔주는 옵션을 선택했지 때문에 이렇게 보임
캐시 정책 이름 : Managed Chaching Optimized를 선택했기 때문에 이렇게 보임
배포 도메인 이름 URL을 복사해서 새탭으로 열어보자.
맨앞은 HTTP로 바꿔서. 맨끝에는 파일명을 넣어준다.
처음 벅속시 버퍼링이 생길 수 있으나 재차 방문할 경우 가장 가까운 엣지 로케이션에서 콘텐츠를 가져오기 때문에 속도가 향상될 것이다.
접속시 http로 접속을 했는데 https로 리다이렉트 된것도 확인할 수있었다.