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.

  • Les URL pré-signées pour les envois de type PUT sont prises en charge.

  • Les envois de type POST pré-signés ne sont pas pris en charge.

  • Une URL pré-signée est également requise lorsque vous copiez une image machine OUTSCALE (OMI) entre plusieurs comptes OUTSCALE situés dans des Régions différentes. Pour en savoir plus, voir Copier une OMI vers d’autres Régions.

  • L’URL pré-signée générée pour copier un fichier OMI est valable pendant 7 jours.

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 :

Exemple de requête
$ 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.

Exemple de résultat
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 :

  1. 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.com
    Exemple de configuration CORS
    {
      "CORSRules": [
        {
          "AllowedHeaders": ["*"],
          "ExposeHeaders": ["ETag", "x-amz-meta-tag"],
          "AllowedMethods": ["PUT"],
          "MaxAgeSeconds": 3000,
          "AllowedOrigins": ["http://example.com"]
        }
      ]
    }
  2. 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.py

    Cette commande ouvre un nouveau fichier nommé generate_presigned_put_url.py dans l’éditeur de texte vi.

  3. Ajoutez le contenu suivant au fichier :

    Exemple de fichier
    import 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 sur i pour passer en mode insertion avant de coller l’exemple.

    Une fois l’exemple collé, appuyez sur Esc, puis tapez :wq et appuyez sur Entrée pour 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ête Content-Type correspondant.

    • (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.

  4. 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)
  5. 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-SignedHeaders et X-Amz-Signature.

  6. Créez le fichier local qui sera déposé en tant qu’objet spécifié par OBJECT dans le script Python (ici, uploadme.txt) :

    Exemple de requête
    $ cat > uploadme.txt <<"EOF"
    Test upload
    EOF
  7. 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ête ETag et des identifiants de requête tels que x-amz-request-id et x-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é.

  8. 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.com

    Pour 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.