Amazon S3 và CloudFront: từng bước
Kết nối bucket S3 riêng tư với DRM-X 6.0 với các quyền trong phạm vi IAM, trình duyệt CORS, CloudFront HTTPS phân phối và danh sách kiểm tra xác minh tải lên.
1. Hiểu được sự kết nối#
DRM-X tải trực tiếp lên S3 bằng các yêu cầu đã ký. Người xem tải xuống phương tiện được mã hóa thông qua CloudFront trên HTTPS. Luôn bật S3 Block all public access; CloudFront có quyền truy cập đọc trong phạm vi thông qua Origin Access Control (OAC).
CloudFront cung cấp hostname https://….cloudfront.net có thể dùng trong môi trường thực tế. Miền riêng là tùy chọn. Phân phối công khai cho phép truy cập byte của đối tượng; DRM vẫn kiểm soát giải mã nội dung được đóng gói đúng cách. CORS không phải cơ chế cấp quyền. Hướng dẫn này dùng phân phối CDN công khai thông thường. URL hoặc cookie có chữ ký dành cho người xem cần được tích hợp riêng.
2. Tạo bucket S3 của bạn#

- Mở Amazon S3 → General purpose buckets → Create bucket.
- Chọn một vùng và ghi lại mã của nó, chẳng hạn như
us-east-1. Chọn General purpose. Nếu được yêu cầu không gian tên, hãy sử dụng Global namespace cho hướng dẫn này. - Nhập tên bucket duy nhất trên toàn cầu của riêng bạn. Giữ Object Ownership → ACLs disabled (Bucket owner enforced).
- Luôn chọn Block all public access. Bạn sẽ cấp quyền truy cập CloudFront thông qua chính sách có phạm vi.
- Trong hướng dẫn này, giữ Default encryption → Server-side encryption with Amazon S3 managed keys (SSE-S3). Đây là lớp mã hóa lưu trữ bổ sung, không thay thế đóng gói DRM. SSE-KMS yêu cầu thêm quyền KMS cho bên tải tệp lên và CloudFront.
- Xem lại và tạo bucket. Không bật S3 lưu trữ trang web tĩnh.
3. Tạo người dùng IAM với quyền giới hạn và khóa truy cập#
- Mở IAM → Policies → Create policy → JSON. Dán chính sách bên dưới, thay thế tên bucket ví dụ ở mọi nơi.
- Ví dụ chỉ cho phép
protected/. Nếu bạn sử dụng đường dẫn cơ sở khác, hãy cập nhật cả điều kiện tiền tố và đối tượng ARN. Để sử dụng Buck-root, hãy loại bỏ điều kiện tiền tố ListBucket và sử dụngarn:aws:s3:::YOUR_BUCKET/*cho các đối tượng. - Lưu chính sách. Mở IAM → Users → Create user, tạo người dùng tích hợp chuyên dụng không có quyền truy cập AWS Console và chỉ đính kèm chính sách này.
- Mở Security credentials → Access keys → Create access key của người dùng. Chọn trường hợp sử dụng cho ứng dụng chạy bên ngoài AWS và làm theo lời nhắc. Giữ lại Access key ID và Secret access key cho DRM-X một cách an toàn.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListProtectedFolder",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::customer-drm-media-example",
"Condition": {
"StringLike": {
"s3:prefix": [
"protected",
"protected/",
"protected/*"
]
}
}
},
{
"Sid": "BucketRegion",
"Effect": "Allow",
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::customer-drm-media-example"
},
{
"Sid": "ManageProtectedObjects",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::customer-drm-media-example/protected/*"
}
]
}Không sử dụng khóa gốc hoặc AdministratorAccess. Việc sao chép sử dụng GetObject và PutObject; không có hành động s3:CopyObject IAM riêng biệt. Đổi tên cũng cần DeleteObject. Hướng dẫn này tuân theo mẫu khóa truy cập hiện tại của DRM-X; riêng vai trò ARN không thay thế được cặp khóa.
4. Định cấu hình S3 CORS để tải lên trình duyệt#
- Mở bucket S3 của bạn → Permissions.
- Cuộn tới Cross-origin resource sharing (CORS) → Edit.
- Dán JSON bên dưới. Dùng * cho việc đọc nội dung đa phương tiện được mã hóa và phân phối công khai, đồng thời chỉ cho phép tải lên từ DRM-X Console. Giữ lại các quy tắc cần thiết khác trong bucket hiện có.
- Chọn Save changes. Luôn bật Block Public Access: CORS không công khai bucket.
[
{
"AllowedOrigins": [
"https://6.drm-x.com"
],
"AllowedMethods": [
"PUT"
],
"AllowedHeaders": [
"Content-Type",
"x-amz-meta-drmx-sha256"
],
"ExposeHeaders": [
"ETag"
],
"MaxAgeSeconds": 3600
},
{
"AllowedOrigins": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD"
],
"AllowedHeaders": [
"Range"
],
"ExposeHeaders": [
"ETag",
"Content-Length",
"Content-Range",
"Accept-Ranges"
],
"MaxAgeSeconds": 3600
}
]Cấu hình tải lên có chữ ký trên S3 và CORS phát trên cả S3 lẫn CloudFront. Ở bước 5, dùng cùng các origin phát trong chính sách tiêu đề phản hồi của CloudFront.
5. Tạo URL phân phối HTTPS bằng CloudFront#
- Mở CloudFront → Distributions → Create distribution. Sử dụng phân phối chuẩn. Nếu AWS hiển thị lựa chọn gói giới thiệu hoặc gói giá, hãy xem xét và chọn gói phù hợp với tài khoản của bạn trước khi tạo tài nguyên.
- Chọn S3 REST origin bình thường của bucket, chứ không phải điểm cuối trang web của bucket. Để trống Origin path trống để ánh xạ thư mục được sử dụng trong hướng dẫn này.
- Chọn Origin access control settings (recommended). Tạo hoặc chọn OAC với Sign requests (recommended).
- Đặt chính sách giao thức của người xem thành Redirect HTTP to HTTPS hoặc HTTPS only. Cho phép GET, HEAD, OPTIONS. Nội dung tải lên sử dụng điểm cuối S3 nên CloudFront không cần PUT.
- Tạo bản phân phối. Áp dụng chính sách bucket do CloudFront tạo trong S3 → Bucket → Permissions → Bucket policy → Edit. Hợp nhất với các câu lệnh hiện có được yêu cầu. Hạn chế quyền truy cập vào ARN của bản phân phối này. Ví dụ bên dưới giới hạn đọc là
protected/. - Mở CloudFront → Policies → Response headers → Create response headers policy. Định cấu hình các trường CORS trong bảng bên dưới. Đính kèm chính sách này với hành vi mặc định/phương tiện của bản phân phối.
- Đợi quá trình triển khai hoàn tất. Sao chép Distribution domain name. Nguồn gốc phân phối của bạn là
https://YOUR_DISTRIBUTION.cloudfront.net.
| Response headers trường chính sách | Giá trị |
|---|---|
| Access-Control-Allow-Origin | * (khuyến nghị cho nội dung đa phương tiện được mã hóa và phân phối công khai). Nếu chọn các origin cụ thể trong công cụ tạo, hãy dùng cùng danh sách đó tại đây. |
| Access-Control-Allow-Methods | GET, HEAD, OPTIONS |
| Access-Control-Allow-Headers | Range |
| Access-Control-Expose-Headers | ETag, Content-Length, Content-Range, Accept-Ranges |
| Access-Control-Allow-Credentials | Đã bị tắt đối với quy trình làm việc của phương tiện được mã hóa công khai này. |
| Access-Control-Max-Age | 3600 |
| Origin override | Được bật để CloudFront kiểm soát hướng nhìn của người xem CORS một cách nhất quán. |
Đối với OPTIONS preflight, hãy đính kèm chính sách yêu cầu nguồn gốc CORS-S3Origin được quản lý. Nó chuyển tiếp Origin, Access-Control-Request-Method và Access-Control-Request-Headers tới S3. Ban đầu chỉ lưu vào bộ nhớ đệm GET/HEAD, tắt bộ nhớ đệm OPTIONS. Nếu sau này bạn lưu vào bộ đệm OPTIONS, hãy đưa các tiêu đề này vào khóa bộ đệm của nó và kiểm tra nguồn gốc trình phát khác nhau; chỉ chuyển tiếp tiêu đề không thêm nó vào khóa bộ đệm.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowThisCloudFrontDistribution",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::customer-drm-media-example/protected/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EEXAMPLE123"
}
}
}
]
}Thay thế tài khoản mẫu ID, phân phối ID và tên bucket. SourceArn phải xác định bản phân phối bạn vừa tạo. Sau khi thay đổi tiêu đề, hãy vô hiệu hóa các đường dẫn kiểm tra/phương tiện bị ảnh hưởng nếu các phản hồi trước đó vẫn được lưu vào bộ đệm.
Tùy chọn: sử dụng media.example.com
- Yêu cầu chứng chỉ công khai ACM bao gồm tên máy chủ của bạn trong US East (N. Virginia), us-east-1 và hoàn tất xác thực DNS.
- Thêm tên máy chủ theo Alternate domain names của bản phân phối và đính kèm chứng chỉ của nó.
- Tại nhà cung cấp DNS của bạn, hãy tạo bí danh CNAME hoặc được hỗ trợ trỏ đến tên máy chủ CloudFront. Đợi DNS, chứng chỉ và triển khai phân phối.
- Sử dụng
https://media.example.comlàm nơi phân phối của bạn. Chỉ DNS CNAME là không đủ nếu không thiết lập chứng chỉ và miền CloudFront.
6. Kết nối Amazon S3 với DRM-X 6.0#
Mở Cloud Storage → Connect storage. Chọn Amazon S3.
| Tìm kiếm | Nhập gì |
|---|---|
| Display name | Tên dễ nhận biết, chẳng hạn Production S3. |
| Bucket name | Tên chính xác, không có s3://. |
| Region | Mã vùng AWS chính xác của bucket. |
| Protected-content base path | protected, phù hợp với chính sách IAM và bucket. |
| Public URL prefix | https://YOUR_DISTRIBUTION.cloudfront.net/protected hoặc https://media.example.com/protected. |
| Access key ID / Secret access key | Cặp khóa chuyên dụng của người dùng IAM. |
Các ví dụ sử dụng thư mục có tên protected. Tên bucket không tự động là một thư mục. Với ánh xạ miền trực tiếp đến bucket được sử dụng ở đây, hãy bao gồm cùng một thư mục lưu trữ chính xác một lần trong tiền tố URL công khai.
Bucket: customer-drm-media-example
Protected-content base path: protected
Public URL prefix: https://media.example.com/protected
File selected for upload: sample.encrypted.bin
Object key in the bucket: protected/sample.encrypted.bin
Preview URL: https://media.example.com/protected/sample.encrypted.binĐể sử dụng bucket gốc, hãy để trống đường dẫn cơ sở và chỉ nhập nguồn gốc phân phối làm tiền tố công khai. Không thêm tên bucket trừ khi bạn cố tình sử dụng nó làm thư mục. Để trống CloudFront Origin path cho ánh xạ này.
Chọn đích tải lên mặc định nếu muốn, sau đó Save and verify. Tên máy chủ S3 API không phải là CloudFront phân phối URL của bạn.
Chính sách * cho phép trình duyệt đọc từ mọi trang web; quyền giải mã vẫn do việc cấp phép DRM kiểm soát. Dùng bucket riêng cho nội dung đa phương tiện được mã hóa và tài nguyên dự định công khai. Yêu cầu nội dung đa phương tiện phải bỏ cookie khác origin; phân phối có xác thực bằng cookie cần cấu hình CORS riêng.
Tạo các trường CORS của bạn và các trường URL phù hợp
Công cụ này chạy trong trình duyệt của bạn. Chỉ nhập nguồn gốc công khai; nó không yêu cầu khóa truy cập.
- Protected-content base path
- Public URL prefix
- Ví dụ về khóa đối tượng
- Ví dụ URL đầy đủ
7. Tải lên một tệp và xác minh rằng nó hoạt động#
- Mở Cloud Storage, chọn điểm đến này và chọn Verify location. Thành công có nghĩa là máy chủ DRM-X có thể liệt kê bucket. Nó không thiết lập quyền ghi, trình duyệt CORS hoặc phân phối công khai.
- Chọn Upload encrypted files và chọn một phân đoạn nhỏ được mã hóa từ gói DRM-X hiện có. Nếu bạn không có gói, hãy sử dụng chẩn đoán được mã hóa dùng một lần bên dưới. Không tải lên video gốc hoặc tài liệu cá nhân.
- Chờ thông báo thành công. Kiểm tra xem tên tệp và kích thước có xuất hiện trong Cloud Storage hay không. Tìm đối tượng tương tự trong
protected/trong bảng điều khiển nhà cung cấp của bạn. - Mở Preview URL trong cửa sổ trình duyệt riêng tư. Xác nhận đối tượng đã tải lên trả về HTTP 200 mà không cần đăng nhập.
- Kiểm tra phản hồi manifest và nội dung đa phương tiện trong bảng Network của trình duyệt. Với chính sách mặc định,
Access-Control-Allow-Originphải là *; với chính sách giới hạn, giá trị phải khớp chính xác origin của trình phát. Mở URL trực tiếp không kiểm tra CORS. - Chỉ xóa đối tượng chẩn đoán dùng một lần của bạn khi hoàn tất. Sau đó làm theo hướng dẫn Desktop Packager, chọn đích lưu trữ này trong Package content và tải gói mã hóa hoàn chỉnh lên. Tải tệp lên theo cách thủ công không đăng ký Published Content ID.
- Kiểm tra tệp Published thu được trong Universal Playback Lab và trang web trình phát của riêng bạn. Xác minh video, âm thanh, tua trên thanh thời gian và các thiết bị cần thiết của bạn. Tải xuống nhị phân thành công không phải là bằng chứng cho việc phát lại DRM.
Không có mẫu mã hóa? Tạo tệp thử nghiệm dùng một lần trên Windows
Chạy cái này trong Windows PowerShell trong thư mục tạm thời mà bạn kiểm soát. Nó mã hóa một tin nhắn ngắn không mang tính cá nhân bằng khóa AES dùng một lần chỉ được giữ trong bộ nhớ. Đầu ra là chẩn đoán lưu trữ, không phải phương tiện có thể phát được; nó không chứa DRM khóa nội dung hoặc dữ liệu khách hàng.
$samplePath = Join-Path (Get-Location) 'drmx-storage-check.encrypted.bin'
if (Test-Path -LiteralPath $samplePath) { throw 'Choose a new folder; this test file already exists.' }
$aes = [System.Security.Cryptography.Aes]::Create()
try {
$aes.GenerateKey()
$aes.GenerateIV()
$encryptor = $aes.CreateEncryptor()
try {
$bytes = [Text.Encoding]::UTF8.GetBytes('DRM-X disposable storage check')
$encrypted = $encryptor.TransformFinalBlock($bytes, 0, $bytes.Length)
[IO.File]::WriteAllBytes($samplePath, $encrypted)
} finally { $encryptor.Dispose() }
} finally { $aes.Dispose() }
Get-Item -LiteralPath $samplePath | Select-Object Name, LengthTải lên drmx-storage-check.encrypted.bin, xác minh kích thước của nó và Preview URL, sau đó xóa nó khỏi bucket.
curl.exe -I -H "Origin: https://www.example.com" "https://media.example.com/protected/sample.encrypted.bin"Thay cả hai URL. Với chính sách mặc định, kết quả mong đợi là HTTP 200 và Access-Control-Allow-Origin: *. Yêu cầu GET với Range: bytes=0-15 phải trả về HTTP 206 và Content-Range. Giữ nguyên các loại MIME: application/dash+xml cho DASH, application/vnd.apple.mpegurl cho HLS và loại phù hợp cho các tệp đa phương tiện.
8. Khắc phục sự cố#
| Kết quả | Hành động |
|---|---|
| Verify location thành công nhưng tải lên từ trình duyệt thất bại | Kiểm tra bảng Console và Network của trình duyệt. Cho phép PUT qua CORS từ đúng Origin của Console và cho phép header Content-Type. Kiểm tra kết nối, rồi thử lại để nhận presigned URL mới. |
| Tải lên trả về 403 | Kiểm tra quyền ghi đối tượng, phạm vi bucket/thư mục, điểm cuối, vùng, hết hạn yêu cầu và đồng hồ. Không chia sẻ URL tải lên đã ký. |
| Tải lên thành công; công khai URL trả về 403 | Kiểm tra xem phân phối công khai có được bật hay không và miền/phân phối đã triển khai xong hay chưa. |
| Công khai URL trả về 404 | So sánh URL đầy đủ với object key chính xác. Kiểm tra thư mục bị thiếu hoặc lặp, đồng thời kiểm tra chữ hoa/chữ thường trong tên tệp. |
| URL trực tiếp mở ra; tìm nạp trình phát không thành công | Kiểm tra CORS GET/HEAD trên máy chủ phân phối. Dùng * cho nội dung đa phương tiện được mã hóa và phân phối công khai, hoặc cho phép chính xác origin của trình phát. Xóa các phản hồi CDN cũ khỏi bộ nhớ đệm rồi thử lại. Với S3, kiểm tra cả chính sách tiêu đề phản hồi của CloudFront. |
| Hoạt động trong DRM-X Playback Lab; Moodle hoặc WordPress báo Failed to fetch | Kiểm tra CORS GET/HEAD trên máy chủ phân phối. Dùng * cho nội dung đa phương tiện được mã hóa và phân phối công khai, hoặc cho phép chính xác origin của trình phát. Xóa các phản hồi CDN cũ khỏi bộ nhớ đệm rồi thử lại. Với S3, kiểm tra cả chính sách tiêu đề phản hồi của CloudFront. |
| Tải xuống thành công; phát lại không thành công | Kiểm tra việc xuất bản gói, đường dẫn kê khai, loại MIME và ủy quyền giấy phép DRM. Xem phần khắc phục sự cố phát lại. |
CloudFront 403: xác nhận rằng OAC ký yêu cầu, chính sách bucket sử dụng phân phối chính xác ARN và tiền tố, đồng thời nguồn gốc là điểm cuối S3 REST. Tiếp tục bật S3 Block Public Access. Kiểm tra quyền KMS nếu bạn chọn SSE-KMS.
Tài liệu tham khảo chính thức#
- Tạo một bucket S3
- Quản lý IAM khóa truy cập
- S3 CORS cấu hình
- CloudFront OAC và S3 chính sách bucket
- CloudFront tiêu đề phản hồi
- Chính sách yêu cầu xuất xứ được quản lý
- Miền và chứng chỉ tùy chỉnh
Với nhà cung cấp khác, xem hướng dẫn thiết lập lưu trữ đám mây.
DRM-X 6.0