Créer une URL pré-signée
Vous pouvez créer une URL pré-signée pour accorder temporairement l’accès à une opération spécifique à Object Storage sans partager d’identifiants permanents. Selon la manière dont elle est générée, une URL pré-signée peut permettre aux utilisateurs de télécharger un objet existant ou de déposer un objet dans un bucket ou sous une clé d’objet spécifiques.
Tout utilisateur à qui vous envoyez l’URL pré-signée peut effectuer l’opération autorisée pendant la durée que vous spécifiez. L’utilisateur n’a pas besoin de disposer de ses propres autorisations ni de s’authentifier sur le bucket.
Vous pouvez créer une URL pré-signée pour :
-
Télécharger ou partager un objet existant.
-
Déposer un objet à l’aide d’une seule requête
PUT.
|
|
Créer une URL pré-signée pour télécharger un objet avec AWS CLI
Avant de commencer : Installez et configurez AWS CLI. Pour en savoir plus, voir Installer et configurer AWS CLI. |
Pour créer une URL pré-signée, utilisez la commande presign en suivant cette syntaxe :
$ aws s3 presign s3://BUCKET/OBJECT \
--profile YOUR_PROFILE \
--expires-in 3600 \
--endpoint https://oos.eu-west-2.outscale.com
Cette commande contient les options suivantes que vous devez spécifier :
-
(optionnel)
profile: Le profil nommé que vous voulez utiliser, créé pendant la configuration d’AWS CLI. Pour en savoir plus, voir Installer et configurer AWS CLI. -
s3://BUCKET/OBJECT: Le chemin d’accès vers l’objet que vous voulez partager dans le bucket. -
expires-in: Le temps restant avant que l’URL n’expire, en secondes.Lorsque vous utilisez AWS CLI, la durée maximum pour une URL pré-signée est de 604800 secondes (1 semaine).
-
endpoint: Le endpoint correspondant à la Région à laquelle vous voulez envoyer la requête. Pour en savoir plus, voir Installer et configurer AWS CLI.
La commande presign renvoie l’élément suivant :
-
URL: L’URL à laquelle votre objet est disponible.
https://oos.eu-west-2.outscale.com/BUCKET/OBJECT?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ABCDEFGHIJ0123456789%2F20101001%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20101001T123456Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Créer une URL pré-signée avec s3cmd
|
Vous pouvez gérer vos ressources de stockage objet en utilisant des commandes s3cmd. Pour en savoir plus, voir s3cmd. |
Tutoriel : Créer et utiliser une URL pré-signée pour télécharger un objet
Avant de commencer :
|
-
Si l’URL pré-signée est utilisée depuis un navigateur, configurez d’abord CORS sur le bucket :
Exemple de requête$ aws s3api put-bucket-cors \ --profile YOUR_PROFILE \ --bucket BUCKET \ --cors-configuration file://MY_CORS_CONFIG.json \ --endpoint https://oos.eu-west-2.outscale.comExemple de configuration CORS{ "CORSRules": [ { "AllowedHeaders": ["*"], "ExposeHeaders": ["ETag", "x-amz-meta-tag"], "AllowedMethods": ["PUT"], "MaxAgeSeconds": 3000, "AllowedOrigins": ["http://example.com"] } ] }Pour en savoir plus, voir Appliquer une configuration CORS sur un bucket.
-
Créez un script Python permettant de générer l’URL pré-signée pour le chargement via la méthode
PUT:Exemple de requête$ vi generate_presigned_put_url.pyCette commande ouvre un nouveau fichier nommé
generate_presigned_put_url.pydans l’éditeur de textevi. -
Ajoutez le contenu suivant au fichier :
Exemple de fichierimport boto3 s3 = boto3.client( "s3", endpoint_url="https://oos.eu-west-2.outscale.com", aws_access_key_id="ACCESS_KEY", aws_secret_access_key="SECRET_KEY" ) response = s3.generate_presigned_url( ClientMethod="put_object", Params={ "Bucket": "BUCKET", "Key": "OBJECT", "ContentType": "text/plain" }, ExpiresIn=3600 ) print(response)Si vous utilisez l’éditeur de texte
vi, appuyez suripour passer en mode insertion avant de coller l’exemple.Une fois l’exemple collé, appuyez sur
Esc, puis tapez:wqet appuyez surEntréepour enregistrer le fichier et quitter l’éditeur de texte.-
ACCESS_KEY: La clé d’accès du compte utilisé pour signer l’URL pré-signée. -
SECRET_KEY: La clé secrète du compte utilisé pour signer l’URL pré-signée. -
BUCKET: Le nom du bucket dans lequel l’objet est déposé. -
OBJECT: Le nom de l’objet à déposer dans le bucket. -
(facultatif)
ContentType: Type de contenu attendu dans la requête de téléchargement. S’il est spécifié, la requête de téléchargement doit inclure l’en-têteContent-Typecorrespondant. -
(facultatif)
ExpiresIn: Durée de validité de l’URL pré-signée, en secondes. Si elle n’est pas spécifiée, boto3 utilisera une valeur par défaut de 3 600 secondes.
-
-
Générez l’URL pré-signée et stockez-la dans une variable de shell :
Exemple de requête$ PRESIGNED_URL=$(python3 generate_presigned_put_url.py) -
Imprimez l’URL générée :
Exemple de requête$ echo "$PRESIGNED_URL"La commande renvoie une URL contenant des paramètres de requête tels que
X-Amz-Algorithm,X-Amz-Credential,X-Amz-Date,X-Amz-Expires,X-Amz-SignedHeadersetX-Amz-Signature. -
Créez le fichier local qui sera déposé en tant qu’objet spécifié par
OBJECTdans le script Python (ici,uploadme.txt) :Exemple de requête$ cat > uploadme.txt <<"EOF" Test upload EOF -
Déposez l’objet en utilisant l’URL pré-signée :
Exemple de requête$ curl -i --request PUT --upload-file uploadme.txt \ -H "Content-Type: text/plain" \ "$PRESIGNED_URL"Si le dépôt aboutit, la commande renvoie un code d’état HTTP
200 OK, un en-têteETaget des identifiants de requête tels quex-amz-request-idetx-amz-id-2.Si l’en-tête est absent ou contient une valeur différente, la validation de la signature échoue et le dépôt est rejeté.
-
Vérifiez que l’objet a bien été déposé :
Exemple de requête$ aws s3api list-objects-v2 \ --profile PROFILE \ --bucket BUCKET \ --endpoint https://oos.eu-west-2.outscale.comPour en savoir plus, voir Lister les objets d’un bucket.
Page connexe
AWS™ et Amazon Web Services™ sont des marques de commerce d'Amazon Technologies, Inc. ou de ses affiliées aux États-Unis et/ou dans les autres pays.