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
- 프리미엄 유저에게만 파일을 배포하고 싶을 때
- 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 그룹
- HA와 failover를 위해
- 하나는 primary origin으로, 다른 하나는 secondary origin으로 둔다.
- primary origin이 fail이 나면, secondary origin이 대체된다.
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 |