View a markdown version of this page

Política de POST - Amazon Simple Storage Service

Política de POST

A política necessária para fazer solicitações autenticadas usando HTTP POST é um documento com codificação UTF-8 e base64 gravado em JavaScript Object Notation (JSON) que especifica as condições que a solicitação deve satisfazer. Dependendo de como você estrutura o documento de política, é possível controlar a granularidade do acesso por upload, por usuário, para todos os uploads ou de acordo com outras configurações que atendam às suas necessidades.

Esta seção descreve a política de POST. Para conferir exemplos de cálculos de assinatura usando a política de POST, consulte Exemplo: upload baseado no navegador usando HTTP POST (usando o AWS Signature Version 4).

nota

Embora o documento de política seja opcional, recomendamos que você use um para controlar o que é permitido na solicitação. Se você tornar o bucket publicamente gravável, não terá nenhum controle sobre quais usuários podem gravar no seu bucket.

Veja a seguir um exemplo de um documento de política de POST.

{ "expiration": "2007-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read" }, {"bucket": "johnsmith" }, ["starts-with", "$key", "user/eric/"], ] }

A política de POST sempre contém os elementos expiration e conditions. O exemplo de política usa dois tipos de correspondência de condições (correspondência exata e correspondência inicial). As seções a seguir descrevem esses elementos.

Expiração

O elemento expiration especifica a data e a hora de expiração da política de POST no formato de data GMT ISO8601. Por exemplo, 2013-08-01T12:00:00.000Z especifica que a política de POST não é válida após a meia-noite GMT de 1º de agosto de 2013.

Correspondência de condição

Veja a seguir uma tabela que descreve os tipos de correspondência de condições que você pode usar para especificar as condições da política de POST (descritas na próxima seção). Embora seja necessário especificar pelo menos uma condição para cada campo especificado no formulário, é possível criar critérios de correspondência mais complexos especificando várias condições para um campo.

Tipo de correspondência de condição Descrição

Correspondências exatas

O valor do campo do formulário deve corresponder ao valor especificado. Este exemplo indica que a ACL deve ser definida como pública para leitura:

{"acl": "public-read" }

Este exemplo é uma forma alternativa para indicar que a ACL deve ser definida como pública para leitura:

[ "eq", "$acl", "public-read" ]

Inicia com

O valor deve começar com o valor especificado. Este exemplo indica que a chave do objeto deve iniciar com user/user1:

["starts-with", "$key", "user/user1/"]

Tipos de conteúdo correspondentes em uma lista separada por vírgulas

Os valores de tipos de conteúdo para uma condição starts-with que inclui vírgulas são interpretados como listas. Cada valor na lista deve atender à condição para que toda a condição seja aprovada. Por exemplo, dada a seguinte condição:

["starts-with", "$Content-Type", "image/"]

O valor a seguir passaria pela condição:

"image/jpg,image/png,image/gif"

O valor a seguir não passaria pela condição:

["image/jpg,text/plain"]
nota

Os elementos de dados diferentes de Content-Type são tratados como strings, independentemente da presença de vírgulas.

Corresponder qualquer conteúdo

Para configurar a política de POST para permitir qualquer conteúdo em um campo de formulário, use starts-with com um valor vazio (""). Este exemplo permite qualquer valor para success_action_redirect:

["starts-with", "$success_action_redirect", ""]

Especificar intervalos

Para os campos de formulário que aceitam intervalos, separe os limites superior e inferior com uma vírgula. Este exemplo permite um tamanho de arquivo entre 1 e 10 MiB:

["content-length-range", 1048576, 10485760]

As condições específicas permitidas em uma política de POST estão descritas em Condições.

Condições

As conditions em uma política de POST são uma matriz de objetos, sendo que cada um é usado para validar a solicitação. Você pode usar essas condições para restringir o que é permitido na solicitação. Por exemplo, as condições de política anteriores exigem o seguinte:

  • A solicitação deve especificar o nome do bucket johnsmith.

  • O nome da chave do objeto deve ter o prefixo user/eric.

  • A ACL do objeto deve ser definida como public-read.

Cada campo especificado em um formulário (exceto x-amz-signature, file, policy e nomes de campos com o prefixo x-ignore-) deve aparecer na lista de condições.

nota

Todas as variáveis dentro do formulário são expandidas antes da validação da política de POST. Portanto, qualquer correspondência de condição deve ser realizada nos campos de formulário expandidos. Suponha que você queira restringir o nome da chave do objeto a um prefixo específico (user/user1). Nesse caso, você define o campo do formulário da chave como user/user1/${filename}. A política de POST deve ser [ "starts-with", "$key", "user/user1/" ] (não insira [ "starts-with", "$key", "user/user1/${filename}" ]). Para obter mais informações, consulte Correspondência de condição.

As condições do documento de política são descritas na tabela a seguir.

Nome do elemento Descrição
acl

Especifica o valor da ACL que deve ser usado no envio do formulário.

Essa condição oferece suporte à correspondência exata e ao tipo de correspondência de condição starts-with discutido na seção a seguir.

bucket

Especifica o nome do bucket aceitável.

Essa condição oferece suporte ao tipo de correspondência de condição de correspondência exata.

content-length-range

Os tamanhos mínimo e máximo permitidos para o conteúdo carregado.

Essa condição oferece suporte ao tipo de correspondência de condição content-length-range.

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

Cabeçalhos específicos para REST. Para obter mais informações, consulte Objeto POST.

Essa condição oferece suporte à correspondência exata e ao tipo de correspondência de condição starts-with.

key

O nome de chave aceitável ou um prefixo do objeto carregado.

Essa condição oferece suporte à correspondência exata e ao tipo de correspondência de condição starts-with.

success_action_redirect

redirect

O URL para o qual o cliente é redirecionado após um upload bem-sucedido.

Essa condição oferece suporte à correspondência exata e ao tipo de correspondência de condição starts-with.

success_action_status

O código de status retornado ao cliente após o upload bem-sucedido se success_action_redirect não for especificado.

Essa condição oferece suporte à correspondência exata.

x-amz-algorithm

O algoritmo de assinatura que deve ser usado durante o cálculo da assinatura. Para AWS Signature Version 4, o valor é AWS4-HMAC-SHA256.

Essa condição oferece suporte à correspondência exata.

x-amz-credential

As credenciais usadas para calcular a assinatura. Oferece informações de ID de chave de acesso e escopo, identificando a região e o serviço para os quais a assinatura é válida. Deve ser o mesmo escopo usado no cálculo da chave de assinatura para o cálculo da assinatura.

É uma string da seguinte forma:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

Por exemplo:

AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request

Para o Amazon S3, a string aws-service é s3. Para conferir a lista de strings aws-region do Amazon S3, consulte Regiões e endpoints na Referência geral da AWS. Este campo será necessário se um documento de política de POST estiver incluído na solicitação.

Essa condição oferece suporte à correspondência exata.

x-amz-date

O valor de data especificado na string com formato ISO8601. Por exemplo, 20130728T000000Z. A data deve ser a mesma usada na criação da chave de assinatura para o cálculo da assinatura.

Este campo será necessário se um documento de política de POST estiver incluído na solicitação.

Essa condição oferece suporte à correspondência exata.

x-amz-security-token

Token de segurança do Amazon DevPay.

Cada solicitação que usa o Amazon DevPay requer dois campos do formulário x-amz-security-token: um para o token de produto e outro para o token de usuário. Consequentemente, os valores devem ser separados por vírgulas. Por exemplo, se o token de usuário for eW91dHViZQ== e o token de produto for b0hnNVNKWVJIQTA=, defina a entrada da política de POST como: { "x-amz-security-token": "eW91dHViZQ==,b0hnNVNKWVJIQTA=" }.

Para obter mais informações sobre o Amazon DevPay, consulte Uso do DevPay no Guia do usuário do Amazon Simple Storage Service.

x-amz-meta-*

Metadados especificados pelo usuário.

Essa condição oferece suporte à correspondência exata e ao tipo de correspondência de condição starts-with.

x-amz-*

Consulte Objeto POST (Objeto POST para outros cabeçalhos x-amz-*).

Essa condição oferece suporte à correspondência exata.

nota

Se o seu kit de ferramentas adicionar mais campos de formulário (por exemplo, o Flash adiciona filename), será necessário adicioná-los ao documento de política de POST. Se essa funcionalidade puder ser controlada, adicione o prefixo x-ignore- ao campo para que o Amazon S3 ignore o recurso e para que futuras versões não sejam afetadas.

Caracteres de escape

Os caracteres de escape dentro de um documento de política de POST são descritos na tabela a seguir.

Sequência de escape Descrição

\\

Barra invertida

\$

Símbolo do dólar

\b

Apagar

\f

Feed do formulário

\n

Nova linha

\r

Carriage return

\t

Guia horizontal

\v

Guia vertical

\uxxxx

Todos os caracteres do Unicode

Agora que você tem familiaridade com formulários e políticas e entende como a assinatura funciona, experimente um exemplo de upload de POST. É necessário gravar o código para calcular a assinatura. O exemplo fornece um formulário de amostra e uma política de POST que você pode usar para testar seus cálculos de assinatura. Para obter mais informações, consulte Exemplo: upload baseado no navegador usando HTTP POST (usando o AWS Signature Version 4).