AWS

[AWS] CloudFront 실습

어코링 2024. 2. 13. 23:57

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로 리다이렉트 된것도 확인할 수있었다.