Compartilhar objetos usando URLs pré-assinados
Você pode usar um URL pré-assinado para conceder acesso por tempo limitado a objetos armazenados localmente em um Outpost sem atualizar sua política de bucket. Com URLs pré-assinados, como proprietário do bucket, você pode compartilhar objetos com indivíduos em sua nuvem privada virtual (VPC) ou conceder a eles a capacidade de carregar ou excluir objetos.
Ao criar um URL pré-assinado usando os AWS SDKs ou a AWS Command Line Interface (AWS CLI), você associa o URL a uma ação específica. Você também concede acesso por tempo limitado ao URL pré-assinado escolhendo um tempo de expiração personalizado a partir de 1 segundo e de até 7 dias. Ao compartilhar o URL pré-assinado, o indivíduo na VPC pode executar a ação incorporada no URL como se fosse o usuário da assinatura original. Ao atingir o tempo de expiração, o URL expira e não funciona mais.
Ao criar um URL pré-assinado, você deve fornecer suas credenciais de segurança e especificar o seguinte:
Os URLs pré-assinados só são válidos pela duração especificada. Ou seja, é necessário iniciar a ação permitida pelo URL antes da data e da hora de expiração. É possível usar o URL pré-assinado várias vezes até a data e a hora de expiração. Se tiver criado um URL pré-assinado usando um token temporário, o URL expirará quando o token expirar, mesmo que você tenha criado o URL com um tempo de expiração posterior.
Os usuários na nuvem privada virtual (VPC) que tiverem acesso ao URL pré-assinado poderão acessar o objeto. Por exemplo, se você tiver um vídeo em seu bucket e o bucket e o objeto forem privados, será possível compartilhar o vídeo gerando um pre-signed URL. Como os URLs pré-assinados concedem acesso aos seus buckets do S3 no Outposts a quem tiver o URL, recomendamos proteger os URLs adequadamente. Para obter mais detalhes sobre como proteger pre-signed URLs, consulte Limitar recursos de pre-signed URLs.
Qualquer um com credenciais de segurança válidas pode criar um pre-signed URL. No entanto, o URL pré-assinado deve ter sido criado por alguém que tenha permissão para executar a operação na qual o URL pré-assinado é baseado. Para ter mais informações, consulte Quem pode criar um URL pré-assinado.
É possível gerar um URL pré-assinado para compartilhar um objeto em um bucket do S3 no Outposts usando os AWS SDKs e a AWS CLI. Para obter mais informações, veja os exemplos a seguir:
Você pode usar os AWS SDKs para gerar um URL pré-assinado que você pode compartilhar com terceiros para que eles recuperem um objeto.
Ao usar os AWS SDKs para gerar um URL pré-assinado, o tempo máximo de expiração de um URL pré-assinado é de sete dias a partir do momento da criação.
- Java
-
O exemplo a seguir gera um URL pré-assinado que você pode compartilhar com terceiros para que eles recuperem um objeto de um bucket do S3 no Outposts. Para ter mais informações, consulte Uso de URLs pré-assinados para o S3 no Outposts. Para usar esse exemplo, substitua os user input
placeholders
por suas próprias informações.
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import java.io.IOException;
import java.net.URL;
import java.time.Instant;
public class GeneratePresignedURL {
public static void main(String[] args) throws IOException {
Regions clientRegion = Regions.DEFAULT_REGION;
String accessPointArn = "*** access point ARN ***
";
String objectKey = "*** object key ***
";
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
// Set the presigned URL to expire after one hour.
java.util.Date expiration = new java.util.Date();
long expTimeMillis = Instant.now().toEpochMilli();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);
// Generate the presigned URL.
System.out.println("Generating pre-signed URL.");
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(accessPointArn, objectKey)
.withMethod(HttpMethod.GET)
.withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
System.out.println("Pre-Signed URL: " + url.toString());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
- .NET
-
O exemplo a seguir gera um URL pré-assinado que você pode compartilhar com terceiros para que eles recuperem um objeto de um bucket do S3 no Outposts. Para ter mais informações, consulte Uso de URLs pré-assinados para o S3 no Outposts. Para usar esse exemplo, substitua os user input
placeholders
por suas próprias informações.
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
namespace Amazon.DocSamples.S3
{
class GenPresignedURLTest
{
private const string accessPointArn = "*** access point ARN ***
";
private const string objectKey = "*** object key ***
";
// Specify how long the presigned URL lasts, in hours.
private const double timeoutDuration = 12;
// Specify your bucket Region (an example Region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2
;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
string urlString = GeneratePreSignedURL(timeoutDuration);
}
static string GeneratePreSignedURL(double duration)
{
string urlString = "";
try
{
GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
{
BucketName = accessPointArn,
Key = objectKey,
Expires = DateTime.UtcNow.AddHours(duration)
};
urlString = s3Client.GetPreSignedURL(request1);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
}
return urlString;
}
}
}
- Python
-
O exemplo a seguir gera um URL pré-assinado para compartilhar um objeto usando o SDK para Python (Boto3). Por exemplo, use um cliente Boto3 e a função generate_presigned_url
para gerar um URL pré-assinado que permite a fazer realizar o GET
em um objeto.
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
Para obter mais informações sobre como usar o SDK para Python (Boto3) para gerar um URL pré-assinado, consulte Python na Referência de API do AWS SDK for Python (Boto).
O seguinte exemplo de comando da AWS CLI gera um URL pré-assinado para um bucket do S3 no Outposts. Para usar esse exemplo, substitua os user input
placeholders
por suas próprias informações.
Ao usar a AWS CLI para gerar um URL pré-assinado, o tempo máximo de expiração de um URL pré-assinado é de sete dias a partir do momento da criação.
aws s3 presign s3://arn:aws:s3-outposts:us-east-1
:111122223333
:outpost/op-01ac5d28a6a232904
/accesspoint/example-outpost-access-point
/mydoc.txt
--expires-in 604800
Para obter mais informações, consulte presign (pré-assinatura) na Referência de comandos da AWS CLI.