- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

0 0 105

Người đăng: Lucifer

Theo Viblo Asia

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront. Việc thiết lập cho nó cũng không phải đơn giản, nhưng qua bài hướng dẫn này, các bạn sẽ biết được cách:

  • Cung cấp các bucket file tĩnh từ s3 CloudFront.
  • Triển khai các file tĩnh trên CloudFront trên nhiều regions. (các bạn xem qua bản đồ phía dưới).
  • Get các signed URLs từ CloudFront để sử dụng chúng trong quá trình phát triển (Python).

Các tính năng của CloudFront

Amazon CloudFront là dịch vụ mạng phân phối nội dung toàn cầu (CDN) giúp tăng tốc quá trình phân phối các tệp tĩnh. CloudFront cũng hỗ trợ nội dung dynamic.

Chúng ta cũng có thể sử dụng chúng để xem các báo cáo thống kê bộ nhớ cache, các đối tượng được sử dụng phổ biến nhất và để theo dõi CDN.

Nó có các tính năng bảo mật nâng cao và một số hạn chế về địa lý. Chúng cũng được tích hợp với các dịch vụ của AWS khác như S3.

Ngoài ra, chúng có thể được tích hợp với các blog Wordpress bằng cách sử dụng plugin W3 Total Cache.

Tạo Bucket

Trước hết, chúng ta sẽ cần tạo một bucket: thông tin cơ bản sẽ cần là tên của bucket và Region được lưu trữ.

Tạo CloudFront Key Pairs

Đi đến menu “Security Credentials” :

Tiếp đó chúng ta click vào continue nhé:

Sau đó, chúng ta tạo một cặp khóa, hãy giữ private key thật an toàn nhé, chúng ta sẽ cần phải sử dụng chúng:

Tạo CloudFront Distribution

Bây giờ chúng ta sẽ chuyển đến màn hình console của CloudFront và tiến hành tạo mới Web Distribution:

Giả sử chúng ta đã có bucket có tên là thisisatempbucket

Chúng ta sẽ set domain như sau:

thisisatempbucket.s3.amazonaws.com

Bây giờ chúng ta sẽ đến bước lựa chọn Price Class và trong chức năng này, chúng ta sẽ triển khai các tệp tĩnh của mình cho các regions mà mình muốn:

Liên quan đến định danh, tôi thường tạo một định danh mới cho mỗi bản phân phối mới để có thể tận dụng việc sử dụng tài nguyên AWS được nhiều hơn:

Cuối cùng, chúng ta sẽ các setting về cấu hình và kiểm tra quá trình tạo bản phân phối CloudFront:

Giữ cho content ở chế độ Private

Bây giờ, để giữ cho content ở chế độ private và không thể truy cập được trực tiếp qua S3, chúng ta sẽ hạn chế người xem truy cập và sử dụng các signed URL.

Chuyển đến phần Behavior, nhấp vào Default Behavior và chọn Edit

Chọn Yes để hạn chế quyền truy cập và lưu.

S3 / CloudFront Policy

Bây giờ, hãy quay trở lại bucket để cho phép CloudFront truy cập vào các tệp của nó.

Để thực hiện việc này, chúng ta phải có Origin Access Identity của bản phân phối (chúng ta có thể tìm thấy trong menu origins của bản phân phối CloudFront) và nó tương tự như:

origin-access-identity/cloudfront/EVR8CA2SK123FA

Chúng ta nên thêm các policy sau vào bucket mà chúng ta đang sử dụng làm origin:

{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EVR8CA2SK123FA" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::thisisatempbucket/*" } ]
}

Lưu ý rằng chúng ta đang sử dụng cùng một id trong bucket policy:

EVR8CA2SK123FA

Tạo Signed URLs

Mọi người có nhớ khóa private mà chúng ta đã tải xuống không?

Bây giờ là lúc chúng ta sẽ sử dụng đến nó.

Đây là file script demo cho phép chúng ta đăng ký và tạo URL của tệp tĩnh bằng Python:

import datetime
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from botocore.signers import CloudFrontSigner
def rsa_signer(message): with open('The_Path_To_The_Private_Key', 'rb') as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None, backend=default_backend() ) signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1()) signer.update(message) return signer.finalize()
key_id = 'This_Is_Your_Key_ID'
url = 'http://Your_CloudFront_URL_ID.cloudfront.net/css/file.css'
expire_date = datetime.datetime(2019, 1, 1)
cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
# Create a signed url that will be valid until the specfic expiry date provided using a canned policy.
signed_url = cloudfront_signer.generate_presigned_url(url, date_less_than=expire_date)
print(signed_url)

Làm đến đây, chúng ta có thể thấy rằng có thể sử dụng URL sau để lấy tệp tài nguyên XML của mình:

url = 'http://Your_CloudFront_URL_ID.cloudfront.net'

Tổng kết

Đến đây, các bạn đã nắm rõ được các phần mà mình đề cập từ đầu bài viết về CloudFront của AWS rồi đó. Mong rằng bài viết của mình sẽ giúp các bạn khi làm việc với chúng.

Nguồn tài liệu https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html https://medium.com/faun/using-amazon-cloudfront-content-delivery-network-with-s3-e73861dbe060

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 49

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 128

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 52

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 69

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 125

- vừa được xem lúc

AWS Security group và Network Access Control List

1. Security Group (SG).

0 0 29