Definir cookies assinados usando uma política personalizada - Amazon CloudFront

Definir cookies assinados usando uma política personalizada

Para definir um signed cookie que usa uma política personalizada, execute as etapas a seguir.

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
  1. 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 e IpAddress, consulte Valores especificados na declaração de uma política personalizada para signed cookies.

  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.

  3. 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.

  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 em seu cabeçalho Set-Cookie depois de CloudFront-Policy=.

  6. Crie uma assinatura para o cabeçalho Set-Cookie em CloudFront-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:// ou https://.

  • 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.

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

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

  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= e volte para Para definir um signed cookie usando uma política personalizada adicionar o cabeçalho Set-Cookie em CloudFront-Key-Pair-Id.