11. CloudFront (AWS Certified Developer Associate)
1. CloudFront 기본
CloudFront는 컨텐츠 전달 네트워크, 즉 CDN을 뜻하며 분배 및 캐시가 되기 때문에 판독 능력을 향상시는데 도움이된다.
또한 캐싱 외에도 DDoS 보호도 제동하는데 서비스 거부를 배포하는 이러한 공격으로부터 보호막과 웹 어플리케이션 방화벽을 제공한다.
핵심은 보안이 철저하다는 것과 애플리케이션을 전 세계적으로 배포하기에 좋은 프론트라는 것을 알아두자!
그리고 인증서를 도르하여 외부 HTTPS 엔드 포인트를 노출하고 해당 트래픽을 암호화해야 하는 경우 내부 HTTPS에서 애플리케이션에 내부적으로 통신하게끔 해준다.
2. CloudFront - Origins
- S3 bucket
S3 버킷앞에 클라우드 프론트를 사용하는 겨우는 전 세계에 파일을 배포하고 엣지에서 캐시할 때 아주 흔히 사용된다.
그리고 오리진 액세스 신분(OAI)으로 클라우드 프론트와 S3 사이의 보안을 강화한다.
- 커스텀 오리진 (HTTP)
EC2 또는 S3 웹사이트 등 HTTP 프로토콜을 준할 수 있는 무엇이든 가능하다. 단 우선 정적 S3 웹사이트로 버킷을 활성화해야 한다는 점이 버킷과는 다른 점이다.
3. CloudFront at a high level
4 CloudFront Origin
CloudFront로 S3를 각 국으로 Orgin을 위한 그림이다. 간단히 설명만 하고 넘어가자
먼저 AWS 클라우드에 S3 버킷을 생성을 했다. 이때 각 나라에서 해당 S3 버킷에게 요청을 보내기 위해선 각 나라에 가까운 고용 엣지 로케이션에 요청을 전송하게 된다. 그리고 S3 버킷과 엣진 로케이션은 Private AWS 통신을 하는데 이떄 중요한 것이 서로 소통을 하기위해 IAM 역할인 OAI, 즉 오리진 액세스 신분을 사용해야된다. IA역할을 이용해 파일을 클라우드 프론트로 전달하게 되는 것이다. 이러한 과정들을 CloudFront는 CDN으로 유용하게 사용된다.
5. CloudFront와 ALB OR EC2 Origin
전체적인 흐름은 위와 동일하나 보안 부분이 조금 달라진다.
EC2 : HTTP 통신을 통해 공용 액세스가 가능하게끔 해야되기 때문에 보안 그룹은 클라우드 프론트 엣지 로케이션의 IP를 EC2 인스턴스 내로 허용 해야된다.
ALB : 엣지 로케이션의 경우 고용 네트워크를 통해 ALB를 액세스 해야된다. 즉 ALB의 보안 그룹은 엣지 로케이션의 고용 IP를 허용해야된다.
6. CloudFront 의 지리적 제한
제한방법은 크게 두가지이다. 바로 화이트리스트와 블랙리스트이다.
화이트리스트 : 클라우드 프론트에 액세스 할 수 있도록 특정 국가를 허용해주는 리스트
블랙리스트 : 클라우드 프론트에 액세스 할 수 없도록 특정 국가를 제한시키는 리스트
7. CloudFront Caching
모든 캐시는 엣지 로케이션에 저장되며 클라이언트가 클라우드 프론트 엣지 로케이션에 요청을 보내면 해더 값, 쿠키 및 캐시 문자열 파라미터를 기반으로 캐시는 캐시 내의 TTL을 기반으로 만료일을 설정 후 해당 데이터를 제공해준다. 만약 캐시에 값이 없는 경우 쿼리 또는 HTTP 요청이 오리진으로 직접 전달되며 이 후 캐시에 저장된다. 즉 캐시 히트를 늘려 오리진 요청을 최소화하는데 사용되는 것!
8. 고급 옵션
8 -1. 가격 등급
엣지 로케이션이 위치한 지리적 위치에 따라 요금이 다르다.
전 세계에 걸쳐 클라우드 프론트 분산에 사용할 엣지 로케이션의 수를 줄려 가격을 낮출 수있다.
가격 등급은 총 3가지로 Price Class All, Price Class 200, Price Class 100이 존재하는데 순서대로 높은 가격이며 All은 모든 지역, 200은 가장 비싼 지역을 제외한 나머지, 100은 미국,북미 유럽을 제공한다. 자세한건 아래 그림을 보면서 참고하자
8-2. 다중 오리진
예를 들어 API/* 결로를 사용 중인 경우 ALB가 되는 오리진으로 부터 회신이 필요하다고 할 수 있는데 그 외의 모든 경로 /*를 요철할 경유 변하지 않는 콘텐츠일경우 S3 버킷에서 가져와야 한다. 이런식으로 각 서비스에서 사용되는 결로를 기반으로 다중 오리진이 정의된다.
마찬가지로 오리진 그룹을 설정할 수 있는데 이경우 고가용성을 증가시키고 한 오리진에서 장애가 발생한 경우 조치가 가능하게 해준다.
예를 들어 2개의 EC2로 구성된 오리진 그룹이 있을때 CloudFront이 주 EC2에 요청을 보내고 에러가 돌아온다면 Front는 동일한 요청을 서브 EC2에 다시 전송해 올바른 회신을 전송 받을 수 있도록 할 수 있다.
만약 S3와 CloudFront를 오리진 그룹과 함께 사용한다면, 지역단위 고가용성과 재해 복구가 가능해지는데 그 이유는 서로 다른 리전에 S3를 생성해 주 S3의 데이터를 서브 S3에 실시간으로 데이터를 복제하는데 만약 주 S3가 장애가 발생하면 서브 S3에게 데이터를 전송 받으면 되니 앞에 말안 지역단위 고가용성과 재해 복구가 가능하다.
8-3 필드 수준의 암호화
이는 애플리케이션 스택을 통해 민감한 정보를 보호하는 기능으로 HTTPS를 사용하는 인플라이트 암호화와더불어 추가적인 보안을 더해 준다. 즉, 사용자가 민감한 정보를 정송할 때마다 엣지 로케이션이 이를 암호화하고 개인 키에 대한 권한을 지닌 사용자만이 정보를 해독할 수 있도록 하는 개념이다. (이 기능은 비대칭 암호화를 사용한다.)
작동원리는 어떨까?????
CloudFront로 보내는POST 패킷일 경우 암호화를 원하는 필드를 최대 10까지 지정할 수 있다. 예를 들어 신용카드를 들어보자!
HTTPS를 엣지 로케이션으로 전달하는 클라이언트가 있다. 그럼 엣지 로케이션은 다시 HTTPS를 통해 CloudFront로 전달하고 ALB를 통해 웹 서버로 전달된다.