Partage d'objets à l'aide d'URL présignées
Pour accorder un accès limité dans le temps aux objets stockés localement dans un Outpost sans mettre à jour votre stratégie de compartiment, vous pouvez utiliser une URL présignée. Avec les URL présignées, vous pouvez, en tant que propriétaire du compartiment, partager des objets avec des personnes dans votre cloud privé virtuel (VPC) ou leur accorder la possibilité de télécharger ou de supprimer des objets.
Lorsque vous créez une URL présignée à l'aide de kits SDK AWS ou de AWS Command Line Interface (AWS CLI), vous associez l'URL à une action spécifique. Vous accordez également un accès limité dans le temps à l'URL présignée en choisissant un délai d'expiration personnalisé qui peut aller de 1 seconde à 7 jours. Lorsque vous partagez l'URL présignée, la personne dans le VPC peut effectuer l'action intégrée dans l'URL comme s'il s'agissait de l'utilisateur connecté d'origine. Lorsque l'URL atteint son délai d'expiration, elle expire et ne fonctionne plus.
Lorsque vous créez une URL présignée, vous devez fournir vos informations d'identification de sécurité, puis spécifier les éléments suivants :
-
Un point d'accès pour Amazon Resource Name (ARN) du compartiment S3 on Outposts
-
Une clé d'objet
-
Une méthode HTTP (GET pour télécharger des objets)
-
Une date et une heure d'expiration
Une URL présignée est uniquement valide pendant la durée spécifiée. Autrement dit, vous devez commencer l'action autorisée par l'URL avant la date et l'heure d'expiration. Vous pouvez utiliser une URL présignée plusieurs fois, jusqu'à la date et l'heure d'expiration. Si vous avez créé une URL présignée à l'aide d'un jeton temporaire, alors l'URL expire lorsque le jeton expire, même si vous avez créé l'URL avec une heure d'expiration postérieure.
Les utilisateurs du cloud privé virtuel (VPC) qui ont accès à l'URL présignée peuvent accéder à l'objet. Par exemple, si votre compartiment contient une vidéo et que ce compartiment et l'objet sont confidentiels, vous pouvez partager la vidéo avec d'autres en générant une URL présignée. Étant donné que les URL présignées accordent l'accès à vos compartiments S3 on Outposts à toute personne possédant l'URL, nous vous recommandons de protéger ces URL de manière appropriée. Pour plus d’informations sur la protection des URL présignées, veuillez consulter la section Limitation des capacités des URL présignées.
Toute personne qui possède des autorisations de sécurité valides peut créer une URL présignée. Cependant, l'URL présignée doit être créée par une personne disposant des autorisations nécessaires pour effectuer l'opération sur laquelle l'URL présignée est basée. Pour plus d’informations, consultez Utilisateurs habilités à créer une URL présignée.
Vous pouvez générer une URL présignée pour partager un objet dans un compartiment S3 on Outposts à l'aide des kits SDK AWS et de la AWS CLI. Pour plus d’informations, consultez les exemples suivants.
Vous pouvez utiliser les kits SDK AWS pour générer une URL présignée que vous pouvez communiquer à d'autres afin qu'ils puissent récupérer un objet.
Lorsque vous utilisez les kits SDK AWS pour générer une URL présignée, le délai d'expiration maximal d'une URL présignée est de 7 jours à compter de la création.
- Java
-
L’exemple suivant génère une URL présignée que vous pouvez communiquer à d’autres afin qu’ils puissent récupérer un objet depuis un compartiment S3 sur Outposts. Pour plus d’informations, consultez Utilisation d'URL présignée pour S3 on Outposts. Pour utiliser cet exemple, remplacez les user input
placeholders par vos propres informations.
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
-
L’exemple suivant génère une URL présignée que vous pouvez communiquer à d’autres afin qu’ils puissent récupérer un objet depuis un compartiment S3 sur Outposts. Pour plus d’informations, consultez Utilisation d'URL présignée pour S3 on Outposts. Pour utiliser cet exemple, remplacez les user input
placeholders par vos propres informations.
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
-
L'exemple suivant génère une URL présignée pour partager un objet à l'aide du SDK pour Python (Boto3). Par exemple, utilisez un client Boto3 et la fonction generate_presigned_url pour générer une URL présignée qui vous permet d'accéder à un objet GET.
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
Pour plus d'informations sur l'utilisation du kit SDK pour Python (Boto3) pour générer une URL présignée, consultez la section Python dans la Référence d'API AWS SDK pour Python (Boto).
L'exemple de commande AWS CLI suivant génère une URL présignée pour un compartiment S3 on Outposts. Pour utiliser cet exemple, remplacez les user input
placeholders par vos propres informations.
Lorsque vous utilisez la commande AWS CLI pour générer une URL présignée, le délai d'expiration maximal d'une URL présignée est de 7 jours à compter de la création.
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
Pour de plus amples informations, veuillez consulter presign (présigner) dans la Référence des commandes AWS CLI.