Usar signed cookies - Amazon CloudFront

Usar signed cookies

Os signed cookies do CloudFront permitem controlar quem pode acessar seu conteúdo quando você não quiser alterar seus URLs atuais ou quando quiser fornecer acesso a vários arquivos restritos, por exemplo, todos os arquivos da á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

A seguir, uma visão geral de como configurar o CloudFront para signed cookies e como o CloudFront responde quando um usuário envia uma solicitação que contenha um signed cookie.

  1. Na sua distribuição do CloudFront, especifique um ou mais grupos de chaves confiáveis, que contenham as chaves públicas que o CloudFront pode usar 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 cabeçalho Set-Cookie pode conter somente um par de nome/valor, e um signed cookie do CloudFront requer três pares de 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, a distribuição do CloudFront terá pelo menos dois comportamentos de cache: um que não exige autenticação e um 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, o CloudFront não armazenará arquivos separados com base nos atributos nos signed cookies.

  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. O CloudFront usa a chave pública para validar a assinatura no signed cookie e confirmar se o cookie não foi adulterado. Se a assinatura for inválida, a solicitação será rejeitada.

    Se a assinatura do cookie for válida, o CloudFront analisará a declaração de política no cookie (ou criará uma se você estiver usando uma política padrão) para confirmar se a solicitação continua válida. Por exemplo, se você especificou uma data e hora de início e término para o cookie, o CloudFront confirmará se o usuário está tentando acessar o conteúdo durante o período de acesso permitido.

    Se a solicitação cumprir os requisitos da declaração de política, o CloudFront fornecerá o conteúdo, como o faz com conteúdo não restrito: determina se o arquivo já está no ponto de presença de caches, encaminha a solicitação para a origem, se necessário, e retorna o arquivo para o 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 signed cookie continua válido, o CloudFront verifica a data e hora de expiração dele 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 o CloudFront processa solicitações parciais de um objeto (Range 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: