Definir signed cookies usando uma política padrão - Amazon CloudFront

Definir signed cookies usando uma política padrão

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 signed cookie que usa uma política padrão.

Para definir um signed cookie usando uma política padrão

  1. 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).

  2. Programe seu aplicativo para enviar três cabeçalhos Set-Cookie para os visualizadores aprovados. São necessários três cabeçalhos Set-Cookie porque cada cabeçalho Set-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 e CloudFront-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 e Max-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 signed cookies.

    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 atributo Domain, 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 atributo Domain, o nome de domínio do URL e o valor do atributo Domain 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 Alternate Domain Names (CNAMEs) no tópico Valores especificados ao criar ou atualizar uma distribuição na.

    (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-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 signed cookie que usa uma política padrão.

    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 assinante confiável na distribuição. Para obter mais informações, consulte Especificar os assinantes que podem criar signed URLs e cookies.

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 Alternate Domain Names (CNAMEs) no tópico Valores especificados ao criar ou atualizar uma distribuição na.

Criar uma assinatura para um signed cookie que usa uma política padrão

Para criar a assinatura de um signed cookie que usa uma política padrão, proceda da seguinte maneira:

Criar uma declaração de política para um signed cookie que usa uma política padrão

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

  1. 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 e DateLessThan, 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 } } } ] }
  2. 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:

http://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:// ou https://.

  • 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çalho Set-Cookie. Não coloque os valores entre aspas.

Para obter mais informações, consulte Quando o CloudFront verifica a data e hora de expiração de um signed cookie?.

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 http://d111111abcdef8.cloudfront.net/horizon.jpg até 16 de março de 2015, 10h UTC:

{ "Statement": [ { "Resource": "http://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 signed cookie que usa uma política padrão

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

  1. 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áveis 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.

  2. Remova os espaços em branco (inclusive caracteres de nova linha e de tabulação) da string assinada e com hash.

  3. Codifique a string usando codificação base64 MIME. Para 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.

  4. 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)

  5. Inclua o valor resultante no cabeçalho Set-Cookie para o par de nome-valor CloudFront-Signature. Em seguida, volte para Para definir um signed cookie usando uma política padrão e adicione o cabeçalho Set-Cookie em CloudFront-Key-Pair-Id.