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.