DRM-X 6.0 paloma y rama de olivo logotipoDRM-X 6.0Documentación
◎ Español

Amazon S3 y CloudFront: paso a paso

Conecte un bucket S3 privado a DRM-X 6.0 con permisos IAM limitados, CORS para el navegador, distribución HTTPS mediante CloudFront y una lista de comprobación de cargas.

Ver MarkdownEjemplos en funcionamientoActualizado 2026-09-28
De un depósito privado a la entrega pública de medios cifrados Cree un depósito S3, proporcione DRM-X credenciales de carga con alcance, configure el navegador CORS, conéctese CloudFront y cargue y recupere un objeto de prueba. Mantenga los videos originales y los archivos privados fuera de este depósito de entrega.

1. Entender la conexión#

DRM-X carga directamente en S3 mediante solicitudes firmadas. Los espectadores descargan medios cifrados desde CloudFront mediante HTTPS. Mantenga Block all public access activado en S3. CloudFront obtiene permisos de lectura limitados mediante Origin Access Control (OAC).

CloudFront proporciona un nombre de host https://….cloudfront.net utilizable en producción. Su propio dominio es opcional. La distribución pública permite acceder a los bytes del objeto; DRM sigue controlando el descifrado de medios correctamente empaquetados. CORS no es autorización. Esta guía usa una distribución CDN pública normal. Las URL o cookies firmadas para los espectadores requieren una integración independiente.

2. Crea tu depósito S3#

AWS S3 formulario de creación: General purpose, Global namespace y un nombre de depósito de ejemplo.
1: elige General purpose. 2: ingresa tu propio nombre único. Este es un formulario de consola real con un ejemplo no enviado; Se excluyen los encabezados de cuentas.
  1. Abrir Amazon S3 → General purpose buckets → Create bucket.
  2. Seleccione una región y registre su código, como us-east-1. Elija General purpose. Si se le solicita un espacio de nombres, utilice Global namespace para este tutorial.
  3. Ingrese su propio nombre de depósito único a nivel mundial. Mantenga Object Ownership → ACLs disabled (Bucket owner enforced).
  4. Mantenga Block all public access marcado. Le dará acceso a CloudFront a través de una política de alcance.
  5. Mantenga Default encryption → Server-side encryption with Amazon S3 managed keys (SSE-S3) para esta guía. Este cifrado del almacenamiento complementa el empaquetado DRM y no lo sustituye. SSE-KMS requiere permisos KMS adicionales tanto para quien carga los archivos como para CloudFront.
  6. Revisar y crear el depósito. No habilite el alojamiento de sitios web estáticos S3.

3. Crear un usuario IAM con permisos limitados y una clave de acceso#

  1. Abrir IAM → Policies → Create policy → JSON. Pegue la política a continuación y reemplace el nombre del depósito de ejemplo en todas partes.
  2. El ejemplo permite solo protected/. Si utiliza otra ruta base, actualice tanto la condición del prefijo como el objeto ARN. Para uso de raíz de depósito, elimine la condición de prefijo ListBucket y use arn:aws:s3:::YOUR_BUCKET/* para objetos.
  3. Guardar la política. Abra IAM → Users → Create user, cree un usuario de integración dedicado sin acceso AWS Console y adjunte solo esta política.
  4. Abra el Security credentials → Access keys → Create access key del usuario. Elija el caso de uso para una aplicación que se ejecuta fuera de AWS y siga las instrucciones. Conserve de forma segura el Access key ID y el Secret access key para el DRM-X.
{
  "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/*"
    }
  ]
}

No utilice claves raíz o AdministratorAccess. Copiar usa GetObject y PutObject; no existe una acción s3:CopyObject IAM separada. Cambiar el nombre también necesita DeleteObject. Esta guía sigue el formulario de clave de acceso actual de DRM-X; un rol ARN por sí solo no reemplaza el par de claves.

4. Configurar S3 CORS para cargas en el navegador#

  1. Abre tu bucket S3 → Permissions.
  2. Desplácese hasta Cross-origin resource sharing (CORS) → Edit.
  3. Pegue el JSON siguiente. Use * para leer medios cifrados públicos y limite las cargas a DRM-X Console. Conserve las demás reglas necesarias en los buckets existentes.
  4. Seleccione Save changes. Mantener Block Public Access habilitado: CORS no hace público el depósito.
[
  {
    "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
  }
]

Configure las cargas firmadas en S3 y el CORS de reproducción tanto en S3 como en CloudFront. En el paso 5, use los mismos orígenes de reproducción en la política de encabezados de respuesta de CloudFront.

5. Crear una URL de distribución HTTPS con CloudFront#

  1. Abrir CloudFront → Distributions → Create distribution. Utilice una distribución estándar. Si AWS muestra una selección de plan de precios o de incorporación, revise y elija el plan apropiado para su cuenta antes de crear recursos.
  2. Seleccione el S3 REST origin normal del depósito, no el punto final del sitio web. Deje Origin path vacío para la asignación de carpetas utilizada en esta guía.
  3. Elija Origin access control settings (recommended). Crea o selecciona un OAC con Sign requests (recommended).
  4. Establezca la política de protocolo del espectador en Redirect HTTP to HTTPS o HTTPS only. Permitir GET, HEAD, OPTIONS. Las cargas utilizan el punto final S3, por lo que CloudFront no necesita PUT.
  5. Cree la distribución. Aplique la política de bucket generada por CloudFront en S3 → Bucket → Permissions → Bucket policy → Edit y combínela con las declaraciones existentes que necesite conservar. Restrinja el acceso al ARN de esta distribución. El ejemplo siguiente limita la lectura a protected/.
  6. Abrir CloudFront → Policies → Response headers → Create response headers policy. Configure los campos CORS en la siguiente tabla. Adjunte esta política al comportamiento multimedia/predeterminado de la distribución.
  7. Espere a que se complete la implementación. Copia Distribution domain name. Su origen de entrega es https://YOUR_DISTRIBUTION.cloudfront.net.
Response headers campo de políticaValor
Access-Control-Allow-Origin* (recomendado para medios cifrados públicos). Si elige orígenes específicos en el generador, use aquí la misma lista.
Access-Control-Allow-MethodsGET, HEAD, OPTIONS
Access-Control-Allow-HeadersRange
Access-Control-Expose-HeadersETag, Content-Length, Content-Range, Accept-Ranges
Access-Control-Allow-CredentialsDeshabilitado para este flujo de trabajo público de medios cifrados.
Access-Control-Max-Age3600
Origin overrideHabilitado para que CloudFront controle la visualización de cara al espectador CORS de manera consistente.

Para la verificación previa OPTIONS, adjunte la política de solicitud de origen CORS-S3Origin administrada. Reenvía Origin, Access-Control-Request-Method y Access-Control-Request-Headers a S3. Inicialmente, almacene en caché solo GET/HEAD, dejando el almacenamiento en caché OPTIONS deshabilitado. Si luego almacena en caché OPTIONS, incluya estos encabezados en su clave de caché y pruebe diferentes orígenes de reproductor; reenviar un encabezado por sí solo no lo agrega a la clave de caché.

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

Reemplace la cuenta de ejemplo ID, la distribución ID y el nombre del depósito. El SourceArn debe identificar la distribución que acabas de crear. Después de los cambios en el encabezado, invalide las rutas de prueba/medios afectadas si las respuestas anteriores permanecen almacenadas en caché.

Opcional: usar media.example.com

  1. Solicite un certificado público ACM que cubra su nombre de host en US East (N. Virginia), us-east-1 y complete la validación DNS.
  2. Agregue el nombre de host bajo Alternate domain names de la distribución y adjunte su certificado.
  3. En su proveedor DNS, cree el CNAME o el alias admitido que apunte al nombre de host CloudFront. Espere DNS, implementación de certificado y distribución.
  4. Utilice https://media.example.com como origen de entrega. Un DNS CNAME por sí solo es insuficiente sin la configuración del dominio y el certificado CloudFront.

6. Conecte Amazon S3 a DRM-X 6.0#

Abrir Cloud Storage → Connect storage. Elija Amazon S3.

CampoQué ingresar
Display nameUna etiqueta amigable, como Producción S3.
Bucket nameEl nombre exacto, sin s3://.
RegionEl código de región AWS exacto del depósito.
Protected-content base pathprotected, que coincide con las políticas IAM y de depósito.
Public URL prefixhttps://YOUR_DISTRIBUTION.cloudfront.net/protected o https://media.example.com/protected.
Access key ID / Secret access keyEl par de claves del usuario IAM dedicado.

Los ejemplos utilizan una carpeta llamada protected. El nombre del depósito no es automáticamente una carpeta. Con la asignación directa de dominio a depósito que se utiliza aquí, incluya la misma carpeta de almacenamiento exactamente una vez en el prefijo público 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

Para usar la raíz del depósito, deje la ruta base en blanco e ingrese solo el origen de entrega como prefijo público. No agregues un nombre de depósito a menos que lo uses deliberadamente como carpeta. Deje CloudFront Origin path vacío para este mapeo.

Seleccione el destino de carga predeterminado si lo desea, luego Save and verify. El nombre de host S3 API no es su CloudFront entrega URL.

La política * permite lecturas del navegador desde cualquier sitio; la autorización de licencias DRM sigue controlando el descifrado. Use un bucket dedicado a medios cifrados y recursos destinados a ser públicos. Las solicitudes de medios deben omitir cookies entre orígenes; la distribución autenticada mediante cookies requiere una configuración CORS independiente.

Genera tus campos CORS y URL coincidentes

Esta herramienta se ejecuta en su navegador. Introduzca únicamente orígenes públicos; No solicita claves de acceso.

Use * para permitir la reproducción desde cualquier sitio (recomendado). Para restringir los orígenes, introduzca orígenes HTTPS separados por espacios o comas, sin rutas de página. DRM-X Console y Playback Lab se incluyen automáticamente.Introduzca su dominio personalizado conectado o el origen de CloudFront. Omita aquí la carpeta.

7. Subir un archivo y verificar que funcione#

  1. Abra Cloud Storage, seleccione este destino y elija Verify location. El éxito significa que el servidor DRM-X puede enumerar el depósito. No establece permiso de escritura, navegador CORS ni entrega pública.
  2. Seleccione Upload encrypted files y elija un pequeño segmento cifrado de un paquete DRM-X existente. Si no tiene un paquete, utilice el diagnóstico cifrado desechable a continuación. No subas un vídeo original o un documento personal.
  3. Espere el mensaje de éxito. Comprueba que el nombre del archivo y el tamaño aparecen en Cloud Storage. Busque el mismo objeto en protected/ en la consola de su proveedor.
  4. Abra Preview URL en una ventana privada del navegador. Compruebe que el objeto cargado devuelva HTTP 200 sin iniciar sesión.
  5. Compruebe las respuestas del manifiesto y los medios en el panel Network del navegador. Con la política predeterminada, Access-Control-Allow-Origin debe ser *; con una política restringida, debe ser el origen exacto del reproductor. Abrir una URL directamente no comprueba CORS.
  6. Retire solo su objeto de diagnóstico desechable cuando haya terminado. Luego siga la Guía de Desktop Packager, seleccione este destino de almacenamiento en Package content y cargue el paquete cifrado completo. Cargar un archivo manualmente no registra un Published Content ID.
  7. Pruebe el archivo Published resultante en Universal Playback Lab y en el sitio web de su propio reproductor. Verifique video, audio, desplazamiento en la línea de tiempo y sus dispositivos requeridos. Una descarga binaria exitosa no es prueba de reproducción de DRM.
¿No hay muestra cifrada? Cree un archivo de prueba desechable en Windows

Ejecute esto en Windows PowerShell en una carpeta temporal que controle. Cifra un mensaje breve no personal con una clave AES de un solo uso que se guarda únicamente en la memoria. El resultado es un diagnóstico de almacenamiento, no un medio reproducible; no contiene ninguna DRM clave de contenido ni datos del cliente.

$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

Cargue drmx-storage-check.encrypted.bin, verifique su tamaño y Preview URL, luego retírelo del depósito.

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

Sustituya ambas URL. Con la política predeterminada, espere HTTP 200 y Access-Control-Allow-Origin: *. Una solicitud GET con Range: bytes=0-15 debe devolver HTTP 206 y Content-Range. Conserve los tipos MIME: application/dash+xml para DASH, application/vnd.apple.mpegurl para HLS y el tipo adecuado para los archivos multimedia.

8. Resolver problemas#

ResultadoAcción
Verify location pasa, pero falla la carga desde el navegadorInspeccionar el navegador Console y los paneles de Red. Permita PUT CORS desde el origen exacto Console y Content-Type. También verifique la conectividad y vuelva a intentarlo para obtener un URL prefirmado nuevo.
La carga devuelve 403Verifique el permiso de escritura del objeto, el alcance del depósito/carpeta, el punto final, la región, la caducidad de la solicitud y el reloj. No comparta URL de carga firmadas.
La carga se realizó correctamente; público URL devuelve 403Verifique si la entrega pública está habilitada y si el dominio/distribución ha terminado de implementarse.
Público URL devuelve 404Compare la URL completa con la clave exacta del objeto. Compruebe si faltan o se duplican carpetas y respete las mayúsculas y minúsculas del nombre de archivo.
URL abre directamente; la recuperación del reproductor fallaCompruebe el CORS de GET/HEAD en el host de distribución. Use * para medios cifrados públicos o permita el origen exacto del reproductor. Purgue las respuestas antiguas de la CDN y reintente. Para S3, compruebe también la política de encabezados de respuesta de CloudFront.
Funciona en DRM-X Playback Lab; Moodle o WordPress muestra Failed to fetchCompruebe el CORS de GET/HEAD en el host de distribución. Use * para medios cifrados públicos o permita el origen exacto del reproductor. Purgue las respuestas antiguas de la CDN y reintente. Para S3, compruebe también la política de encabezados de respuesta de CloudFront.
La descarga se realizó correctamente; la reproducción fallaVerifique la publicación del paquete, las rutas del manifiesto, los MIME tipos y la DRM autorización de licencia. Consulte solución de problemas de reproducción.

CloudFront 403: confirma que OAC firma solicitudes, la política del depósito utiliza la distribución ARN y el prefijo correctos, y el origen es el punto final S3 REST. Mantenga S3 Block Public Access activado. Marque los permisos KMS si elige SSE-KMS.

Referencias oficiales#

Para otros proveedores, consulte la guía de configuración del almacenamiento en la nube.