Usar signed cookies - Amazon CloudFront

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar signed cookies

CloudFront os cookies assinados permitem que você controle quem pode acessar seu conteúdo quando você não deseja alterar seus URLs atuais ou quando deseja fornecer acesso a vários arquivos restritos, por exemplo, todos os arquivos na área de assinantes de um site. Este tópico explica as considerações ao usar signed cookies e descreve como defini-los usando políticas padrão e personalizadas.

Escolher entre política padrão e política personalizada para signed cookies

Ao criar um signed cookie, você grava uma declaração de política no formato JSON que especifica as restrições no signed cookie, por exemplo, por quanto tempo o cookie é válido. Você pode usar políticas padrão ou personalizadas. A tabela a seguir compara as políticas personalizadas e padrão:

Descrição Política padrão Política personalizada

Você pode reutilizar a declaração de política para vários arquivos. Para reutilizar a declaração de política, é necessário usar caracteres curinga no objeto Resource. Para obter mais informações, consulte Valores especificados na declaração de uma política personalizada para signed cookies.)

Não

Sim

Você pode especificar a data e a hora em que os usuários podem começar a acessar seu conteúdo

Não

Sim (opcional)

Você pode especificar a data e a hora em que os usuários não podem mais acessar seu conteúdo

Sim

Sim

Você pode especificar o endereço IP ou vários endereços IP dos usuários que podem acessar seu conteúdo

Não

Sim (opcional)

Para obter informações sobre como criar signed cookies usando uma política padrão, consulte Definir signed cookies usando uma política padrão.

Para obter informações sobre como criar signed cookies usando uma política personalizada, consulte Definir signed cookies usando uma política personalizada.

Como signed cookies funcionam

Aqui está uma visão geral de como você configura CloudFront cookies assinados e como CloudFront responde quando um usuário envia uma solicitação que contém um cookie assinado.

  1. Na sua CloudFront distribuição, especifique um ou mais grupos de chaves confiáveis, que contêm as chaves públicas que CloudFront podem ser usadas para verificar a assinatura do URL. Use as chaves privadas correspondentes para assinar os URLs.

    Para obter mais informações, consulte Especificar os assinantes que podem criar signed URLs e cookies.

  2. Desenvolva seu aplicativo para determinar se um usuário deve ter acesso a seu conteúdo e, em caso afirmativo, para enviar três cabeçalhos Set-Cookie para o visualizador. (Cada Set-Cookie cabeçalho pode conter somente um par nome-valor, e um cookie CloudFront assinado requer três pares nome-valor.) Você deve enviar os cabeçalhos Set-Cookie para o visualizador antes de ele solicitar o conteúdo privado. Se você definir uma hora de expiração breve no cookie, envie mais três cabeçalhos Set-Cookie em resposta a solicitações subsequentes para que o usuário continue tendo acesso.

    Normalmente, sua CloudFront distribuição terá pelo menos dois comportamentos de cache, um que não exige autenticação e outro que exige. A página de erro da parte segura do site inclui um redirecionador ou link para uma página de login.

    Se você configurar sua distribuição para armazenar arquivos em cache com base em cookies, CloudFront não armazena em cache arquivos separados com base nos atributos dos cookies assinados.

  3. Um usuário faz login em seu site e paga pelo conteúdo ou cumpre outro requisito de acessar.

  4. O aplicativo retorna os cabeçalhos Set-Cookie na resposta, e o visualizador armazena os pares de nome-valor.

  5. O usuário solicita um arquivo.

    O navegador do usuário ou outro visualizador obtém os pares de nome-valor da etapa 4 e os adiciona à solicitação em um cabeçalho Cookie. Esse é o signed cookie.

  6. CloudFront usa a chave pública para validar a assinatura no cookie assinado e confirmar que o cookie não foi adulterado. Se a assinatura for inválida, a solicitação será rejeitada.

    Se a assinatura no cookie for válida, CloudFront examine a declaração de política no cookie (ou crie uma se você estiver usando uma política predefinida) para confirmar se a solicitação ainda é válida. Por exemplo, se você especificou uma data e hora de início e término para o cookie, CloudFront confirma que o usuário está tentando acessar seu conteúdo durante o período em que você deseja permitir o acesso.

    Se a solicitação atender aos requisitos da declaração de política, CloudFront exiba seu conteúdo da mesma forma que serve para conteúdo não restrito: ela determina se o arquivo já está no cache de borda, encaminha a solicitação para a origem, se necessário, e retorna o arquivo ao usuário.

Se você especificar o parâmetro Domain em um cabeçalho Set-Cookie, especifique o valor mais preciso possível para reduzir o possível acesso por alguém com o mesmo nome de domínio raiz. Por exemplo, app.example.com é preferível a example.com, especialmente quando você não tem o controle sobre example.com. Isso ajuda a evitar que alguém acesse seu conteúdo de www.example.com.

Para ajudar a evitar esse tipo de ataque:

  • Exclua os atributos de cookie Expires e Max-Age para que o cabeçalho Set-Cookie crie um cookie de sessão. Cookies de sessão são automaticamente excluídos quando o usuário fecha o navegador, diminuindo a possibilidade de alguém obter acesso não autorizado ao seu conteúdo.

  • Inclua o atributo Secure para que o cookie seja criptografado quando o visualizador incluí-lo em uma solicitação.

  • Quando possível, use uma política personalizada e inclua o endereço IP do visualizador.

  • No atributo CloudFront-Expires, especifique o menor tempo de expiração razoável com base em quanto tempo você deseja que os usuários tenham acesso a seu conteúdo.

Para determinar se um cookie assinado ainda é válido, CloudFront verifique a data e a hora de expiração no cookie no momento da solicitação HTTP. Se um cliente começar a fazer download de um grande arquivo logo antes da hora de expiração, o download será concluído mesmo se passar a hora de expiração durante o download. Se a conexão TCP cair e o cliente tentar reiniciar o download após a hora de expiração, ocorrerá falha no download.

Se o cliente usar Range GETs para obter um arquivo em partes menores, ocorrerá falha em qualquer solicitação GET que ocorrer após a hora de expiração. Para obter mais informações sobre Range GETs, consulte Como CloudFront processa solicitações parciais de um objeto (intervalo de GETs).

Código de exemplo e ferramentas de terceiros

O código de exemplo do conteúdo privado mostra apenas como criar a assinatura para signed URLs. No entanto, o processo de criação de uma assinatura para um signed cookie é semelhante, ou seja, a maior parte do código de exemplo é relevante. Para obter mais informações, consulte os tópicos a seguir: