Introdução à Presigned URLs


Presigned URLs

As presigned URLs (ou URLs pré-assinadas) da AWS S3 proporcionam uma forma eficiente de conceder acesso temporário a objetos específicos no Amazon S3.

Um presigned URL é uma URL que você pode fornecer aos usuários para conceder acesso temporário a um objeto específico no S3. Esse acesso temporário pode ser configurado para operações de leitura (READ) ou escrita (WRITE), permitindo a atualização de um objeto existente ou o upload de um novo objeto no bucket.

A URL pré-assinada contém parâmetros específicos definidos pela sua aplicação, limitando o acesso do usuário. Esses parâmetros incluem:

  • Bucket: O nome do bucket em que o objeto está ou estará localizado.
  • Key: O nome do objeto.
  • Expires: O tempo até a URL expirar (tornar-se inválida).

Uma vez que o tempo de expiração é atingido, o usuário não pode mais interagir com o objeto especificado. O acesso ao objeto é concedido por meio do presigned URL, já que somente o proprietário do bucket S3 pode assinar corretamente a URL.

Qualquer pessoa com um presigned URL válido pode interagir com os objetos conforme especificado durante a criação do URL. Por exemplo, se um URL pré-assinado para leitura (GET) for fornecido, um usuário não poderá utilizá-lo para realizar uma operação de escrita (PUT).

A construção do URL envolve vários parâmetros, que são automaticamente gerados por meio do AWS JS SDK. Alguns desses parâmetros incluem:

  • X-AMZ-Algorithm
  • X-AMZ-Credential
  • X-AMZ-Date
  • X-AMZ-Expires
  • X-AMZ-Signature
  • X-AMZ-SignedHeaders

Presigned URLs devem ter um tempo de expiração definido. É possível definir um tempo limite de um segundo a 7 dias (604.800 segundos) no futuro. O URL conterá o momento em que o URL foi gerado (X-Amz-Date) e o tempo limite (X-Amz-Expires) como parâmetros de pesquisa. Esses parâmetros de pesquisa são assinados, e qualquer tentativa de adulteração resultará em um código de erro 403 com o código de erro SignatureDoesNotMatch.

https://presignedurldemo.s3.eu-west-2.amazonaws.com/image.png?
X-Amz-Algorithm=AWS4-HMAC-SHA256
&
X-Amz-Credential=AKIAJJWZ7B6WCRGMKFGQ%2F20180210%2Feu-west-2%2Fs3%2Faws4_request
&
X-Amz-Date=20180210T171315Z
&
X-Amz-Expires=1800
&
X-Amz-Signature=12b74b0788aa036bc7c3d03b3f20c61f1f91cc9ad8873e3314255dc479a25351
&
X-Amz-SignedHeaders=host

O exemplo acima é um presigned URL para realizar operações de leitura (GET) em um objeto específico. Vale ressaltar que o link se tornará inválido após o tempo máximo de validade de 7 dias, proporcionando um controle efetivo sobre o acesso temporário concedido por meio desses URLs.

Referências