

# Compartilhar objetos usando URLs pré-assinados
<a name="S3OutpostsShareObjectPresignedURL"></a>

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: 
+ Um nome do recurso da Amazon (ARN) de ponto de acesso para o bucket do Amazon S3 no Outposts
+ Uma chave de objeto
+ Um método HTTP (`GET` para baixar objetos)
+ Data e hora de expiração

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](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities). 

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 obter mais informações, consulte [Quem pode criar um URL pré-assinado](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

É 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: 

## Usar SDKs da AWS
<a name="S3OutpostsShareObjectPreSignedURLSDK"></a>

Você pode usar os AWS SDKs para gerar um URL pré-assinado que você pode compartilhar com terceiros para que eles recuperem um objeto. 

**nota**  
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 ]

**Example**  
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 obter mais informações, consulte [Uso de URLs pré-assinados para o S3 no Outposts](S3OutpostsPresignedURL.md). 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 ]

**Example**  
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 obter mais informações, consulte [Uso de URLs pré-assinados para o S3 no Outposts](S3OutpostsPresignedURL.md). 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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_url) na *Referência de API do AWS SDK para Python (Boto)*.

------

## Como usar o AWS CLI
<a name="S3OutpostsShareObjectPresignedCLI"></a>

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.

**nota**  
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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) (pré-assinatura) na *Referência de comandos da AWS CLI*.