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

Criar um signed URL 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 valores a seguir na ordem especificada e remova o espaço em branco (inclusive caracteres de nova linha e tabulação) entre as partes. Pode ser necessário incluir caracteres de escape na string do código do aplicativo. Todos os valores têm um tipo de string. Cada parte é codificada pelo número ( 
							1
						) para os dois exemplos seguintes.

    
										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. Para mais informações sobre o formato dos URLs para distribuições, consulte Personalizar o formato do URL para arquivos no CloudFront.

    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.

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

    • O seguinte URL do CloudFront inclui uma query string:

      http://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:

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

      http://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, em seguida, adicione-os depois do ? (consulte 
											2
										) 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 base

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

Exemplo de signed URL:


					1
				http://d111111abcdef8.cloudfront.net/image.jpg 
					2
				? 
					3
				color=red&size=medium& 
					4
				Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA 6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ 29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiI yMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQ VdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp 7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo 
					5
				&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~ -ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmat EXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
					6
				&Key-Pair-Id=K2JCJMDEHXQW5F

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

Para criar uma declaração de política para uma política personalizada, siga o procedimento abaixo. 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 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. 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": "URL or stream name 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 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 signed URL que usa 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
nota

Você pode especificar apenas um valor para Resource.

O URL base, com suas query strings, se houver, sem os parâmetros Policy, Signature e Key-Pair-Id do CloudFront, por exemplo:

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

Importante

Se você omitir o parâmetro Resource (recurso) de uma distribuição, os usuários poderão acessar todos os arquivos associados a qualquer distribuição que esteja associada ao par de chaves usado para criar o URL assinado.

Observe o seguinte:

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

  • Parâmetros de query string :se você não tiver query strings, omita o ponto de interrogação.

  • Caracteres 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:

    http://d111111abcdef8.cloudfront.net/*game_download.zip*

    incluiria os seguintes arquivos:

    • http://d111111abcdef8.cloudfront.net/game_download.zip

    • http://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • http://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. Para obter informações sobre UTC, consulte a RFC 3339, Date and Time on the Internet: Timestamps, https://tools.ietf.org/html/rfc3339.

Por exemplo, 1º de janeiro de 2013 10h UTC é convertido para 1357034400 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 obter mais informações, consulte Quando o CloudFront verifica a data e hora de expiração de um signed URL?

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 da 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, consulte 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:0000:0000: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 Valores especificados ao criar ou atualizar uma distribuição na.

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 http://d111111abcdef8.cloudfront.net/game_download.zip de endereços IP no intervalo 192.0.2.0/24 até 1º de janeiro de 2013, 10h UTC:

{ "Statement": [ { "Resource": "http://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 de 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é 1º de janeiro de 2013, 10h UTC:

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

Cada signed URL em que você usa essa política inclui um URL base que identifica um arquivo específico, por exemplo:

http://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 criar signed URLs 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": "http://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1357034400 }, "DateLessThan": { "AWS:EpochTime": 1357120800 } } } ] }

Cada signed URL 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:

http://d111111abcdef8.cloudfront.net/training/orientation.pdf

O signed URL também inclui um ID de par de chaves, que deve estar associado a um assinante confiável na distribuição (d111111abcdef8.cloudfront.net) especificada no URL base.

Criar uma assinatura para um signed URL que usa 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á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 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.