Definir cookies assinados usando uma política predefinida
Para definir um signed cookie usando uma política padrão, execute as seguintes etapas. Para criar a assinatura, consulte Criar uma assinatura para um cookie assinado que use uma política predefinida.
Para definir um signed cookie usando uma política padrão
-
Se estiver usando o .NET ou o Java para criar signed cookies e não tiver reformatado a chave privada de seu par de chaves do formato padrão .pem para um formato compatível com o .NET ou o Java, faça isso agora. Para obter mais informações, consulte Reformatar a chave privada (somente .NET e Java).
-
Programe seu aplicativo para enviar três cabeçalhos
Set-Cookie
para os visualizadores aprovados. São necessários três cabeçalhosSet-Cookie
porque cada cabeçalhoSet-Cookie
pode conter somente um par de nome/valor, e um signed cookie do CloudFront requer três pares. Os pares de nome-valor são:CloudFront-Expires
,CloudFront-Signature
eCloudFront-Key-Pair-Id
. Os valores devem estar presentes no visualizador antes de um usuário fazer a primeira solicitação de um arquivo ao qual você deseja controlar o acesso.nota
Em geral, recomendamos que você exclua os atributos
Expires
eMax-Age
. A exclusão dos atributos faz com que o navegador exclua o cookie quando o usuário fecha o navegador, diminuindo a possibilidade de alguém obter acesso não autorizado ao seu conteúdo. Para obter mais informações, consulte Evitar o uso indevido de cookies assinados.Os nomes dos atributos de cookie fazem distinção entre letras maiúsculas e minúsculas.
As quebras de linha são incluídas apenas para tornar os atributos mais legíveis.
Set-Cookie: CloudFront-Expires=
date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Signature=hashed and signed version of the policy statement
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly- (Opcional)
Domain
-
O nome de domínio do arquivo solicitado. Se você não especificar um atributo
Domain
, o valor padrão será o nome de domínio do URL, e ele se aplica apenas ao nome de domínio em questão, não aos subdomínios. Se você especificar um atributoDomain
, ele também será aplicado aos subdomínios. Um ponto inicial no nome de domínio (por exemplo,Domain=.example.com
) é opcional. Além disso, se você especificar um atributoDomain
, o nome de domínio do URL e o valor do atributoDomain
deverão ser correspondentes.É possível especificar o nome de domínio atribuído pelo CloudFront à sua distribuição, por exemplo, d111111abcdef8.cloudfront.net, mas é possível especificar *.cloudfront.net para o nome de domínio.
Se você quiser usar um nome de domínio alternativo, como example.com nos URLs, deverá adicioná-lo à sua distribuição, independentemente de especificá-lo no atributo
Domain
ou não. Para obter mais informações, consulte Nomes de domínio alternativos (CNAMEs) no tópico Referência de configurações da distribuição. - (Opcional)
Path
-
O caminho do arquivo solicitado. Se você não especificar um atributo
Path
, o valor padrão será o caminho do URL. Secure
-
Exige que o visualizador criptografe os cookies antes de enviar uma solicitação. Recomendamos que você envie o cabeçalho
Set-Cookie
por uma conexão HTTPS para garantir que os atributos de cookie estejam protegidos de ataques a intermediários. HttpOnly
-
Define como o navegador (quando compatível) interage com o valor do cookie. Com
HttpOnly
, os valores dos cookies são inacessíveis ao JavaScript. Essa precaução pode ajudar a mitigar os ataques conhecidos como cross-site scripting (XSS). Consulte mais informações em Using HTTP cookies. CloudFront-Expires
-
Especifique a data e hora de expiração no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Por exemplo, 1º de janeiro de 2013 10h UTC é convertido para 1357034400 no formato de hora do Unix. Para usar o horário epoch, use um número inteiro de 32 bits para uma data que pode ser até 2147483647 (19 de janeiro de 2038 às 03:14:07 UTC). Para obter informações sobre UTC, consulte a RFC 3339, Date and Time on the Internet: Timestamps, https://tools.ietf.org/html/rfc3339
. CloudFront-Signature
-
Uma versão assinada, com hash e codificação base64 de uma declaração de política do JSON. Para obter mais informações, consulte Criar uma assinatura para um cookie assinado que use uma política predefinida.
CloudFront-Key-Pair-Id
-
O ID de uma chave pública do CloudFront, por exemplo,
K2JCJMDEHXQW5F
. O ID da chave pública informa ao CloudFront qual chave pública deve ser usada para validar o signed URL. O CloudFront compara as informações da assinatura com as informações da declaração de política para verificar se o URL não foi adulterado.Essa chave pública deve pertencer a um grupo de chaves que seja um signatário confiável na distribuição. Para obter mais informações, consulte Especificar os assinantes que podem criar URLs e cookies assinados.
- (Opcional)
O exemplo a seguir mostra cabeçalhos de Set-Cookie
de um signed cookie quando você está usando o nome de domínio associado à sua distribuição nas URLs de seus arquivos:
Set-Cookie: CloudFront-Expires=1426500000; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
O exemplo a seguir mostra cabeçalhos de Set-Cookie
de um signed cookie quando você está usando o nome de domínio alternativo example.org nas URLs de seus arquivos:
Set-Cookie: CloudFront-Expires=1426500000; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/images/*; Secure; HttpOnly
Se você quiser usar um nome de domínio alternativo, como example.com nos URLs, deverá adicioná-lo à sua distribuição, independentemente de especificá-lo no atributo Domain
ou não. Para obter mais informações, consulte Nomes de domínio alternativos (CNAMEs) no tópico Referência de configurações da distribuição.
Criar uma assinatura para um cookie assinado que use uma política predefinida
Para criar a assinatura de um cookie que use uma política predefinida, siga estes procedimentos.
Tópicos
Criar uma declaração de política para um cookie assinado que use uma política predefinida
Ao definir um signed cookie que usa uma política padrão, o atributo CloudFront-Signature
será uma versão assinada e com hash de uma declaração de política. Para signed cookies que usam uma política padrão, a declaração de política não é incluída no cabeçalho Set-Cookie
, como é feito nos signed cookies que usam uma política personalizada. Para criar a declaração de política, conclua as etapas a seguir.
Para criar uma declaração de política para um signed cookie que usa uma política padrão
-
Crie a declaração de política usando o formato JSON a seguir e a codificação de caracteres UTF-8. Inclua todas as pontuações e outros valores literais exatamente como especificado. Para obter informações sobre os parâmetros
Resource
eDateLessThan
, consulte Valores especificados na declaração de uma política padrão para signed cookies.{ "Statement": [ { "Resource": "base URL or stream name", "Condition": { "DateLessThan": { "AWS:EpochTime": ending date and time in Unix time format and UTC } } } ] }
-
Remova todas os espaços em branco (inclusive caracteres de nova linha e de tabulação) da declaração de política. Pode ser necessário incluir caracteres de escape na string do código do aplicativo.
Valores especificados na declaração de uma política padrão para signed cookies
Ao criar uma declaração de política para uma política padrão, especifique os valores a seguir:
- Recurso
-
O URL base, inclusive suas query strings, se houver, por exemplo:
https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes
Você pode especificar apenas um valor para
Resource
.Observe o seguinte:
-
Protocolo: o valor deve começar com
http://
ouhttps://
. -
Parâmetros de query string :se você não tiver query strings, omita o ponto de interrogação.
-
Nomes de domínio alternativos: se especificar um nome de domínio alternativo (CNAME) no URL, você deverá especificá-lo ao fazer referência ao arquivo na sua página da web ou aplicação. Não especifique o URL do Amazon S3 para o arquivo.
-
- DateLessThan
-
A data e hora de expiração do URL no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Não coloque os valores entre aspas.
Por exemplo, 16 de março de 2015, 10h UTC é convertido para 1426500000 no formato de hora do Unix.
Esse valor deve corresponder ao valor do atributo
CloudFront-Expires
no cabeçalhoSet-Cookie
. Não coloque os valores entre aspas.Para obter mais informações, consulte Quando o CloudFront confere a data e hora de validade de um cookie assinado.
Exemplo de declaração de política para uma política padrão
Ao usar o seguinte exemplo de declaração de política em um signed cookie, um usuário pode acessar o arquivo https://d111111abcdef8.cloudfront.net/horizon.jpg
até 16 de março de 2015, 10h UTC:
{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes", "Condition": { "DateLessThan": { "AWS:EpochTime": 1426500000 } } } ] }
Assinar a declaração de política para criar uma assinatura para um cookie assinado que use uma política predefinida
Para criar o valor para o atributo CloudFront-Signature
em um cabeçalho Set-Cookie
, assine e adicione um hash à declaração de política criada em Para criar uma declaração de política para um signed cookie que usa uma política padrão.
Para obter mais informações e exemplos de como adicionar hash, assinar e codificar a declaração de política, consulte os seguintes tópicos:
Para criar uma assinatura para um signed cookie usando uma política padrão
-
Use a função de hash SHA-1 e o RSA para assinar e adicionar um hash à declaração de política criada no procedimento Para criar uma declaração de política para um signed cookie que usa uma política padrão. Use a versão da declaração de política que não inclui mais espaços em branco.
Para a chave privada exigida pela função hash, use uma chave privada que tenha a chave pública em um grupo de chaves confiável ativo para a distribuição.
nota
O método usado para assinar e adicionar um hash à declaração de política depende da sua linguagem de programação e plataforma. Para obter o código de exemplo, consulte Exemplos de código para criar uma assinatura para um signed URL.
-
Remova os espaços em branco (inclusive caracteres de nova linha e de tabulação) da string assinada e com hash.
-
Codifique a string usando codificação base64 MIME. Para obter mais informações, consulte Section 6.8, Base64 Content-Transfer-Encoding
em RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies. -
Substitua os caracteres inválidos da query string de um URL por caracteres válidos. A tabela a seguir indica os caracteres válidos e inválidos.
Substitua esses caracteres inválidos Por esses caracteres válidos +
- (hífen)
=
_ (sublinhado)
/
~ (til)
-
Inclua o valor resultante no cabeçalho
Set-Cookie
para o par de nome-valorCloudFront-Signature
. Em seguida, volte para Para definir um signed cookie usando uma política padrão e adicione o cabeçalhoSet-Cookie
emCloudFront-Key-Pair-Id
.