Public Cloud/AWS

AWS - CloudFront

서머스 2022. 7. 4. 16:41

AWS CloudFront

- Content Delivery Network(CDN)의 일종

- 콘텐츠를 edge location에 캐싱하여 read 성능을 높인다. => 먼 거리에 있는 사용자가 더 빠르게 컨텐츠를 볼 수 있다.

- 근거리의 Edge location에 컨텐츠를 일정 기간동안 저장시켜 둔다.

- edge location은 글로벌하게 216개 존재한다.

- Ddos 차단, Shield와 통합, AWS 웹 app. 방화벽으로 보안성이 있다.

- HTTPS으로 외부에 노출되고, 내부로는 HTTPS 백엔드로 소통 가능하다.

 

그전까지는 접속하게 되면 미리 저장된 페이지가 보여진다

- 인터넷 간 접속은 거리가 멀면 멀어질수록 접속 속도가 느려지기 때문이다.

- 프랑스 사람이 드라마를 보기 위해 독일까지 접속하지 않아도, edge location까지만 가서 드라마를 볼 수 도 있다.

 

 

Origin

S3 버켓

- 엣지에 파일을 분산하고 캐싱하기 위해 사용한다.

- CloudFront Origin Access Identity(OAI)로 보안성을 높인다. => S3 버켓이 클라우드 프론트만 소통할 수 있게 한다.

- S3에 파일을 업로드 할 때 클라우드 프론트가 입구(ingress)의 역할을 한다.

 

Custom Origin(HTTP)

- ALB

- EC2 인스턴스

- S3 웹사이트(정적 웹사이트)

- HTTP 백엔드

 

 

고수준의 CloudFront

- Origin으로 가기 전에 캐시부터 살펴보게 된다.

 

 

Origin으로서의 S3

 

 

 

Origin으로서의 EC2 혹은 ALB

- 엣지 로케이션의 IP를 EC2 인스턴스 내로 허용한다.

- ALB는 반드시 public이어야 한다.

 

 

Geo Restriction

- 나라마다 접근 제한을 둘 수 있다.

- 화이트 리스트 : 승인된 국가 - 컨텐츠에 접근 가능하다.

- 블랙 리스트 : 접근 금지된 국가(저작권법 등에 의해)- 컨텐츠에 접근 불가하다.

- 이러한 국가의 리스트는 서드 파티 Geo-IP 데이터베이스를 이용해 결정된다.

 

 

CloudFront vs S3 리전간 복제

CloudFront S3 Cross Region Replication
- 전 세계 단위
- TTL(Time to Leave) 단위로 캐싱된다.
- 어디서든 접근 가능해야하는 정적 컨텐츠에 적합하다.
- 특정 리전 내에서
- 거의 실시간으로 파일이 업데이트 된다.
- 읽기 전용
- 지연 시간이 낮아야 하는 동적 컨텐츠에 적합하다.

 

 

Signed URL/Cookies

signed URL

- 프리미엄 유저에게만 파일을 배포하고 싶을 때 

- URL 만료시간, IP 범위, signed URLs을 포함한 정책(policy)을 이용한다.

- URL의 유효 기간 

     - Shared content : 몇분 내, 짧은 기간

     - Private content : 년 단위로

- Signed URL : 파일 당 1개의 url, 각각의 파일에 접근하도록 한다.

- Signed Cookies : 하나의 쿠키를 재사용 할 수 있어서, 하나의 쿠키로 여러개의 파일에 접근할 수 있다. 

 

 

CloudFront Signed URL vs S3 Pre-Signed URL

CloudFront Signed URL S3 Pre-Signed URL
- origin에 상관 없이 접근하는 것을 허용한다.
- key-pair를 이용하고, root만이 관리할 수 있다.
- IP나 경로, 만료 기간으로 필터링 할 수 있다.
- 캐시를 이용할 수 있다.
- URL에 pre-signed한 유저에게 요청할 수 있다.
- IAM을 이용한다.
- 생명주기가 짧다.

 

가격 책정

- Price Class All : 모든 리전에 엣지 로케이션을 둘 수 있지만, 가장 비싸다.

- Price Class 200 : 비싼 리전 제외하고 대부분의 리전이 포함되었다.

- Price Class 100 : 저렴한 리전만 제공한다.

 

 

 

다중 Origin

- 콘텐츠의 유형이나 경로에 따라 클라우드 프론트를 거치는 라우트나 경로를 리다이렉팅하여 다른 Origin으로 라우팅하고 싶을 때 사용한다.

- /images/*, /api/*, /* 등, 경로 패턴으로 결정된다.

- ALB가 되는 오리진으로부터의 회신이 필요하다.

 

 

 

Origin 그룹

Primary가 에러가 나면 똑같은 request를 secondary에게 보낸다.

- HA와 failover를 위해

- 하나는 primary origin으로, 다른 하나는 secondary origin으로 둔다.

- primary origin이 fail이 나면, secondary origin이 대체된다.

 

S3와 결합한 경우. 재해 복구 또한 가능하다.

 

 

Field 단위 암호화

- 애플리케이션 스택을 통해 중요한 정보를 보호한다.

- HTTPS를 사용하는 인플라이트 암호와 더불어 추가적인 보안 레이어를 둔다.

- 비대칭 암호화(asymmectric encryption)를 사용한다

- 중요한 정보는 유저들과 가까이 닿아 있는 edge location에서 암호화 된다. 

- 오직 웹서버에서만 해독이 가능하다.

 

CDN(CloudFront) 실습

속도 차이를 확인해 보기 위해, 글로벌 리전에서 버킷을 새로 만든다.

 

방금 만든 버킷에 들어가서 폴더를 만든다.

 

권한 탭에서 - [퍼블릭 읽기 액세스 권한 부여]에 체크한다

 

같은 방식으로 index.html도 업로드 한다.

그 다음 정적 웹사이트 호스팅을 한다.

 

 

호스팅 영역으로 들어간다. - 레코드 생성

그러면 아까 지정했던 엔드포인트가 보인다.

[레코드 생성]을 클릭한다.

 

그리고 paulo.cloudywinter.shop 으로 접속해 보면

똑같은 웹사이트가 뜨지만, 속도가 확연히 느리다.

 

같은 페이지여도 상파울로의 페이지 로딩 시간이 더 오래 걸린다.(400ms vs 100ms)

=> 상파울로에서 데이터를 로딩할 때, CloudFront에 배포된 정보를 가져오면 응답 시간이 더욱 빨라질 것이다.

 

CloudFront 배포하기

[CloudFront 배포 생성] 클릭

 

원본 도메인을 상파울로로 지정한다.

S3 버킷 액세스 - 둘 간(CloudFront, S3)의 접속과 관련된 보안을 위해서 설정할 수 있다.

예-를 하게 되면, 오직 CloudFront만 버킷으로 접속할 수 있다 - S3에 직접 액세스 하는 것을 막음. 

 

*WAF = Web Application Firewall, 웹 방화벽

대체 도메인 이름(CNAME) - 긴 주소를 미리 대체한다

 

기본값 루트 객체 : ~.com/index.html이 없이 바로 ~.com/이 돼도 나타나도록 한다.

 

우측 마지막 수정이 -배포 -> 연도 시간이 되어야 완료된 것

좌측의 배포 도메인 이름에 접속해보면, 잘 뜬다.

 

 

배포 도메인 이름이 길기 때문에, 다시 Route53에서 이름을 간단하게 바꾼다.

[레코드 생성] 클릭

 

이전에 CF에서 만든 것과 동일하게 레코드 이름을 지정해야 한다.

값을 입력해야 하는데, ip대신 도메인이므로 -> [별칭]으로 바꿔준다.

트래픽 라우팅 대상-  CloudFront 배포에 대한 별칭 으로 지정.

 

좌: 그냥 상파울로 / 우 : CloudFront 한 도메인

일때 우측이 훨씬 빠르다.

 

'Public Cloud > AWS' 카테고리의 다른 글

AWS - 모니터링 및 감사  (0) 2022.07.05
AWS : Serverless - DynamoDB  (0) 2022.07.04
AWS : Load Balancing  (0) 2022.06.29
AWS : Serverless 개요, AWS Lambda  (0) 2022.06.27
Hybrid Cloud 구축하기  (0) 2022.06.21