DRM-X 6.0 dove dan logo cabang zaitunDRM-X 6.0Dokumentasi
◎ Bahasa Indonesia

Amazon S3 dan CloudFront: langkah demi langkah

Hubungkan bucket S3 pribadi ke DRM-X 6.0 dengan izin cakupan IAM, browser CORS, pengiriman CloudFront HTTPS dan daftar periksa verifikasi unggahan.

Lihat MarkdownContoh langsungDiperbarui 2026-09-28
Dari bucket pribadi ke pengiriman media terenkripsi publik Buat bucket S3, berikan kredensial unggahan tercakup DRM-X, konfigurasikan browser CORS, sambungkan CloudFront, dan unggah serta ambil objek uji. Simpan video asli dan file pribadi di luar wadah pengiriman ini.

1. Pahami hubungannya#

DRM-X mengunggah langsung ke S3 menggunakan permintaan yang ditandatangani. Pemirsa mengunduh media terenkripsi melalui CloudFront melalui HTTPS. Tetap aktifkan S3 Block all public access; CloudFront mendapat akses baca terbatas melalui Origin Access Control (OAC).

CloudFront menyediakan hostname https://….cloudfront.net yang dapat digunakan untuk produksi. Domain sendiri bersifat opsional. Distribusi publik membuat byte objek dapat diakses; DRM tetap mengontrol dekripsi media yang dikemas dengan benar. CORS bukan mekanisme otorisasi. Panduan ini menggunakan distribusi CDN publik biasa. URL atau cookie bertanda tangan untuk pemirsa memerlukan integrasi terpisah.

2. Buat bucket S3 Anda#

AWS S3 formulir pembuatan: General purpose, Global namespace dan contoh nama bucket.
1: pilih General purpose. 2: masukkan nama unik Anda sendiri. Ini adalah bentuk konsol nyata dengan contoh yang belum dikirimkan; header akun dikecualikan.
  1. Buka Amazon S3 → General purpose buckets → Create bucket.
  2. Pilih wilayah dan catat kodenya, misalnya us-east-1. Pilih General purpose. Jika dimintai namespace, gunakan Global namespace untuk panduan ini.
  3. Masukkan nama bucket Anda yang unik secara global. Pertahankan Object Ownership → ACLs disabled (Bucket owner enforced).
  4. Tetap centang Block all public access. Anda akan memberikan CloudFront akses melalui kebijakan terbatas.
  5. Untuk panduan ini, gunakan Default encryption → Server-side encryption with Amazon S3 managed keys (SSE-S3). Ini adalah enkripsi penyimpanan tambahan, bukan pengganti pengemasan DRM. SSE-KMS memerlukan izin KMS tambahan untuk pengunggah dan CloudFront.
  6. Tinjau dan buat bucket. Jangan aktifkan S3 hosting situs web statis.

3. Buat pengguna IAM dengan izin terbatas dan access key#

  1. Buka IAM → Policies → Create policy → JSON. Tempelkan kebijakan di bawah ini, ganti contoh nama bucket di mana pun.
  2. Contoh ini hanya mengizinkan protected/. Jika Anda menggunakan jalur dasar lain, perbarui kondisi awalan dan objek ARN. Untuk penggunaan bucket-root, hapus kondisi awalan ListBucket dan gunakan arn:aws:s3:::YOUR_BUCKET/* untuk objek.
  3. Simpan kebijakannya. Buka IAM → Users → Create user, buat pengguna integrasi khusus tanpa akses AWS Console, dan hanya lampirkan kebijakan ini.
  4. Buka Security credentials → Access keys → Create access key pengguna. Pilih kasus penggunaan untuk aplikasi yang berjalan di luar AWS dan ikuti petunjuknya. Simpan Access key ID dan Secret access key untuk DRM-X dengan aman.
{
  "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/*"
    }
  ]
}

Jangan gunakan kunci root atau AdministratorAccess. Menyalin menggunakan GetObject dan PutObject; tidak ada tindakan s3:CopyObject IAM terpisah. Mengganti nama juga membutuhkan DeleteObject. Panduan ini mengikuti formulir kunci akses DRM-X saat ini; peran ARN saja tidak menggantikan pasangan kunci.

4. Konfigurasikan S3 CORS untuk unggahan browser#

  1. Buka bucket S3 Anda → Permissions.
  2. Gulir ke Cross-origin resource sharing (CORS) → Edit.
  3. Tempel JSON berikut. Gunakan * untuk membaca media terenkripsi publik dan batasi unggahan pada DRM-X Console. Pertahankan aturan lain yang diperlukan dalam bucket yang sudah ada.
  4. Pilih Save changes. Tetap aktifkan Block Public Access: CORS tidak membuat bucket menjadi publik.
[
  {
    "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
  }
]

Konfigurasikan unggahan bertanda tangan di S3 dan CORS pemutaran di S3 serta CloudFront. Pada langkah 5, gunakan origin pemutaran yang sama dalam kebijakan header respons CloudFront.

5. Buat URL distribusi HTTPS melalui CloudFront#

  1. Buka CloudFront → Distributions → Create distribution. Gunakan distribusi standar. Jika AWS menunjukkan pilihan paket orientasi atau harga, tinjau dan pilih paket yang sesuai dengan akun Anda sebelum membuat sumber daya.
  2. Pilih S3 REST origin normal bucket, bukan titik akhir situs webnya. Biarkan Origin path kosong untuk pemetaan folder yang digunakan dalam panduan ini.
  3. Pilih Origin access control settings (recommended). Buat atau pilih OAC dengan Sign requests (recommended).
  4. Tetapkan kebijakan protokol penampil ke Redirect HTTP to HTTPS atau HTTPS only. Izinkan GET, HEAD, OPTIONS. Pengunggahan menggunakan titik akhir S3, jadi CloudFront tidak memerlukan PUT.
  5. Buat distribusi. Terapkan kebijakan bucket yang dihasilkan CloudFront pada S3 → bucket → Permissions → Bucket policy → Edit. Gabungkan dengan pernyataan wajib yang ada. Batasi akses ke ARN distribusi ini. Contoh di bawah membatasi pembacaan hingga protected/.
  6. Buka CloudFront → Policies → Response headers → Create response headers policy. Konfigurasikan kolom CORS pada tabel di bawah. Lampirkan kebijakan ini ke media distribusi/perilaku default.
  7. Tunggu hingga penerapan selesai. Salin Distribution domain name. Asal pengiriman Anda adalah https://YOUR_DISTRIBUTION.cloudfront.net.
Response headers bidang kebijakanNilai
Access-Control-Allow-Origin* (direkomendasikan untuk media terenkripsi publik). Jika Anda memilih origin tertentu di generator, gunakan daftar yang sama di sini.
Access-Control-Allow-MethodsGET, HEAD, OPTIONS
Access-Control-Allow-HeadersRange
Access-Control-Expose-HeadersETag, Content-Length, Content-Range, Accept-Ranges
Access-Control-Allow-CredentialsDinonaktifkan untuk alur kerja media terenkripsi publik ini.
Access-Control-Max-Age3600
Origin overrideDiaktifkan sehingga CloudFront mengontrol CORS yang menghadap penonton secara konsisten.

Untuk preflight OPTIONS, lampirkan kebijakan permintaan asal CORS-S3Origin yang dikelola. Ini meneruskan Origin, Access-Control-Request-Method dan Access-Control-Request-Headers ke S3. Awalnya cache GET/HEAD saja, biarkan OPTIONS caching dinonaktifkan. Jika nanti Anda melakukan cache OPTIONS, sertakan header ini dalam kunci cache dan uji asal pemutar yang berbeda; meneruskan header saja tidak menambahkannya ke kunci cache.

{
  "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"
        }
      }
    }
  ]
}

Ganti akun contoh ID, distribusi ID dan nama bucket. SourceArn harus mengidentifikasi distribusi yang baru saja Anda buat. Setelah header diubah, batalkan validasi jalur pengujian/media yang terpengaruh jika respons sebelumnya tetap disimpan dalam cache.

Opsional: gunakan media.example.com

  1. Minta sertifikat publik ACM yang mencakup nama host Anda di US East (N. Virginia), us-east-1, dan selesaikan validasi DNS.
  2. Tambahkan nama host di bawah Alternate domain names distribusi dan lampirkan sertifikatnya.
  3. Di penyedia DNS Anda, buat CNAME atau alias yang didukung yang menunjuk ke nama host CloudFront. Tunggu DNS, sertifikat dan penerapan distribusi.
  4. Gunakan https://media.example.com sebagai asal pengiriman Anda. DNS CNAME saja tidak cukup tanpa domain CloudFront dan penyiapan sertifikat.

6. Hubungkan Amazon S3 ke DRM-X 6.0#

Buka Cloud Storage → Connect storage. Pilih Amazon S3.

RuasApa yang harus dimasukkan
Display nameLabel yang ramah, seperti Produksi S3.
Bucket nameNama persisnya, tanpa s3://.
RegionKode wilayah AWS yang tepat pada bucket.
Protected-content base pathprotected, cocok dengan IAM dan kebijakan bucket.
Public URL prefixhttps://YOUR_DISTRIBUTION.cloudfront.net/protected atau https://media.example.com/protected.
Access key ID / Secret access keyPasangan kunci pengguna IAM khusus.

Contohnya menggunakan folder bernama protected. Nama bucket tidak otomatis menjadi folder. Dengan pemetaan domain-ke-bucket langsung yang digunakan di sini, sertakan folder penyimpanan yang sama tepat satu kali di awalan publik URL.

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

Untuk menggunakan akar bucket, biarkan jalur dasar kosong dan masukkan hanya asal pengiriman sebagai awalan publik. Jangan menambahkan nama bucket kecuali Anda sengaja menggunakannya sebagai folder. Biarkan CloudFront Origin path kosong untuk pemetaan ini.

Pilih tujuan pengunggahan default jika diinginkan, lalu Save and verify. Nama host S3 API bukan pengiriman CloudFront URL Anda.

Kebijakan * mengizinkan pembacaan browser dari situs mana pun; otorisasi lisensi DRM tetap mengendalikan dekripsi. Gunakan bucket khusus untuk media terenkripsi dan aset yang memang ditujukan untuk publik. Permintaan media tidak boleh menyertakan cookie lintas origin; distribusi dengan autentikasi cookie memerlukan konfigurasi CORS terpisah.

Hasilkan bidang CORS dan bidang URL yang cocok

Alat ini berjalan di browser Anda. Masukkan asal publik saja; itu tidak meminta kunci akses.

Gunakan * untuk pemutaran dari situs mana pun (direkomendasikan). Untuk membatasi origin, masukkan origin HTTPS yang dipisahkan spasi atau koma, tanpa jalur halaman. DRM-X Console dan Playback Lab disertakan secara otomatis.Masukkan domain kustom yang terhubung atau origin CloudFront Anda. Jangan sertakan folder di sini.

7. Unggah file dan verifikasi bahwa file tersebut berfungsi#

  1. Buka Cloud Storage, pilih tujuan ini, lalu pilih Verify location. Keberhasilan hanya membuktikan bahwa server DRM-X dapat menampilkan isi bucket. Izin menulis, CORS browser, dan distribusi publik harus diuji secara terpisah.
  2. Pilih Upload encrypted files dan pilih satu segmen kecil terenkripsi dari paket DRM-X yang ada. Jika Anda tidak memiliki paketnya, gunakan diagnostik terenkripsi sekali pakai di bawah ini. Jangan mengunggah video asli atau dokumen pribadi.
  3. Tunggu pesan sukses. Periksa apakah nama file dan ukurannya muncul di Cloud Storage. Temukan objek yang sama di bawah protected/ di konsol penyedia Anda.
  4. Buka Preview URL di jendela browser privat. Pastikan objek yang diunggah mengembalikan HTTP 200 tanpa login.
  5. Periksa respons manifest dan media di panel Network browser. Untuk kebijakan default, Access-Control-Allow-Origin harus bernilai *; untuk kebijakan terbatas, nilainya harus sama persis dengan origin pemutar. Membuka URL secara langsung tidak menguji CORS.
  6. Hapus hanya objek diagnostik sekali pakai Anda setelah selesai. Kemudian ikuti Panduan Pengemas Desktop, pilih tujuan penyimpanan ini di Package content, dan unggah paket terenkripsi lengkap. Mengunggah file secara manual tidak mendaftarkan Published Content ID.
  7. Uji file Published yang dihasilkan di Universal Playback Lab dan situs web pemutar Anda sendiri. Verifikasi video, audio, seek, dan perangkat yang Anda perlukan. Pengunduhan biner yang berhasil bukanlah bukti pemutaran DRM.
Tidak ada sampel terenkripsi? Buat file pengujian sekali pakai di Windows

Jalankan ini di Windows PowerShell di folder sementara yang Anda kendalikan. Ini mengenkripsi pesan singkat non-pribadi dengan kunci AES sekali pakai yang hanya disimpan di memori. Outputnya adalah diagnostik penyimpanan, bukan media yang dapat diputar; tidak berisi DRM kunci konten atau data pelanggan.

$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, Length

Unggah drmx-storage-check.encrypted.bin, verifikasi ukurannya dan Preview URL, lalu keluarkan dari bucket.

curl.exe -I -H "Origin: https://www.example.com" "https://media.example.com/protected/sample.encrypted.bin"

Ganti kedua URL. Dengan kebijakan default, respons yang diharapkan adalah HTTP 200 dan Access-Control-Allow-Origin: *. Permintaan GET dengan Range: bytes=0-15 seharusnya mengembalikan HTTP 206 dan Content-Range. Pertahankan jenis MIME: application/dash+xml untuk DASH, application/vnd.apple.mpegurl untuk HLS, dan jenis yang sesuai untuk file media.

8. Pecahkan masalah hasil Anda#

HasilAksi
Verify location berhasil, tetapi unggahan browser gagalPeriksa panel Console dan Network di browser. Izinkan PUT melalui CORS dari Origin Console yang tepat serta header Content-Type. Periksa koneksi dan coba lagi untuk mendapatkan presigned URL baru.
Unggahan mengembalikan 403Periksa izin penulisan objek, cakupan bucket/folder, titik akhir, wilayah, masa berlaku permintaan, dan jam. Jangan bagikan URL unggahan yang ditandatangani.
Pengunggahan berhasil; publik URL mengembalikan 403Periksa apakah pengiriman publik diaktifkan dan domain/distribusi telah selesai diterapkan.
Publik URL mengembalikan 404Bandingkan URL lengkap dengan object key yang tepat. Periksa folder yang hilang atau berulang serta huruf besar/kecil pada nama file.
URL terbuka secara langsung; pengambilan pemutar gagalPeriksa CORS GET/HEAD pada host distribusi. Gunakan * untuk media terenkripsi publik atau izinkan origin pemutar yang sama persis. Bersihkan respons CDN yang usang dan coba lagi. Untuk S3, periksa juga kebijakan header respons CloudFront.
Berfungsi di DRM-X Playback Lab; Moodle atau WordPress menampilkan Failed to fetchPeriksa CORS GET/HEAD pada host distribusi. Gunakan * untuk media terenkripsi publik atau izinkan origin pemutar yang sama persis. Bersihkan respons CDN yang usang dan coba lagi. Untuk S3, periksa juga kebijakan header respons CloudFront.
Pengunduhan berhasil; pemutaran gagalPeriksa publikasi paket, jalur manifes, jenis MIME dan otorisasi lisensi DRM. Lihat pemecahan masalah pemutaran.

CloudFront 403: mengonfirmasi bahwa OAC menandatangani permintaan, kebijakan bucket menggunakan distribusi dan awalan ARN yang benar, dan asal adalah titik akhir S3 REST. Tetap aktifkan S3 Block Public Access. Periksa izin KMS jika Anda memilih SSE-KMS.

Referensi resmi#

Untuk penyedia lain, ikuti panduan penyiapan penyimpanan cloud.