1. AWS CloudFront.
AWS CloudFront là một dịch vụ mạng phân phối nội dung (Content Delivery Network – CDN) được cung cấp bởi Amazon Web Services (AWS). Dịch vụ này giúp tăng cường hiệu suất đọc dữ liệu, khi nội dung được lưu trữ ở nhiều điểm trên toàn cầu thông qua việc lưu cache tại điểm lưu trữ ngoại tuyến (edge locations). Với việc sử dụng CloudFront, người dùng sẽ có trải nghiệm tốt hơn về tốc độ truy cập, vì dữ liệu được phân phối một cách hiệu quả tới người dùng cuối.
CloudFront có tổng cộng 216 điểm lưu trữ trên toàn cầu, được gọi là các điểm ngoại tuyến (edge locations). Những điểm ngoại tuyến này được đặt ở những vị trí gần người dùng để giảm thiểu thời gian truy cập và tăng tốc độ tải nội dung. Đồng thời, CloudFront cũng bảo vệ người dùng khỏi các cuộc tấn công từ chối dịch vụ (DDoS) nhờ tích hợp với dịch vụ AWS Shield và AWS Web Application Firewall.
Tóm lại, AWS CloudFront là một dịch vụ CDN giúp cải thiện tốc độ đọc dữ liệu và trải nghiệm người dùng thông qua việc lưu cache tại các điểm lưu trữ ngoại tuyến trên toàn cầu. Nó cũng cung cấp khả năng bảo vệ khỏi các cuộc tấn công DDoS và tích hợp với các dịch vụ bảo mật khác của AWS.
Mình tạo 1 bucket mới tên là demo-cloudfront-stephane-v4 và giữ nguyên các thông số cài đặt mặc định, kéo xuống dưới cùng và bấm Create bucket.
Sau đó mình tiến hành upload 3 file beach.jpg, coffee.jpg và index.html như hình.
Và nếu mở đối tượng chúng ta có 2 cách là bấm và Object URL (truy cập sẽ bị từ chối) hoặc Open (truy cập thành công).
Kết quả bị từ chối truy cập khi bấm vào Object URL.
Kết quả được phép truy cập khi bấm vào Open nhưng bạn không xem được hình ảnh vì lý do hình ảnh không được public ở môi trường internet.
Bây giờ chúng ta hãy làm cho website trên xem được tấm hình bằng cách vào cloudfront.
Lưu ý cloudfront chỉ khả dụng khi vùng của nó là toàn cầu nên nó sẽ không có lựa chọn cho từng khu vực nhé.
Hãy lựa chọn bucket chưa source web của bạn đang demo ở trên.
Origin Access Identity (OAI) là một tính năng của AWS CloudFront, nó giúp bảo vệ tài nguyên gốc (Origin) của bạn bằng cách cho phép chỉ các request đến từ CloudFront tới tài nguyên gốc của bạn được phép truy cập.
Khi tạo một Distribution trong AWS CloudFront, bạn sẽ cần chỉ định Origin – nguồn tài nguyên của bạn, và cấu hình quyền truy cập tới Origin này thông qua phần Origin access identity.
Mặc định, khi bạn tạo một Distribution, phần Origin access identity sẽ được cấu hình là Public, cho phép bất kỳ ai có thể truy cập tới Origin của bạn thông qua CloudFront. Điều này có thể gây ra một số vấn đề bảo mật, vì vậy bạn nên cân nhắc sử dụng Origin access control settings để tăng cường bảo mật cho tài nguyên gốc của mình.
Origin access control settings cung cấp một cách để bạn cấu hình quyền truy cập cho các OAI khác nhau được phép truy cập đến các tài nguyên gốc khác nhau. Ví dụ, bạn có thể chỉ định rằng một OAI cụ thể chỉ được phép truy cập vào một S3 bucket hoặc EC2 instance cụ thể, nhưng không được phép truy cập vào các tài nguyên khác.
Tuy nhiên, nếu bạn đang sử dụng một tài khoản AWS được tạo trước ngày 27 tháng 03 năm 2020, bạn có thể sử dụng Legacy access identities thay vì sử dụng Origin access control settings. Nếu bạn đang sử dụng Legacy access identities, các OAI sẽ được sử dụng để giới hạn quyền truy cập của CloudFront vào các tài nguyên gốc, tuy nhiên, chức năng này sẽ không cung cấp các tính năng bảo mật tương tự như Origin access control settings.
Bây giờ chúng ta hãy lựa chọn Origin access là Origin access control settings (recommended) và bấm vào Create control setting.
Giữ nguyên cài đặt và bấm Create.
Chúng ta được kết quả ở Origin access control như dưới.
Hãy bỏ qua mọi thứ và kéo xuống dưới cùng đến phần Default root object – optional hãy nhập 1 đối tượng mặc định mà cloudfront sẽ tải và bấm vào Create distribution.
Thông báo Successfully created new distribution cho biết bạn đã tạo thành công cloudfront nhưng bên cạnh đó bạn cũng nhận thêm được 1 thông báo The S3 bucket policy needs to be updated cho biết bạn cần phải cập nhật 1 chính sách cho phép cloudfront truy cập vào bucket nguồn bằng cách bấm vào Copy policy để lấy cấu hình config dạng json.
Bây giờ chúng ta phải cập nhật chính sách cho bucket, cho phép cloudfront truy cập vào bucket của bạn bằng cách vào Amazon 53 > Buckets > demo-cloudfront-stephane-v4 > Permissions và kéo xuống dưới phần Bucket policy bạn sẽ thấy hiện tại ở đây nó đang trống và như vậy thì cloudfront không truy cập được, hãy bấm vào Edit.
Và dán đoạn json đã copy ở trên vào đây và lưu lại.
Giả sử bạn lỡ tắt thông báo mà chưa kịp copy lại đoạn config bằng json thì có thể lấy lại bằng cách vào CloudFront > Distributions > E3SPO9XUHS0GNB chọn Origins name của bạn và bấm vào Edit.
Kéo xuống phần Origin access và bạn sẽ nhìn thấy Copy policy ở tuỳ chọn Bucket policy.
Quay lại phần cloudfront tại phần Last modified bạn thấy nó đang ở trạng thái Deploying và bạn phải chờ cho đến khi nó triển khai xong.
Và sau 1 thời gian chờ đợi bạn hãy nhìn lại tại phần Last modified đã có thông báo mới November 10, 2022 at 3:09:19 PM UTC cho biết cloudfront đã triển khai xong. Bây giờ bạn hãy copy url tại Distribution domain name và dán vào trình duyệt.
Và bạn có kết quả website đã đọc được hình ảnh coffee.jpg.
Ở trong storage của mình còn có thêm file beach.jpg nên mình sẽ gõ url/beach.jpg trực tiếp trên trình duyệt và chúng ta có kết quả.
Và có 1 lưu ý rằng các tấm hình chúng ta xem được phục vụ bởi cloudfront chứ không phải từ s3 của bạn.
2. CloudFront – Origins.
CloudFront là một dịch vụ CDN (Content Delivery Network) cho phép tăng tốc độ đọc nội dung bằng cách đặt bộ nhớ cache tại các điểm lưu trữ (edge locations) phía gần người dùng. Các điểm lưu trữ này là các trung tâm dữ liệu được phân bố trên toàn cầu.
Để lấy nội dung từ các nguồn, CloudFront hỗ trợ các nguồn khác nhau (Origins), bao gồm:
- S3 bucket: CloudFront có thể phân phối các file từ S3 và đặt bộ nhớ cache tại các điểm lưu trữ. Ngoài ra, CloudFront cung cấp tính năng bảo mật tăng cao thông qua CloudFront Origin Access Control (OAC), thay thế cho Origin Access Identity (OAI). CloudFront cũng có thể được sử dụng như một điểm đầu vào để tải lên file vào S3.
- Custom Origin (HTTP): CloudFront có thể phân phối nội dung từ các trang web hoặc ứng dụng web khác, chẳng hạn như các máy chủ web hoặc cân bằng tải ứng dụng (Application Load Balancer).
- EC2 instance: CloudFront có thể phân phối nội dung từ các ứng dụng chạy trên EC2 instances.
- S3 website: Nếu S3 bucket được kích hoạt là một trang web tĩnh, CloudFront có thể phân phối nội dung từ S3 website.
Với CloudFront, các file được phân phối nhanh chóng tới người dùng cuối, giúp cải thiện trải nghiệm người dùng và bảo vệ khỏi các cuộc tấn công DDoS nhờ tích hợp với các dịch vụ như AWS Shield và AWS Web Application Firewall.
3. CloudFront – S3 as an Origin.
CloudFront là một dịch vụ CDN (Content Delivery Network) của Amazon Web Services (AWS), được thiết kế để cải thiện tốc độ truy cập và trải nghiệm người dùng bằng cách phân phối nội dung trên toàn thế giới thông qua các trung tâm dữ liệu. Khi sử dụng CloudFront, bạn có thể sử dụng các nguồn gốc khác nhau để cung cấp nội dung của mình. S3 bucket là một trong những nguồn gốc phổ biến được sử dụng để phân phối file và bộ nhớ cache chúng tại các vị trí đầu cuối.
Để sử dụng S3 bucket như là nguồn gốc cho CloudFront, bạn cần tạo một S3 bucket để lưu trữ file của mình, sau đó thiết lập một bản sao của nội dung đó tại các vị trí đầu cuối trên toàn cầu bằng cách sử dụng CloudFront. Khi có một yêu cầu truy cập file từ khách hàng, CloudFront sẽ tìm kiếm file ở vị trí đầu cuối gần nhất và trả về cho khách hàng đó. Việc này giúp cải thiện tốc độ truy cập của khách hàng và giảm tải cho máy chủ S3.
Ngoài ra, bạn có thể sử dụng S3 bucket để cung cấp bảo mật cho file của mình thông qua tính năng CloudFront Origin Access Control (OAC). OAC cho phép bạn giới hạn quyền truy cập vào các file trong bucket của mình bằng cách chỉ định một hoặc nhiều địa chỉ IP được phép truy cập.
Cuối cùng, bạn cũng có thể sử dụng CloudFront như là một kênh để tải lên các file của mình lên S3 bucket. Điều này có thể được thực hiện thông qua các yêu cầu POST và PUT đến CloudFront, đóng vai trò là một cổng vào cho S3 bucket của bạn. CloudFront sau đó sẽ lưu trữ file của bạn trong S3 bucket và phân phối nội dung đó tới các vị trí đầu cuối của nó trên toàn cầu.
4. CloudFront vs S3 Cross Region Replication.
CloudFront là một dịch vụ mạng lưới phân phối nội dung (Content Delivery Network – CDN) toàn cầu được sử dụng để cải thiện hiệu suất đọc của ứng dụng web và tối ưu trải nghiệm người dùng. CloudFront lưu trữ bản sao các tài nguyên (như hình ảnh, video, file HTML) trên nhiều vị trí trên toàn thế giới, được gọi là edge location, giúp giảm thời gian đáp ứng và tải trang nhanh hơn cho người dùng ở gần đó.
S3 Cross Region Replication là tính năng của Amazon S3 cho phép sao chép các đối tượng S3 tự động giữa các vùng khác nhau. Khi bạn bật S3 Cross-Region Replication cho một bucket, các đối tượng trong bucket đó sẽ được tự động sao chép đến một hoặc nhiều buckets khác ở các vùng khác nhau. Tính năng này giúp đảm bảo tính sẵn sàng và khả dụng của dữ liệu, giảm thiểu tác động của sự cố hệ thống hoặc thảm họa tự nhiên. Tuy nhiên, S3 Cross-Region Replication chỉ hỗ trợ chế độ đọc và các tài nguyên đọc sẽ được sao chép sang các bucket đích, các tài nguyên mới sẽ không được sao chép trở lại bucket nguồn. Nó được sử dụng chủ yếu cho các nội dung động cần sẵn sàng và phân phối nhanh chóng trong một số khu vực nhất định.
5. CloudFront – ALB or EC2 as an origin.
Khi sử dụng CloudFront, bạn có thể sử dụng một số loại origin khác nhau để cung cấp nội dung cho edge locations. Bên cạnh việc sử dụng S3 như là một origin, CloudFront cũng hỗ trợ việc sử dụng Application Load Balancer (ALB) hoặc Amazon EC2 instance như là origin.
Khi sử dụng ALB hoặc EC2 instance như là origin, bạn có thể cung cấp nội dung động, bao gồm HTML, CSS, JavaScript, v.v., cho các trang web hoặc ứng dụng của bạn. Khi bạn sử dụng ALB, bạn có thể định tuyến yêu cầu đến nhiều EC2 instances khác nhau để đáp ứng lưu lượng truy cập của bạn. Nếu sử dụng EC2 instance, bạn có thể triển khai ứng dụng của mình trực tiếp trên các instance đó.
CloudFront cho phép bạn định cấu hình nhiều origin khác nhau để cung cấp dịch vụ, và bạn có thể định tuyến yêu cầu đến origin tương ứng với đường dẫn yêu cầu. Ví dụ, nếu yêu cầu của người dùng đến “/api/*” thì CloudFront có thể định tuyến yêu cầu đó đến một origin khác để xử lý các yêu cầu API.
Khi sử dụng ALB hoặc EC2 instance như là origin, bạn cũng có thể sử dụng các tính năng bảo mật của CloudFront, bao gồm SSL/TLS, CloudFront Signed URLs hoặc Signed Cookies, và Amazon CloudFront Shield. Các tính năng này giúp bảo vệ ứng dụng của bạn khỏi các mối đe dọa bảo mật như tấn công DDoS, truy cập trái phép và lộ thông tin.
3. CloudFront Geo Restriction.
CloudFront Geo Restriction là tính năng cho phép bạn giới hạn người dùng nào có thể truy cập vào nội dung được phân phối trên CloudFront. Bạn có thể thiết lập một danh sách các quốc gia được phép truy cập (allowlist) hoặc một danh sách các quốc gia bị cấm truy cập (blocklist). Việc xác định quốc gia được thực hiện bằng cách sử dụng cơ sở dữ liệu Geo-IP của bên thứ ba.
Tính năng này có thể được sử dụng để giữ cho nội dung của bạn tuân thủ pháp luật bản quyền hoặc để kiểm soát quyền truy cập vào nội dung của bạn từ các quốc gia cụ thể. Ví dụ, nếu bạn phân phối một bộ sưu tập phim độc quyền chỉ dành cho người xem ở một số quốc gia, bạn có thể sử dụng tính năng này để chỉ cho phép người dùng từ các quốc gia được phép truy cập vào nội dung của bạn, và ngăn cản người dùng từ các quốc gia bị cấm truy cập vào nội dung đó.
Chúng ta vào CloudFront › Distributions › E3SPO9XUHSOGNB › Geographic restrictions và bấm Edit.
Tại Restriction type mình chọn Allow list và Countries là United States và India.
Nếu bạn đặt Allow List và chọn United States và India trong danh sách các quốc gia được phép, thì người dùng sẽ chỉ có thể truy cập nội dung của bạn nếu họ đến từ một trong hai quốc gia này. Bất kỳ người dùng nào đến từ một quốc gia khác sẽ không thể truy cập nội dung của bạn.
Ví dụ, nếu bạn cấu hình Allow List và chỉ chọn United States và India, thì khách truy cập đến từ Mỹ và Ấn Độ sẽ có thể truy cập vào nội dung của bạn, nhưng người dùng ở các quốc gia khác sẽ không thể truy cập vào nội dung của bạn.
4. CloudFront – Pricing.
CloudFront Edge locations là một mạng lưới các server đặt tại nhiều địa điểm trên thế giới để cung cấp dịch vụ CDN cho khách hàng. Tuy nhiên, giá cước cho việc truyền dữ liệu từ các địa điểm này sẽ khác nhau. AWS tính giá dịch vụ CloudFront theo nhiều yếu tố, trong đó bao gồm cả lưu lượng truyền ra từ các Edge location. Vì vậy, việc truyền dữ liệu ra từ các Edge location càng nhiều thì chi phí phát sinh sẽ càng cao. Nên khi sử dụng dịch vụ CloudFront, người dùng cần xem xét và tính toán chi phí cho việc truyền dữ liệu ra từ các Edge location để đưa ra quyết định tối ưu cho mình.
5. CloudFront Price Classes.
AWS CloudFront cung cấp ba price class khác nhau để tối ưu hóa chi phí cho việc phân phối nội dung. Mỗi price class bao gồm các khu vực khác nhau để giảm thiểu chi phí cho việc sử dụng dịch vụ.
- Price Class All: Price class này cho phép truy cập vào tất cả các edge location của AWS CloudFront trong toàn cầu, cung cấp hiệu suất tốt nhất. Tuy nhiên, giá thành sử dụng dịch vụ trong price class này là cao nhất so với hai price class khác.
- Price Class 200: Price class này cung cấp truy cập đến hầu hết các edge location của AWS CloudFront, loại bỏ một số khu vực đắt đỏ nhất để giảm thiểu chi phí sử dụng dịch vụ. Price class này phù hợp cho các ứng dụng phân phối nội dung lớn, có lượng truy cập khá cao.
- Price Class 100: Price class này chỉ cho phép truy cập đến những edge location có giá thành thấp nhất. Price class này phù hợp cho các ứng dụng phân phối nội dung có lượng truy cập thấp hoặc các ứng dụng có ngân sách giới hạn.
Tùy thuộc vào yêu cầu của ứng dụng và ngân sách của bạn, bạn có thể lựa chọn price class phù hợp để tối ưu hóa chi phí sử dụng dịch vụ phân phối nội dung của AWS CloudFront.
6. CloudFront Cache Invalidations.
Trong trường hợp bạn cập nhật nội dung trên back-end origin, CloudFront sẽ không biết về sự thay đổi này và chỉ nhận được nội dung đã cập nhật sau khi TTL đã hết hạn. Tuy nhiên, bạn có thể buộc CloudFront làm mới cache toàn bộ hoặc một phần cache (bỏ qua TTL) bằng cách thực hiện một CloudFront Invalidation.
Invalidation là quá trình xóa các phiên bản được lưu trữ tạm thời của các đối tượng hoặc file tại các điểm cuối CloudFront. Bạn có thể thực hiện invalidation cho toàn bộ nội dung hoặc một phần bằng cách chỉ định một đường dẫn, hoặc một tập hợp các đường dẫn, đến các file hoặc đối tượng cụ thể.
Khi bạn thực hiện một invalidation, CloudFront sẽ xóa phiên bản cache hiện tại của các file hoặc đối tượng được liệt kê trong invalidation. Sau đó, khi người dùng yêu cầu nội dung đó, CloudFront sẽ lấy nội dung mới từ origin và cập nhật lại cache. Lưu ý rằng quá trình invalidation có thể mất thời gian để hoàn tất, tùy thuộc vào số lượng file hoặc đối tượng được liệt kê trong invalidation và số lượng điểm cuối CloudFront.
Bạn có thể thực hiện invalidation toàn bộ (tất cả các file và đối tượng được lưu trữ tạm thời), hoặc invalidation một phần bằng cách chỉ định một đường dẫn hoặc một số đường dẫn đến các file hoặc đối tượng cụ thể.