DRM-X 6.0 logo de pomba e ramo de oliveiraDRM-X 6.0Documentação
◎ Português

Amazon S3 e CloudFront: passo a passo

Conecte um bucket S3 privado ao DRM-X 6.0 com permissões IAM limitadas, CORS para o navegador, distribuição HTTPS via CloudFront e uma lista de verificação de uploads.

Ver MarkdownExemplos onlineAtualizado em 2026-09-28
De um bucket privado para entrega de mídia criptografada pública Crie um bucket S3, forneça credenciais de upload com escopo DRM-X, configure o navegador CORS, conecte CloudFront e carregue e recupere um objeto de teste. Mantenha vídeos originais e arquivos privados fora deste bucket de entrega.

1. Entenda a conexão#

DRM-X carrega diretamente para S3 usando solicitações assinadas. Os visualizadores baixam mídia criptografada através de CloudFront em HTTPS. Mantenha S3 Block all public access ativado; CloudFront obtém acesso de leitura com escopo definido por meio de Origin Access Control (OAC).

CloudFront fornece um hostname https://….cloudfront.net que pode ser usado em produção. Seu domínio próprio é opcional. A distribuição pública permite acessar os bytes dos objetos; DRM continua controlando a descriptografia da mídia corretamente empacotada. CORS não é autorização. Este guia usa distribuição CDN pública comum. URLs ou cookies assinados para os espectadores exigem uma integração separada.

2. Crie seu bucket S3#

AWS S3 formulário de criação: General purpose, Global namespace e um exemplo de nome de bucket.
1: escolha General purpose. 2: insira seu próprio nome exclusivo. Este é um formulário de console real com um exemplo não enviado; os cabeçalhos das contas são excluídos.
  1. Abra Amazon S3 → General purpose buckets → Create bucket.
  2. Selecione uma região e registre seu código, como us-east-1. Escolha General purpose. Se for solicitado um namespace, use Global namespace para este passo a passo.
  3. Insira seu próprio nome de bucket globalmente exclusivo. Mantenha Object Ownership → ACLs disabled (Bucket owner enforced).
  4. Mantenha Block all public access marcado. Você concederá acesso CloudFront por meio de uma política com escopo definido.
  5. Para este guia, mantenha Default encryption → Server-side encryption with Amazon S3 managed keys (SSE-S3). Essa criptografia de armazenamento complementa o empacotamento DRM e não o substitui. SSE-KMS exige permissões KMS adicionais para o uploader e para CloudFront.
  6. Revise e crie o bucket. Não ative a hospedagem de sites estáticos S3.

3. Crie um usuário IAM com permissões limitadas e uma chave de acesso#

  1. Abra IAM → Policies → Create policy → JSON. Cole a política abaixo, substituindo o nome do bucket de exemplo em todos os lugares.
  2. O exemplo permite apenas protected/. Se você usar outro caminho base, atualize a condição do prefixo e o objeto ARN. Para uso bucket-root, remova a condição de prefixo ListBucket e use arn:aws:s3:::YOUR_BUCKET/* para objetos.
  3. Salve a política. Abra IAM → Users → Create user, crie um usuário de integração dedicado sem acesso AWS Console e anexe apenas esta política.
  4. Abra o Security credentials → Access keys → Create access key do usuário. Escolha o caso de uso de um aplicativo em execução fora de AWS e siga as instruções. Guarde com segurança Access key ID e Secret access key para 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/*"
    }
  ]
}

Não use chaves root ou AdministratorAccess. A cópia usa GetObject e PutObject; não há ação s3:CopyObject IAM separada. A renomeação também precisa de DeleteObject. Este guia segue o formato de chave de acesso atual de DRM-X; uma função ARN por si só não substitui o par de chaves.

4. Configure S3 CORS para uploads do navegador#

  1. Abra seu bucket S3 → Permissions.
  2. Role até Cross-origin resource sharing (CORS) → Edit.
  3. Cole o JSON abaixo. Use * para ler mídia criptografada pública e mantenha os uploads limitados ao DRM-X Console. Preserve outras regras necessárias nos buckets existentes.
  4. Selecione Save changes. Manter Block Public Access ativado: CORS não torna o bucket público.
[
  {
    "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 uploads assinados no S3 e CORS de reprodução no S3 e no CloudFront. Na etapa 5, use as mesmas origens de reprodução na política de cabeçalhos de resposta do CloudFront.

5. Crie uma URL de distribuição HTTPS com CloudFront#

  1. Abra CloudFront → Distributions → Create distribution. Use uma distribuição padrão. Se AWS mostrar uma seleção de plano de integração ou de preços, revise e escolha o plano apropriado para sua conta antes de criar recursos.
  2. Selecione o S3 REST origin normal do bucket, não o endpoint do site. Deixe Origin path vazio para o mapeamento de pastas usado neste guia.
  3. Escolha Origin access control settings (recommended). Crie ou selecione um OAC com Sign requests (recommended).
  4. Defina a política de protocolo do visualizador para Redirect HTTP to HTTPS ou HTTPS only. Permitir GET, HEAD, OPTIONS. Os uploads usam o endpoint S3, portanto CloudFront não precisa de PUT.
  5. Crie a distribuição. Aplique a política de bucket gerada por CloudFront em S3 → Bucket → Permissions → Bucket policy → Edit. Mesclar com as instruções existentes necessárias. Restrinja o acesso ao ARN desta distribuição. O exemplo abaixo limita a leitura a protected/.
  6. Abra CloudFront → Policies → Response headers → Create response headers policy. Configure os campos CORS na tabela abaixo. Anexe esta política ao comportamento padrão/mídia da distribuição.
  7. Aguarde a conclusão da implantação. Copie Distribution domain name. Sua origem de entrega é https://YOUR_DISTRIBUTION.cloudfront.net.
Campo da política Response headersValor
Access-Control-Allow-Origin* (recomendado para mídia criptografada pública). Se escolher origens específicas no gerador, use a mesma lista aqui.
Access-Control-Allow-MethodsGET, HEAD, OPTIONS
Access-Control-Allow-HeadersRange
Access-Control-Expose-HeadersETag, Content-Length, Content-Range, Accept-Ranges
Access-Control-Allow-CredentialsDesativado para este fluxo de trabalho de mídia criptografada pública.
Access-Control-Max-Age3600
Origin overrideHabilitado para que CloudFront controle CORS voltado para o visualizador de forma consistente.

Para o preflight OPTIONS, associe a política gerenciada CORS-S3Origin. Ela encaminha Origin, Access-Control-Request-Method e Access-Control-Request-Headers ao S3. Inicialmente, armazene em cache somente GET/HEAD e desative o cache de OPTIONS. Se ativá-lo depois, inclua esses cabeçalhos na chave de cache e teste diferentes origens de player. Encaminhar um cabeçalho não o adiciona automaticamente à chave de 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"
        }
      }
    }
  ]
}

Substitua a conta de exemplo ID, distribuição ID e nome do bucket. O SourceArn deve identificar a distribuição que você acabou de criar. Após alterações de cabeçalho, invalide os caminhos de teste/mídia afetados se as respostas anteriores permanecerem em cache.

Opcional: use media.example.com

  1. Solicite um certificado público ACM cobrindo seu nome de host em US East (N. Virginia), us-east-1 e conclua a validação DNS.
  2. Adicione o nome do host sob Alternate domain names da distribuição e anexe seu certificado.
  3. No seu provedor DNS, crie o CNAME ou o alias suportado apontando para o nome do host CloudFront. Aguarde DNS, certificado e implantação de distribuição.
  4. Use https://media.example.com como origem de entrega. Um DNS CNAME sozinho é insuficiente sem o domínio CloudFront e a configuração do certificado.

6. Conecte Amazon S3 a DRM-X 6.0#

Abra Cloud Storage → Connect storage. Escolha Amazon S3.

CampoO que inserir
Display nameUm nome fácil de identificar, como Production S3.
Bucket nameO nome exato, sem s3://.
RegionO código de região AWS exato do bucket.
Protected-content base pathprotected, correspondendo às políticas IAM e bucket.
Public URL prefixhttps://YOUR_DISTRIBUTION.cloudfront.net/protected ou https://media.example.com/protected.
Access key ID / Secret access keyO par de chaves do usuário dedicado IAM.

Os exemplos usam uma pasta chamada protected. O nome do bucket não é automaticamente uma pasta. Com o mapeamento direto de domínio para bucket usado aqui, inclua a mesma pasta de armazenamento exatamente uma vez no prefixo 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 a raiz do bucket, deixe o caminho base em branco e insira apenas a origem da entrega como prefixo público. Não anexe um nome de bucket, a menos que você o use deliberadamente como uma pasta. Deixe CloudFront Origin path vazio para este mapeamento.

Selecione o destino de upload padrão, se desejar, e então Save and verify. O nome do host S3 API não é sua entrega CloudFront URL.

A política * permite leituras do navegador a partir de qualquer site; a autorização da licença DRM continua controlando a descriptografia. Use um bucket dedicado a mídia criptografada e recursos destinados ao acesso público. As solicitações de mídia devem omitir cookies entre origens; a distribuição autenticada por cookies exige uma configuração CORS separada.

Gere seus campos CORS e URL correspondentes

Esta ferramenta é executada no seu navegador. Insira apenas origens públicas; não solicita chaves de acesso.

Use * para reprodução a partir de qualquer site (recomendado). Para restringir as origens, informe origens HTTPS separadas por espaços ou vírgulas, sem caminhos de página. DRM-X Console e Playback Lab são incluídos automaticamente.Insira seu domínio personalizado conectado ou a origem do CloudFront. Não inclua a pasta aqui.

7. Faça upload de um arquivo e verifique se funciona#

  1. Abra Cloud Storage, selecione este destino e escolha Verify location. Sucesso significa que o servidor DRM-X pode listar o bucket. Não estabelece permissão de gravação, navegador CORS ou entrega pública.
  2. Selecione Upload encrypted files e escolha um pequeno segmento criptografado de um pacote DRM-X existente. Se você não possui um pacote, use o diagnóstico criptografado descartável abaixo. Não carregue um vídeo original ou documento pessoal.
  3. Aguarde a mensagem de sucesso. Verifique se o nome e o tamanho do arquivo aparecem em Cloud Storage. Encontre o mesmo objeto em protected/ no console do seu provedor.
  4. Abra Preview URL em uma janela privada do navegador. Verifique se o objeto enviado retorna HTTP 200 sem fazer login.
  5. Verifique as respostas do manifesto e da mídia no painel Network do navegador. Na política padrão, Access-Control-Allow-Origin deve ser *; em uma política restrita, deve ser a origem exata do player. Abrir uma URL diretamente não testa CORS.
  6. Remova apenas o objeto de diagnóstico descartável quando terminar. Em seguida, siga o Desktop Packager guide, selecione este destino de armazenamento em Package content e carregue o pacote criptografado completo. O upload manual de um arquivo não registra um Published Content ID.
  7. Teste o arquivo Published resultante em Universal Playback Lab e no site do seu próprio player. Verifique vídeo, áudio, avanço na linha do tempo e os dispositivos necessários. Um download binário bem-sucedido não é prova de reprodução de DRM.
Nenhuma amostra criptografada? Crie um arquivo de teste descartável em Windows

Execute isto em Windows PowerShell em uma pasta temporária que você controla. Ele criptografa uma mensagem curta não pessoal com uma chave AES de uso único, mantida apenas na memória. A saída é um diagnóstico de armazenamento, não uma mídia reproduzível; não contém nenhuma chave de conteúdo DRM ou dados do 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

Carregue drmx-storage-check.encrypted.bin, verifique seu tamanho e Preview URL e remova-o do bucket.

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

Substitua ambas as URLs. Na política padrão, espere HTTP 200 e Access-Control-Allow-Origin: *. Uma solicitação GET com Range: bytes=0-15 deve retornar HTTP 206 e Content-Range. Preserve os tipos MIME: application/dash+xml para DASH, application/vnd.apple.mpegurl para HLS e o tipo adequado para os arquivos de mídia.

8. Resolva problemas#

ResultadoAção
Verify location passa, mas o upload pelo navegador falhaInspecione o navegador Console e os painéis de rede. Permitir PUT CORS da origem exata Console e Content-Type. Verifique também a conectividade e tente novamente para obter um novo URL pré-assinado.
O upload retorna 403Verifique a permissão de gravação do objeto, escopo do bucket/pasta, endpoint, região, expiração da solicitação e relógio. Não compartilhe URLs de upload assinados.
Upload bem-sucedido; público URL retorna 403Verifique se a entrega pública está habilitada e se o domínio/distribuição concluiu a implantação.
Público URL retorna 404Compare o URL completo com a chave exata do objeto. Verifique as pastas ausentes ou duplicadas e as maiúsculas e minúsculas do nome do arquivo.
URL abre diretamente; busca do player falhaVerifique o CORS GET/HEAD no host de distribuição. Use * para mídia criptografada pública ou permita a origem exata do player. Limpe as respostas antigas do cache da CDN e tente novamente. Para S3, verifique também a política de cabeçalhos de resposta do CloudFront.
Funciona no DRM-X Playback Lab; Moodle ou WordPress apresenta Failed to fetchVerifique o CORS GET/HEAD no host de distribuição. Use * para mídia criptografada pública ou permita a origem exata do player. Limpe as respostas antigas do cache da CDN e tente novamente. Para S3, verifique também a política de cabeçalhos de resposta do CloudFront.
Download bem-sucedido; a reprodução falhaVerifique a publicação do pacote, caminhos de manifesto, tipos MIME e autorização de licença DRM. Consulte solução de problemas de reprodução.

CloudFront 403: confirma que OAC assina solicitações, a política de bucket usa a distribuição correta ARN e prefixo, e a origem é o endpoint S3 REST. Mantenha S3 Block Public Access ativado. Verifique as permissões KMS se você escolheu SSE-KMS.

Referências oficiais#

Para outros provedores, consulte o guia de configuração do armazenamento em nuvem.