

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di presigned URLs per S3 su Outposts
<a name="S3OutpostsPresignedURL"></a>

Per concedere un accesso limitato nel tempo agli oggetti memorizzati in locale su un Outpost senza aggiornare la policy del bucket, puoi utilizzare un URL prefirmato. Con presigned URLs, in qualità di proprietario del bucket puoi condividere oggetti con persone nel tuo cloud privato virtuale (VPC) o concedere loro la possibilità di caricare o eliminare oggetti. 

Quando crei un URL predefinito utilizzando AWS SDKs o il AWS Command Line Interface (AWS CLI), associ l'URL a un'azione specifica. Puoi concedere un accesso limitato nel tempo all'URL prefirmato anche scegliendo una scadenza personalizzata che può essere di appena 1 secondo e fino a 7 giorni. Quando condividi l'URL prefirmato, l'utente del VPC può eseguire l'azione incorporata nell'URL come se fosse l'utente di firma originale. Una volta raggiunta la scadenza, l'URL non funzionerà più.

## Limitazione delle funzionalità degli URL prefirmati
<a name="S3OutpostsPresignedUrlUploadObjectLimitCapabilities"></a>

Le funzionalità dell'URL prefirmato sono limitate dalle autorizzazioni dell'utente che lo ha creato. In sostanza, i presigned URLs sono token portatori che garantiscono l'accesso a coloro che li possiedono. Pertanto, consigliamo di proteggerli in modo appropriato. 

**AWS Signature Version 4 (SigV4)**  
Per imporre un comportamento specifico quando le richieste URL prefirmate vengono autenticate utilizzando AWS Signature Version 4 (SigV4), puoi utilizzare le chiavi di condizione nelle policy dei bucket e nelle politiche dei punti di accesso. Ad esempio, puoi creare una policy del bucket che utilizzi la condizione `s3-outposts:signatureAge` per negare qualsiasi richiesta di URL prefirmato da Amazon S3 su Outposts sugli oggetti nel bucket `example-outpost-bucket` se la firma ha più di 10 minuti. Per utilizzare questo esempio, sostituisci *`user input placeholders`* con le informazioni appropriate.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Deny a presigned URL request if the signature is more than 10 minutes old",
            "Effect": "Deny",
            "Principal": {"AWS":"444455556666"},
            "Action": "s3-outposts:*",
            "Resource": "arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/bucket/example-outpost-bucket/object/*",
            "Condition": {
                "NumericGreaterThan": {"s3-outposts:signatureAge": 600000},
                "StringEquals": {"s3-outposts:authType": "REST-QUERY-STRING"}
            }
        }
    ]
}
```

------

Per un elenco di chiavi di condizione e policy di esempio aggiuntive che è possibile utilizzare per applicare un comportamento specifico quando le richieste dell'URL prefirmato vengono autenticate tramite Signature Version 4, consulta [AWS Chiavi di policy specifiche per l'autenticazione Signature Version 4 (SigV4)](s3-outposts-bucket-policy-s3-sigv4-conditions.md).

**Limitazioni per percorso di rete**  
Se desideri limitare l'uso dell'accesso predefinito URLs e di tutti gli accessi S3 on Outposts a determinati percorsi di rete, puoi scrivere policy che richiedono un percorso di rete particolare. Per impostare la restrizione sul principale IAM che effettua la chiamata, puoi utilizzare politiche basate sull'identità AWS Identity and Access Management (IAM) (ad esempio, politiche relative a utenti, gruppi o ruoli). Per impostare la restrizione sulla risorsa S3 su Outposts, puoi utilizzare le policy sulle risorse (ad esempio, policy di bucket e punti di accesso). 

Una restrizione del percorso di rete sul principale IAM richiede all'utente di tali credenziali di effettuare le richieste dalla rete specificata. Una restrizione sul bucket o sul punto di accesso richiede che tutte le richieste a quella risorsa provengano dalla rete specificata. Queste restrizioni si applicano anche al di fuori dello scenario di URL prefirmato.

La condizione globale IAM utilizzata dipende dal tipo di endpoint. Se utilizzi l'endpoint pubblico per S3 su Outposts, utilizza `aws:SourceIp`. Se utilizzi un endpoint VPC per S3 su Outposts, utilizza `aws:SourceVpc` o `aws:SourceVpce`.

La seguente dichiarazione sulla politica IAM richiede che il principale acceda AWS solo dall'intervallo di rete specificato. Con questa istruzione della policy, tutti gli accessi devono avere origine da tale intervallo. Ciò include il caso di un utente che utilizza un URL prefirmato per S3 su Outposts. Per utilizzare questo esempio, sostituisci *`user input placeholders`* con le informazioni appropriate.

```
{
    "Sid": "NetworkRestrictionForIAMPrincipal",
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
        "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"},
        "BoolIfExists": {"aws:ViaAWSService": "false"}
    }
}
```

Per un esempio di policy bucket che utilizza la chiave `aws:SourceIP` AWS global condition per limitare l'accesso a un bucket S3 on Outposts a un intervallo di rete specifico, vedi. [Configurazione di IAM con S3 su Outposts](S3OutpostsIAM.md)

## Chi può creare un URL prefirmato
<a name="S3Outpostswho-presigned-url"></a>

Qualsiasi utente che disponga di credenziali di sicurezza valide può creare un URL prefirmato. Tuttavia, perché un utente nel VPC possa accedere a un oggetto, è necessario che l'URL prefirmato venga creato da un utente che dispone dell'autorizzazione a eseguire l'operazione su cui si basa l'URL prefirmato.

Per creare un URL prefirmato puoi utilizzare le seguenti credenziali:
+ **Profilo dell'istanza IAM**: valido fino a 6 ore.
+ **AWS Security Token Service**: valido fino a 36 ore quando viene firmato con credenziali permanenti, ad esempio quelle dell'utente root dell' Account AWS o di un utente IAM.
+ **Utente IAM**: valido fino a 7 giorni se utilizzi AWS la versione 4 di Signature.

  Per creare un URL prefirmato valido fino a 7 giorni, devi prima delegare le credenziali dell'utente IAM (la chiave di accesso e la chiave segreta) all'SDK in uso. Quindi, genera un URL predefinito utilizzando AWS Signature Version 4.

**Nota**  
Se hai creato un URL prefirmato utilizzando un token temporaneo, l'URL scade insieme al token, anche se per l'URL è indicata una data di scadenza successiva.
Poiché presigned URLs concede l'accesso ai tuoi bucket S3 on Outposts a chiunque disponga dell'URL, ti consigliamo di proteggerli in modo appropriato. Per ulteriori informazioni sulla protezione dei predefiniti, consulta. URLs [Limitazione delle funzionalità degli URL prefirmati](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)

## Quando S3 su Outposts verifica la data e l'ora di scadenza in un URL prefirmato?
<a name="S3Outpostspresigned-url-when-checked"></a>

Al momento della richiesta HTTP, S3 su Outposts controlla la data e l'ora di scadenza di un URL firmato. Ad esempio, se un client inizia a scaricare un file di grandi dimensioni immediatamente prima dell'ora di scadenza, il download viene completato anche se l'ora di scadenza viene superata. Se la connessione TCP viene interrotta e il client prova a riavviare il download dopo la scadenza, il download non riesce.

Per ulteriori informazioni sull'utilizzo di un URL prefirmato per condividere o caricare oggetti, consulta gli argomenti riportati di seguito.

**Topics**
+ [Limitazione delle funzionalità degli URL prefirmati](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)
+ [Chi può creare un URL prefirmato](#S3Outpostswho-presigned-url)
+ [Quando S3 su Outposts verifica la data e l'ora di scadenza in un URL prefirmato?](#S3Outpostspresigned-url-when-checked)
+ [Condivisione di oggetti utilizzando presigned URLs](S3OutpostsShareObjectPresignedURL.md)
+ [Generazione di un URL prefirmato per il caricamento di un oggetto in un bucket S3 su Outposts](S3OutpostsPresignedUrlUploadObject.md)

# Condivisione di oggetti utilizzando presigned URLs
<a name="S3OutpostsShareObjectPresignedURL"></a>

Per concedere un accesso limitato nel tempo agli oggetti memorizzati in locale su un Outpost senza aggiornare la policy del bucket, puoi utilizzare un URL prefirmato. Con presigned URLs, in qualità di proprietario del bucket puoi condividere oggetti con persone nel tuo cloud privato virtuale (VPC) o concedere loro la possibilità di caricare o eliminare oggetti. 

Quando crei un URL predefinito utilizzando AWS SDKs o il AWS Command Line Interface (AWS CLI), associ l'URL a un'azione specifica. Puoi concedere un accesso limitato nel tempo all'URL prefirmato anche scegliendo una scadenza personalizzata che può essere di appena 1 secondo e fino a 7 giorni. Quando condividi l'URL prefirmato, l'utente del VPC può eseguire l'azione incorporata nell'URL come se fosse l'utente di firma originale. Una volta raggiunta la scadenza, l'URL non funzionerà più.



Quando crei un URL prefirmato, devi fornire le credenziali di sicurezza e specificare quanto segue: 
+ Un nome della risorsa Amazon (ARN) del punto di accesso per il bucket S3 su Outposts.
+ Una chiave oggetto
+ Un metodo HTTP (`GET` per scaricare gli oggetti)
+ Una data e un'ora di scadenza

Un URL prefirmato è valido solo per la durata specificata. In altre parole, è necessario avviare l'operazione consentita dall'URL prima della sua data e ora di scadenza. L'URL prefirmato può essere utilizzato più volte, fino alla data e all'ora di scadenza. Se hai creato un URL prefirmato utilizzando un token temporaneo, l'URL scade insieme al token, anche se per l'URL è indicata una data di scadenza successiva.

Gli utenti nel cloud privato virtuale (VPC) che hanno accesso all'URL prefirmato possono caricare oggetti. Ad esempio, se il bucket contiene un video e sia il bucket che l'oggetto sono privati, è possibile condividere il video con altri generando un URL prefirmato. Poiché presigned URLs concede l'accesso ai tuoi bucket S3 on Outposts a chiunque disponga dell'URL, ti consigliamo di proteggerli in modo appropriato. URLs Per maggiori dettagli sulla protezione dei predefiniti, consulta. URLs [Limitazione delle funzionalità degli URL prefirmati](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities) 

Qualsiasi utente che disponga di credenziali di sicurezza valide può creare un URL prefirmato. Tuttavia, l'URL prefirmato deve essere creato da un utente dotato dell'autorizzazione per eseguire l'operazione su cui si basa l'URL. Per ulteriori informazioni, consulta [Chi può creare un URL prefirmato](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

Puoi generare un URL predefinito per condividere un oggetto in un bucket S3 on Outposts utilizzando and the. AWS SDKs AWS CLI Per maggiori informazioni, consulta i seguenti esempi. 

## Utilizzando il AWS SDKs
<a name="S3OutpostsShareObjectPreSignedURLSDK"></a>

Puoi utilizzare il AWS SDKs per generare un URL predefinito da fornire ad altri in modo che possano recuperare un oggetto. 

**Nota**  
Quando si utilizza il AWS SDKs per generare un URL predefinito, il tempo di scadenza massimo per un URL predefinito è di 7 giorni dal momento della creazione. 

------
#### [ Java ]

**Example**  
Nel seguente esempio viene generato un URL prefirmato che è possibile fornire ad altri utenti in modo che possano recuperare un oggetto da un bucket S3 su Outposts. Per ulteriori informazioni, consulta [Utilizzo di presigned URLs per S3 su Outposts](S3OutpostsPresignedURL.md). Per utilizzare questo esempio, sostituisci *`user input placeholders`* con le informazioni appropriate.  

```
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**  
Nel seguente esempio viene generato un URL prefirmato che è possibile fornire ad altri utenti in modo che possano recuperare un oggetto da un bucket S3 su Outposts. Per ulteriori informazioni, consulta [Utilizzo di presigned URLs per S3 su Outposts](S3OutpostsPresignedURL.md). Per utilizzare questo esempio, sostituisci *`user input placeholders`* con le informazioni appropriate.   

```
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 ]

Nel seguente esempio viene generato un URL prefirmato per condividere un oggetto utilizzando l'SDK per Python (Boto3). Ad esempio, utilizza un client Boto3 e la funzione `generate_presigned_url` per generare un URL prefirmato che ti consenta di eseguire il `GET` di un oggetto.

```
import boto3
    url = boto3.client('s3').generate_presigned_url(
    ClientMethod='get_object', 
    Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
    ExpiresIn=3600)
```

Per ulteriori informazioni sull'utilizzo dell'SDK per Python (Boto3) per generare un URL prefirmato, consulta [Python](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_url) nella *Documentazione di riferimento delle API di AWS SDK per Python (Boto) *.

------

## Utilizzando il AWS CLI
<a name="S3OutpostsShareObjectPresignedCLI"></a>

Il AWS CLI comando di esempio seguente genera un URL predefinito per un bucket S3 on Outposts. Per utilizzare questo esempio, sostituisci *`user input placeholders`* con le informazioni appropriate.

**Nota**  
Quando si utilizza il AWS CLI per generare un URL predefinito, il tempo di scadenza massimo per un URL predefinito è di 7 giorni dal momento della creazione. 

```
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
```

Per ulteriori informazioni, consulta [presign](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) in *Riferimento ai comandi della AWS CLI *.

# Generazione di un URL prefirmato per il caricamento di un oggetto in un bucket S3 su Outposts
<a name="S3OutpostsPresignedUrlUploadObject"></a>

Per concedere un accesso limitato nel tempo agli oggetti memorizzati in locale su un Outpost senza aggiornare la policy del bucket, puoi utilizzare un URL prefirmato. Con presigned URLs, in qualità di proprietario del bucket puoi condividere oggetti con persone nel tuo cloud privato virtuale (VPC) o concedere loro la possibilità di caricare o eliminare oggetti. 

Quando crei un URL predefinito utilizzando AWS SDKs o il AWS Command Line Interface (AWS CLI), associ l'URL a un'azione specifica. Puoi concedere un accesso limitato nel tempo all'URL prefirmato anche scegliendo una scadenza personalizzata che può essere di appena 1 secondo e fino a 7 giorni. Quando condividi l'URL prefirmato, l'utente del VPC può eseguire l'azione incorporata nell'URL come se fosse l'utente di firma originale. Una volta raggiunta la scadenza, l'URL non funzionerà più.

Quando crei un URL prefirmato, devi fornire le credenziali di sicurezza e specificare quanto segue: 
+ Un nome della risorsa Amazon (ARN) del punto di accesso per il bucket S3 su Outposts.
+ Una chiave oggetto
+ Un metodo HTTP (`PUT` per il caricamento di oggetti)
+ Una data e un'ora di scadenza

Un URL prefirmato è valido solo per la durata specificata. In altre parole, è necessario avviare l'operazione consentita dall'URL prima della sua data e ora di scadenza. L'URL prefirmato può essere utilizzato più volte, fino alla data e all'ora di scadenza. Se hai creato un URL prefirmato utilizzando un token temporaneo, l'URL scade insieme al token, anche se per l'URL è indicata una data di scadenza successiva. 

Se l'operazione consentita da un URL prefirmato è costituita da più fasi, ad esempio un caricamento in più parti, tutti le fasi devono essere avviate prima della scadenza. Se S3 su Outposts prova ad avviare una fase con un URL scaduto, viene restituito un errore.

Gli utenti nel cloud privato virtuale (VPC) che hanno accesso all'URL prefirmato possono caricare oggetti. Ad esempio, un utente nel VPC che ha accesso all'URL prefirmato può caricare un oggetto nel tuo bucket. Poiché la funzionalità prefirmata URLs concede l'accesso al tuo bucket S3 on Outposts a qualsiasi utente nel VPC che ha accesso all'URL predefinito, ti consigliamo di proteggerli in modo appropriato. URLs Per maggiori dettagli sulla protezione dei predefiniti, consulta. URLs [Limitazione delle funzionalità degli URL prefirmati](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities) 

Qualsiasi utente che disponga di credenziali di sicurezza valide può creare un URL prefirmato. Tuttavia, l'URL prefirmato deve essere creato da un utente dotato dell'autorizzazione per eseguire l'operazione su cui si basa l'URL. Per ulteriori informazioni, consulta [Chi può creare un URL prefirmato](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

## Utilizzo di AWS SDKs per generare un URL predefinito per un'operazione sull'oggetto S3 on Outposts
<a name="s3-outposts-presigned-urls-upload-examples"></a>

------
#### [ Java ]

**SDK per Java 2.x**  
Questo esempio mostra come generare un URL prefirmato utilizzabile da un bucket S3 su Outposts per un periodo di tempo limitato. Per ulteriori informazioni, consulta [Utilizzo di presigned URLs per S3 su Outposts](S3OutpostsPresignedURL.md).   

```
    public static void signBucket(S3Presigner presigner, String outpostAccessPointArn, String keyName) {

        try {
            PutObjectRequest objectRequest = PutObjectRequest.builder()
                    .bucket(accessPointArn)
                    .key(keyName)
                    .contentType("text/plain")
                    .build();

            PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofMinutes(10))
                    .putObjectRequest(objectRequest)
                    .build();

            PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest);


            String myURL = presignedRequest.url().toString();
            System.out.println("Presigned URL to upload a file to: " +myURL);
            System.out.println("Which HTTP method must be used when uploading a file: " +
                    presignedRequest.httpRequest().method());

            // Upload content to the S3 on Outposts bucket by using this URL.
            URL url = presignedRequest.url();

            // Create the connection and use it to upload the new object by using the presigned URL.
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type","text/plain");
            connection.setRequestMethod("PUT");
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
            out.write("This text was uploaded as an object by using a presigned URL.");
            out.close();

            connection.getResponseCode();
            System.out.println("HTTP response code is " + connection.getResponseCode());

        } catch (S3Exception e) {
            e.getStackTrace();
        } catch (IOException e) {
            e.getStackTrace();
        }
    }
```

------
#### [ Python ]

**SDK per Python (Boto3)**  
In questo esempio viene mostrato come generare un URL prefirmato in grado di eseguire un'operazione S3 su Outposts per un periodo di tempo limitato. Per ulteriori informazioni, consulta [Utilizzo di presigned URLs per S3 su Outposts](S3OutpostsPresignedURL.md). Per effettuare una richiesta con l'URL, utilizza il pacchetto `Requests`.  

```
import argparse
import logging
import boto3
from botocore.exceptions import ClientError
import requests

logger = logging.getLogger(__name__)


def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
    """
    Generate a presigned S3 on Outposts URL that can be used to perform an action.

    :param s3_client: A Boto3 Amazon S3 client.
    :param client_method: The name of the client method that the URL performs.
    :param method_parameters: The parameters of the specified client method.
    :param expires_in: The number of seconds that the presigned URL is valid for.
    :return: The presigned URL.
    """
    try:
        url = s3_client.generate_presigned_url(
            ClientMethod=client_method,
            Params=method_parameters,
            ExpiresIn=expires_in
        )
        logger.info("Got presigned URL: %s", url)
    except ClientError:
        logger.exception(
            "Couldn't get a presigned URL for client method '%s'.", client_method)
        raise
    return url


def usage_demo():
    logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')

    print('-'*88)
    print("Welcome to the Amazon S3 on Outposts presigned URL demo.")
    print('-'*88)

    parser = argparse.ArgumentParser()
    parser.add_argument('accessPointArn', help="The name of the S3 on Outposts access point ARN.")
    parser.add_argument(
        'key', help="For a GET operation, the key of the object in S3 on Outposts. For a "
                    "PUT operation, the name of a file to upload.")
    parser.add_argument(
        'action', choices=('get', 'put'), help="The action to perform.")
    args = parser.parse_args()

    s3_client = boto3.client('s3')
    client_action = 'get_object' if args.action == 'get' else 'put_object'
    url = generate_presigned_url(
        s3_client, client_action, {'Bucket': args.accessPointArn, 'Key': args.key}, 1000)

    print("Using the Requests package to send a request to the URL.")
    response = None
    if args.action == 'get':
        response = requests.get(url)
    elif args.action == 'put':
        print("Putting data to the URL.")
        try:
            with open(args.key, 'r') as object_file:
                object_text = object_file.read()
            response = requests.put(url, data=object_text)
        except FileNotFoundError:
            print(f"Couldn't find {args.key}. For a PUT operation, the key must be the "
                  f"name of a file that exists on your computer.")

    if response is not None:
        print("Got response:")
        print(f"Status: {response.status_code}")
        print(response.text)

    print('-'*88)


if __name__ == '__main__':
    usage_demo()
```

------