Criar um URL assinado usando uma política personalizada - Amazon CloudFront

Criar um URL assinado usando uma política personalizada

Para criar um URL assinado usando uma política personalizada, execute o procedimento a seguir.

Para criar um signed URL usando uma política personalizada
  1. 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).

  2. Concatene os seguintes valores na ordem listada, replicando o formato mostrado neste exemplo de URL assinado:

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F

    Remova todos os espaços vazios (inclusive caracteres de nova linha e de tabulação). Pode ser necessário incluir caracteres de escape na string do código do aplicativo. Todos os valores têm um tipo de String.

    1. URL base do arquivo

    O URL base é o URL do CloudFront usado para acessar o arquivo se você não estivesse usando signed URLs, inclusive seus próprios parâmetros de query string, se houver. No exemplo anterior, o URL de base é https://d111111abcdef8.cloudfront.net/image.jpg. Para mais informações sobre o formato dos URLs para distribuições, consulte .

    Os exemplos a seguir mostram os valores que você especifica para suas distribuições.

    • O URL do CloudFront a seguir é para um arquivo de imagem em uma distribuição (usando o nome de domínio do CloudFront). Observe que image.jpg está em um diretório images. O caminho para o arquivo no URL deve corresponder ao caminho para o arquivo no servidor HTTP ou no bucket do Amazon S3.

      https://d111111abcdef8.cloudfront.net/images/image.jpg

    • O seguinte URL do CloudFront inclui uma query string:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • Os URLs do CloudFront a seguir são para arquivos de imagem em uma distribuição. Os dois usam um nome de domínio alternativo; o segundo inclui uma query string:

      https://www.example.com/images/image.jpg

      https://www.example.com/images/image.jpg?color=red

    • O URL do CloudFront a seguir é para um arquivo de imagem em uma distribuição que usa um nome de domínio alternativo e o protocolo HTTPS:

      https://www.example.com/images/image.jpg

    2. ?

    O ? indica que os parâmetros de string de consulta seguem o URL base. Inclua ? mesmo se você não tiver parâmetros de string de consulta.

    3. Seus parâmetros de string de consulta, se houver&

    Este valor é opcional. Se você quiser adicionar seus próprios parâmetros de query string, por exemplo:

    color=red&size=medium

    e, depois, adicioná-los após ? e antes do parâmetro Policy. Em algumas circunstâncias raras, pode ser necessário inserir seus parâmetros de query string depois de Key-Pair-Id.

    Importante

    Seus parâmetros não podem ser denominados Policy, Signature nem Key-Pair-Id.

    Se você adicionar seus próprios parâmetros, inclua & depois de cada um deles, inclusive o último.

    4. Policy=versão da declaração de política codificada em base64

    Sua declaração de política no formato JSON, sem espaços em branco e com codificação base64. Para obter mais informações, consulte Criar uma declaração de política para um URL assinado que use uma política personalizada.

    A declaração de política controla o acesso que um signed URL concede a um usuário. Ela inclui o URL do arquivo, 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 tenha permissão para acessar o arquivo.

    5. &Signature=versão assinada e com hash da declaração de política

    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 URL que use uma política personalizada.

    6. &Key-Pair-Id=ID da chave pública do CloudFront cuja chave privada correspondente está sendo usada para gerar a assinatura

    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.

Criar uma declaração de política para um URL assinado que use uma política personalizada

Conclua as etapas a seguir para criar uma declaração de política para um signed URL que usa uma política personalizada.

Para obter exemplos de declarações de política que controlam o acesso a arquivos de diversas formas, consulte Exemplos de declaração de política para um signed URL que usa uma política personalizada.

Para criar a declaração de política para um signed URL que usa uma política personalizada
  1. Crie a declaração de política usando o formato JSON a seguir. Substitua os símbolos menor que (<) e maior que (>) e as descrições contidas neles por seus próprios valores. Para obter mais informações, consulte Valores especificados na declaração de política para um signed URL que usa uma política personalizada.

    { "Statement": [ { "Resource": "<Optional but recommended: 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:

  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 ao seu signed URL depois de Policy=.

  6. Crie uma assinatura para o signed URL adicionando hash, assinando e codificando em Base64 a declaração de política. Para obter mais informações, consulte Criar uma assinatura para um URL que use uma política personalizada.

Valores especificados na declaração de política para um signed URL que usa uma política personalizada

Ao criar uma declaração de política para uma política personalizada, especifique os valores a seguir.

Recurso

O URL, incluindo quaisquer strings de consulta, mas excluindo os parâmetros Policy, Signature e Key-Pair-Id do CloudFront. Por exemplo:

https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

Você pode especificar somente um valor para Resource.

Importante

Você pode omitir o parâmetro Resource de uma política, mas isso significa que qualquer pessoa com o signed URL poderá acessar todos os arquivos de qualquer distribuição associada ao par de chaves usado para criar o signed URL.

Observe o seguinte:

  • Protocolo: o valor deve começar com http://, https:// ou *://.

  • Parâmetros da string de consulta: se o URL tiver parâmetros da string de consulta, use um caractere de barra invertida (\) para escapar do caractere de ponto de interrogação (?) que inicia a string de consulta. Por exemplo:

    https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

  • Caracteres curinga: é possível usar caracteres curinga no URL da política. Os seguintes caracteres curinga são compatíveis:

    • asterisco (*), que corresponde a zero ou mais caracteres

    • ponto de interrogação (?) corresponde exatamente a um caractere

    Quando o CloudFront combina o URL na política com o URL na solicitação HTTP, o URL na política é dividido em quatro seções (protocolo, domínio, caminho e string de consulta) da seguinte forma:

    [protocol]://[domain]/[path]\?[query string]

    Quando você usa um caractere curinga no URL da política, a correspondência de curingas se aplica somente dentro dos limites da seção que contém o curinga. Por exemplo, considere este signed URL em uma política:

    https://www.example.com/hello*world

    Neste exemplo, o caractere curinga asterisco (*) só se aplica à seção do caminho, portanto, ele corresponde aos URLs https://www.example.com/helloworld e https://www.example.com/hello-world, mas não corresponde ao URL https://www.example.net/hello?world.

    As seguintes exceções se aplicam aos limites da seção para a correspondência de curingas:

    • Um asterisco final na seção do caminho implica um asterisco na seção da string de consulta. Por exemplo, http://example.com/hello* equivale a http://example.com/hello*\?*.

    • Um asterisco final na seção do domínio implica um asterisco nas seções do caminho e da string de consulta. Por exemplo, http://example.com* equivale a http://example.com*/*\?*.

    • Um URL na política pode omitir a seção do protocolo e começar com um asterisco na seção do domínio. Nesse caso, a seção do protocolo é definida implicitamente como um asterisco. Por exemplo, o URL *example.com em uma política é equivalente a *://*example.com/.

    • Um asterisco por si só ("Resource": "*") corresponde a qualquer URL.

    Por exemplo, o valor https://d111111abcdef8.cloudfront.net/*game_download.zip* em uma política corresponde a todos os seguintes URLs:

    • 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 você especificar um nome de domínio alternativo (CNAME) no URL na política, A solicitação HTTP deverá usar o nome do domínio alternativo na sua página da web ou aplicação. Não especifique o URL do Amazon S3 para o arquivo em uma política.

DateLessThan

A data e hora de expiração do URL no formato de hora do Unix (em segundos) e no Tempo Universal Coordenado (UTC). Na política, não coloque os valores entre aspas. Para obter informações sobre UTC, consulte Date and Time on the Internet: Timestamps.

Por exemplo, 31 de janeiro de 2023, 10h UTC é convertido em 1675159200 no formato de hora do Unix.

Esse é o único parâmetro obrigatório na seção Condition. O CloudFront requer esse valor para impedir que os usuários tenham acesso permanente ao seu conteúdo privado.

Para ter mais informações, consulte Quando o CloudFront confere a data e hora de validade de um URL 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 HTTP. Observe o seguinte:

  • Para permitir o acesso de qualquer endereço IP ao arquivo, omita o parâmetro IpAddress.

  • É possível especificar um ou vários endereços IP. Por exemplo, você não pode usar a política que permitir 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, consulte Encaminhamento Entre Domínios Sem Classificação (CIDR): A atribuição do endereço da Internet e o plano de agregação.

    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 URL 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 URL 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 obter mais informações, consulte Valores especificados na declaração de política para um signed URL que usa uma política personalizada.

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 URL 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é 31 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": 1675159200 } } } ] }

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 URLs 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é 31 de janeiro de 2023, 10h UTC:

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

Cada signed URL com o qual você usa essa política tem um URL 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 de política personalizada a seguir permite que você crie signed URLs para qualquer arquivo associado a qualquer distribuição, conforme indicado pelo caractere curinga * no parâmetro Resource. O signed URL deve usar o protocolo https://, não o http://. 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 somente de 31 de janeiro de 2023, 10h UTC, a 2 de fevereiro de 2023, 10h UTC:

{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1675159200 }, "DateLessThan": { "AWS:EpochTime": 1675332000 } } } ] }

Cada signed URL com o qual você usa essa política tem um URL 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 URL também inclui um ID de par de chaves, que deve estar associado a um grupo de chaves confiável na distribuição (d111111abcdef8.cloudfront.net) especificada no URL.

Criar uma assinatura para um URL que use uma política personalizada

A assinatura de um signed URL que usa uma política personalizada é uma versão da declaração de política com hash, assinada e codificada em base64. Para criar uma assinatura para uma política personalizada, conclua as etapas a seguir.

Para obter mais informações e exemplos de como adicionar hash, assinar e codificar a declaração de política, consulte:

Opção 1: Como criar uma assinatura 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 seu signed URL depois de &Signature= e volte para Para criar um signed URL usando uma política personalizada para concluir a concatenação das partes dele.