Definir cookies assinados usando uma política personalizada
Para definir um signed cookie que usa uma política personalizada, execute as etapas a seguir.
Para definir um signed cookie usando uma política personalizada
-
Se você estiver usando o .NET ou Java para criar signed URLs e não tiver reformatado a chave privada do seu par de chaves para do formato padrão .pem para um formato compatível com o .NET ou 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-Policy
,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
. Isso 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-Policy=
base64 encoded version of the policy statement
; 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
-
Exige que o visualizador envie o cookie apenas em solicitações HTTP ou HTTPS.
CloudFront-Policy
-
Sua declaração de política no formato JSON, sem espaços em branco e com codificação base64. Para ter mais informações, consulte Criar uma assinatura para um cookie assinado que use uma política personalizada.
A declaração de política controla o acesso que um signed cookie concede a um usuário. Ela inclui os arquivos que o usuário pode acessar, uma data e hora de expiração, uma data e hora opcionais em que o URL se torna válido e um endereço IP opcional ou intervalo de endereços IP que tenham permissão para acessar o arquivo.
CloudFront-Signature
-
Uma versão assinada, com hash e codificação base64 da 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 personalizada.
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 ter mais informações, consulte Especificar os assinantes que podem criar URLs e cookies assinados.
- (Opcional)
Exemplos de cabeçalhos Set-Cookie
para políticas personalizadas
Veja os exemplos a seguir de pares de cabeçalhos Set-Cookie
.
Se quiser usar um nome de domínio alternativo, como exemplo.org 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.
exemplo Exemplo 1
É possível usar os cabeçalhos Set-Cookie
de um signed cookie quando estiver usando o nome de domínio associado à sua distribuição nos URLs dos seus arquivos.
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
exemplo Exemplo 2
É possível usar cabeçalhos Set-Cookie
de um signed cookie quando você estiver usando um nome de domínio alternativo (exemplo.org) nos URLs dos seus arquivos.
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
exemplo Exemplo 3
É possível usar os pares de cabeçalho Set-Cookie
de uma solicitação assinada quando estiver usando o nome de domínio associado à sua distribuição nos URLs dos seus arquivos.
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=dd111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly
exemplo Exemplo 4
É possível usar os pares de cabeçalho Set-Cookie
de uma solicitação assinada quando estiver usando um nome de domínio alternativo (exemplo.org) associado à sua distribuição nos URLs dos seus arquivos.
Set-Cookie: CloudFront-Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Signature=dtKhpJ3aUYxqDIwepczPiDb9NXQ_; Domain=example.org; Path=/; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/; Secure; HttpOnly
Criar uma declaração de política para um cookie assinado que use uma política personalizada
Para criar uma declaração de política para uma política personalizada, conclua as etapas a seguir. Para obter vários exemplos de declaração de política que controlam o acesso a arquivos de diversas formas, consulte Exemplos de declaração de política para um signed cookie que usa uma política personalizada.
Para criar a declaração de política para um signed cookie que usa uma política personalizada
-
Crie a declaração de política usando o formato JSON a seguir.
{ "Statement": [ { "Resource": "URL of the file", "Condition": { "DateLessThan": { "AWS:EpochTime":required ending date and time in Unix time format and UTC }, "DateGreaterThan": { "AWS:EpochTime":optional beginning date and time in Unix time format and UTC }, "IpAddress": { "AWS:SourceIp": "optional IP address" } } } ] }
Observe o seguinte:
-
Você pode incluir apenas uma instrução.
-
Use a codificação de caracteres UTF-8.
-
Inclua todas as pontuações e nomes de parâmetro exatamente como especificado. Abreviações de nomes de parâmetro não são aceitas.
-
A ordem dos parâmetros na seção
Condition
não é importante. -
Para obter informações sobre os valores de
Resource
,DateLessThan
,DateGreaterThan
eIpAddress
, consulte Valores especificados na declaração de uma política personalizada para signed cookies.
-
-
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.
-
Codifique a declaração de política 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 em seu cabeçalho
Set-Cookie
depois deCloudFront-Policy=
. -
Crie uma assinatura para o cabeçalho
Set-Cookie
emCloudFront-Signature
adicionando hash, assinando e codificando em base64 a declaração de política. Para obter mais informações, consulte Criar uma assinatura para um cookie assinado que use uma política personalizada.
Valores especificados na declaração de uma política personalizada para signed cookies
Ao criar uma declaração de política para uma política personalizada, especifique os valores a seguir.
- Recurso
-
O URL base, inclusive suas query strings, se houver:
https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes
Importante
Se você omitir o parâmetro
Resource
, os usuários poderão acessar todos os arquivos associados a qualquer distribuição associada ao par de chaves usado para criar o signed URL.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.
-
Curingas: é possível usar o caractere curinga que corresponde a zero ou mais caracteres (*) ou o caractere curinga que corresponde a exatamente um caractere (?) em qualquer lugar na string. Por exemplo, o valor:
https://d111111abcdef8.cloudfront.net/*game_download.zip*
incluiria os seguintes arquivos:
-
https://d111111abcdef8.cloudfront.net/game_download.zip
-
https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes
-
https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp
-
-
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.
Para obter mais informações, consulte Quando o CloudFront confere a data e hora de validade de um cookie assinado.
- DateGreaterThan (opcional)
-
Uma data e hora de início opcional do URL no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Os usuários não podem acessar o arquivo antes ou na data e hora especificadas. Não coloque os valores entre aspas.
- IpAddress (opcional)
-
O endereço IP do cliente que está fazendo a solicitação GET. Observe o seguinte:
-
Para permitir o acesso de qualquer endereço IP ao arquivo, omita o parâmetro
IpAddress
. -
Você pode especificar um ou vários endereços IP. Por exemplo, você não pode definir que a política permita o acesso se o endereço IP do cliente estiver em um de dois intervalos separados.
-
Para permitir o acesso de um único endereço IP, especifique:
"
IPv4 IP address
/32"
-
Você deve especificar os intervalos de endereço IP no formato CIDR IPv4 padrão (por exemplo,
192.0.2.0/24
). Para obter mais informações, acesse a RFC 4632, Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan, https://tools.ietf.org/html/rfc4632. Importante
Endereços IP no formato IPv6, como 2001:0db8:85a3::8a2e:0370:7334, não são compatíveis.
Se você estiver usando uma política personalizada que inclui
IpAddress
, não permita o IPv6 para a distribuição. Se você quiser restringir o acesso a um conteúdo por endereço IP e oferecer suporte a solicitações IPv6 para outro tipo de conteúdo, crie duas distribuições. Para obter mais informações, consulte Enable IPv6 no tópico Referência de configurações da distribuição.
-
Exemplos de declaração de política para um signed cookie que usa uma política personalizada
Os exemplos de declaração de política a seguir mostram como controlar o acesso a um arquivo específico, todos os arquivos de um diretório ou todos os arquivos associados a um ID de par de chaves. Os exemplos também mostram como controlar o acesso de um único endereço IP ou um intervalo de endereços IP e como evitar que os usuários usem o signed cookie após a data e hora especificadas.
Se você copiar e colar qualquer um desses exemplos, remova os espaços em branco (inclusive caracteres de nova linha e de tabulação), substitua os valores pelos seus próprios valores e inclua um caractere de nova linha após a chave de fechamento ( } ).
Para ter mais informações, consulte Valores especificados na declaração de uma política personalizada para signed cookies.
Tópicos
- Exemplo de declaração de política: acessar um arquivo de um intervalo de endereços IP
- Exemplo de declaração de política: acessar todos os arquivos de um diretório em um intervalo de endereços IP
- Exemplo de declaração de política: acessar todos os arquivos associados a um ID de par de chaves de um endereço IP
Exemplo de declaração de política: acessar um arquivo de um intervalo de endereços IP
O exemplo a seguir de política personalizada em um signed cookie especifica que um usuário pode acessar o arquivo https://d111111abcdef8.cloudfront.net/game_download.zip
de endereços IP no intervalo 192.0.2.0/24
até 1.º de janeiro de 2023, 10h UTC:
{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }
Exemplo de declaração de política: acessar todos os arquivos de um diretório em um intervalo de endereços IP
O exemplo a seguir de política personalizada permite criar signed cookies para qualquer arquivo no diretório training
, conforme indicado pelo caractere curinga "*" no parâmetro Resource
. Os usuários podem acessar o arquivo de um endereço IP no intervalo 192.0.2.0/24
até 1º de janeiro de 2013, 10h UTC:
{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1357034400 } } } ] }
Cada signed cookie em que você usa essa política inclui um URL base que identifica um arquivo específico, por exemplo:
https://d111111abcdef8.cloudfront.net/training/orientation.pdf
Exemplo de declaração de política: acessar todos os arquivos associados a um ID de par de chaves de um endereço IP
O exemplo a seguir de política personalizada permite definir signed cookies para qualquer arquivo associado a qualquer distribuição, conforme indicado pelo caractere curinga "*" no parâmetro Resource
. O usuário deve usar o endereço IP 192.0.2.10/32
. (O valor 192.0.2.10/32
na notação CIDR se refere a um único endereço IP, 192.0.2.10
.) Os arquivos estão disponíveis apenas de 1º de janeiro de 2013, 10h UTC, a 2 de janeiro de 2013, 10h UTC:
{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1357034400 }, "DateLessThan": { "AWS:EpochTime": 1357120800 } } } ] }
Cada signed cookie em que você usa essa política inclui um URL base que identifica um arquivo específico em uma distribuição específica do CloudFront, por exemplo:
https://d111111abcdef8.cloudfront.net/training/orientation.pdf
O signed cookie também inclui o ID de um par de chaves, que deve estar associado a um grupo de chaves confiável na distribuição (d111111abcdef8.cloudfront.net) especificada no URL base.
Criar uma assinatura para um cookie assinado que use uma política personalizada
A assinatura de um signed cookie que usa uma política personalizada é uma versão da declaração de política com hash, assinada e codificada em base64.
Para obter mais informações e exemplos de como adicionar hash, assinar e codificar a declaração de política, consulte:
Para criar uma assinatura para um signed cookie usando uma política personalizada
-
Use a função de hash SHA-1 e o RSA para assinar e adicionar um hash à declaração de política do JSON criada no procedimento Para criar a declaração de política para um signed URL que usa uma política personalizada. Use a versão da declaração de política que não inclui mais espaços em branco, mas que ainda não foi codificada em base64.
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=
e volte para Para definir um signed cookie usando uma política personalizada adicionar o cabeçalhoSet-Cookie
emCloudFront-Key-Pair-Id
.