Usar cookies assinados
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.
Tópicos
- Decidir usar políticas predefinidas ou personalizadas para cookies assinados
- Como signed cookies funcionam
- Evitar o uso indevido de cookies assinados
- Quando o CloudFront confere a data e hora de validade de um cookie assinado
- Código de exemplo e ferramentas de terceiros
- Definir cookies assinados usando uma política predefinida
- Definir cookies assinados usando uma política personalizada
Decidir usar políticas predefinidas ou personalizadas para cookies assinados
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 |
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 cookies assinados usando uma política predefinida.
Para obter informações sobre como criar signed cookies usando uma política personalizada, consulte Definir cookies assinados 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.
-
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 URLs e cookies assinados.
-
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çalhoSet-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çalhosSet-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çalhosSet-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.
-
Um usuário faz login em seu site e paga pelo conteúdo ou cumpre outro requisito de acessar.
-
O aplicativo retorna os cabeçalhos
Set-Cookie
na resposta, e o visualizador armazena os pares de nome-valor. -
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. -
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.
Evitar o uso indevido de cookies assinados
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
eMax-Age
para que o cabeçalhoSet-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.
Quando o CloudFront confere a data e hora de validade de um cookie assinado
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.