

# Criar um URL assinado usando uma política personalizada
<a name="private-content-creating-signed-url-custom-policy"></a>

Para criar um URL assinado usando uma política personalizada, execute o procedimento a seguir.<a name="private-content-creating-signed-url-custom-policy-procedure"></a>

**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)](private-content-trusted-signers.md#private-content-reformatting-private-key).

1. Concatene os valores a seguir. Você pode usar o formato 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}}&Hash-Algorithm={{SHA256}}
   ```

   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 [Personalizar o formato da URL para arquivos no CloudFront](LinkFormat.md).  
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 o `?` mesmo que você não especifique nenhum parâmetro de consulta.  
Você pode especificar os parâmetros de consulta a seguir em qualquer ordem.  
**3. {{Seus parâmetros de string de consulta, se houver}}`&`**  
(Opcional) Você pode inserir seus próprios parâmetros de string de consulta. Para fazer isso, adicione um e comercial (&) entre cada um, como `color=red&size=medium`. Você pode especificar parâmetros de string de consulta em qualquer ordem dentro do URL.  
Seus parâmetros de string de consulta não podem ser nomeados como `Policy`, `Signature`, `Key-Pair-Id` ou `Hash-Algorithm`.
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 URL assinado que use uma política personalizada](#private-content-custom-policy-statement).  
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](#private-content-custom-policy-creating-signature).  
**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](private-content-trusted-signers.md).  
**7. `&Hash-Algorithm=`{{SHA1 ou SHA256}}**  
(Opcional) O algoritmo de hash usado para criar a assinatura. Os valores compatíveis são `SHA1` e `SHA256`. Se você não especificar este parâmetro, o CloudFront utilizará `SHA1` por padrão.

## Criar uma declaração de política para um URL assinado que use uma política personalizada
<a name="private-content-custom-policy-statement"></a>

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](#private-content-custom-policy-statement-examples).<a name="private-content-custom-policy-creating-policy-procedure"></a>

**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](#private-content-custom-policy-statement-values).

   ```
   {
       "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:
   + É possível incluir somente uma declaração na política.
   + 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 política para um signed URL que usa uma política personalizada](#private-content-custom-policy-statement-values).

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

1. 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](https://tools.ietf.org/html/rfc2045#section-6.8) em *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. 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.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. Inclua o valor resultante ao seu signed URL depois de `Policy=`.

1. 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](#private-content-custom-policy-creating-signature).

### Valores especificados na declaração de política para um signed URL que usa uma política personalizada
<a name="private-content-custom-policy-statement-values"></a>

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

**Recurso**  
A URL, incluindo quaisquer strings de consulta, mas excluindo os parâmetros `Policy`, `Signature`, `Key-Pair-Id`, e `Hash-Algorithm` do CloudFront. Por exemplo:  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes`  
Você pode especificar somente um valor para `Resource`.  
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, não 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](https://tools.ietf.org/html/rfc3339).  
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 obter mais informações, consulte . [Quando o CloudFront confere a data e hora de validade de um URL assinado?](private-content-signed-urls.md#private-content-check-expiration)

**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](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 [Habilitar IPv6 (solicitações do visualizador)](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6) no tópico [Referência de configurações de todas as distribuições](distribution-web-values-specify.md).

## Exemplos de declaração de política para um signed URL que usa uma política personalizada
<a name="private-content-custom-policy-statement-examples"></a>

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](#private-content-custom-policy-statement-values).

**Topics**
+ [Exemplo de declaração de política: acessar um arquivo de um intervalo de endereços IP](#private-content-custom-policy-statement-example-one-object)
+ [Exemplo de declaração de política: acessar todos os arquivos de um diretório em um intervalo de endereços IP](#private-content-custom-policy-statement-example-all-objects)
+ [Exemplo de declaração de política: acessar todos os arquivos associados a um ID de par de chaves de um endereço IP](#private-content-custom-policy-statement-example-one-ip)

### Exemplo de declaração de política: acessar um arquivo de um intervalo de endereços IP
<a name="private-content-custom-policy-statement-example-one-object"></a>

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
<a name="private-content-custom-policy-statement-example-all-objects"></a>

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
<a name="private-content-custom-policy-statement-example-one-ip"></a>

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 name="private-content-custom-policy-creating-signature"></a>

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:
+ [Comandos do Linux e OpenSSL para criptografia e codificação base64](private-content-linux-openssl.md)
+ [Exemplos de código para criar uma assinatura para um signed URL](PrivateCFSignatureCodeAndExamples.md)

**nota**  
Os exemplos vinculados usam SHA-1 por padrão. Para usar SHA-256, substitua `sha1` por `sha256` nos comandos OpenSSL e inclua o parâmetro de consulta `Hash-Algorithm=SHA256` na URL assinada.<a name="private-content-custom-policy-creating-signature-download-procedure"></a>

**Opção 1: Como criar uma assinatura usando uma política personalizada**

1. Use a função de hash SHA-1 ou SHA-256 e a chave privada RSA ou ECDSA gerada para fazer o hash e assinar a declaração de política JSON que você criou no procedimento [Para criar a declaração de política para um signed URL que usa uma política personalizada](#private-content-custom-policy-creating-policy-procedure). 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.

   Se você usa SHA-256, deve incluir `&Hash-Algorithm=SHA256` na URL assinada.

   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](PrivateCFSignatureCodeAndExamples.md).

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

1. Codifique a string usando codificação base64 MIME. Para obter mais informações, consulte [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8) em *RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*.

1. 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.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html)

1. Inclua o valor resultante no seu signed URL depois de `&Signature=` e volte para [Para criar um signed URL usando uma política personalizada](#private-content-creating-signed-url-custom-policy-procedure) para concluir a concatenação das partes dele.