Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Chargement d'objets avec présignature URLs
Vous pouvez utiliser Presigned URLs pour autoriser quelqu'un à charger un objet dans votre compartiment Amazon S3. L'utilisation d'une URL présignée permettra un téléchargement sans qu'une autre partie n'ait besoin d'informations d'identification ou d'autorisations AWS de sécurité. Une URL présignée est limitée par les autorisations de l’utilisateur qui l’a créée. Cela signifie que si vous recevez une URL présignée pour charger un objet, vous pouvez le charger uniquement si le créateur de l’URL dispose des autorisations nécessaires pour charger cet objet.
Lorsqu’une personne utilise l’URL pour charger un objet, Amazon S3 crée l’objet dans le compartiment spécifié. Si un objet avec la même clé que celle spécifiée dans l’URL présignée existe déjà dans le compartiment, Simple Storage Service (Amazon S3) remplace l’objet existant par l’objet chargé. Après le chargement, le propriétaire du compartiment devient propriétaire de l’objet.
Pour des informations générales sur le présigné URLs, consultezTéléchargez et chargez des objets avec une signature préalable URLs.
Vous pouvez créer une URL présignée pour le chargement d’un objet sans écrire de code grâce à AWS
Explorer for Visual Studio. Vous pouvez également générer une URL présignée par programmation à l'aide du. AWS SDKs
À l'heure actuelle, Visual Studio pour Mac AWS Toolkit for Visual Studio n'est pas compatible.
-
Installez le AWS Toolkit for Visual Studio en suivant les instructions ci-dessous, Installation et configuration du Toolkit for Visual Studio dans le guide de AWS Toolkit for Visual Studio l'utilisateur.
-
Connectez-vous à AWS en suivant les étapes ci-dessous, section Connexion à AWS dans le guide de AWS Toolkit for Visual Studio l'utilisateur.
-
Dans le volet de gauche intitulé Explorateur AWS , cliquez avec le bouton droit sur le compartiment dans lequel vous souhaitez charger un objet.
-
Choisissez Créer une URL présignée.
-
Dans la fenêtre contextuelle, définissez la date et l’heure d’expiration de votre URL présignée.
-
Pour Clé d’objet, définissez le nom du fichier à charger. Le fichier que vous chargez doit correspondre exactement à ce nom. Si un objet avec la même clé que celle spécifiée dans l’URL présignée existe déjà dans le compartiment, Amazon S3 remplace l’objet existant par l’objet chargé.
-
Choisissez PUT pour spécifier que cette URL présignée est utilisée pour charger un objet.
-
Cliquez sur le bouton Générer.
-
Pour copier l’URL dans le presse-papiers, choisissez Copier.
-
Pour utiliser cette URL, vous pouvez envoyer une demande PUT avec la commande curl
. Incluez le chemin complet de votre fichier et l’URL présignée elle-même.
curl -X PUT -T "/path/to/file
" "presigned URL
"
Vous pouvez générer une URL présignée qui peut exécuter une action S3 pendant une durée limitée.
- Python
-
Le script Python suivant génère une URL PUT
présignée pour le téléchargement d'un objet dans un compartiment S3 à usage général.
-
Copiez le contenu du script et enregistrez-le sous forme de fichier « put-only-url.py
». Pour utiliser les exemples suivants, remplacez le user input placeholders
par vos propres informations (telles que le nom de votre fichier).
import argparse
import boto3
from botocore.exceptions import ClientError
def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
"""
Generate a presigned Amazon S3 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 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
)
except ClientError:
print(f"Couldn't get a presigned URL for client method '{client_method}'.")
raise
return url
def main():
parser = argparse.ArgumentParser()
parser.add_argument("bucket", help="The name of the bucket.")
parser.add_argument(
"key", help="The key (path and filename) in the S3 bucket.",
)
parser.add_argument(
"--region", help="The AWS region where the bucket is located.", default="us-east-1"
)
parser.add_argument(
"--content-type", help="The content type of the file to upload.", default="application/octet-stream"
)
args = parser.parse_args()
# Create S3 client with explicit region configuration
s3_client = boto3.client("s3", region_name=args.region)
# Optionally set signature version if needed for older S3 regions
# s3_client.meta.config.signature_version = 's3v4'
# The presigned URL is specified to expire in 1000 seconds
url = generate_presigned_url(
s3_client,
"put_object",
{
"Bucket": args.bucket,
"Key": args.key,
"ContentType": args.content_type # Specify content type
},
1000
)
print(f"Generated PUT presigned URL: {url}")
if __name__ == "__main__":
main()
-
Pour générer une URL PUT
présignée pour le téléchargement d'un fichier, exécutez le script suivant avec le nom de votre compartiment et le chemin d'objet souhaité.
La commande suivante utilise des exemples de valeurs. Remplacez user input
placeholders
par vos propres informations.
python put-only-url.py
amzn-s3-demo-bucket
<object-path>
--region us-east-1
--content-type application/octet-stream
Le script affichera une URL PUT
présignée :
Generated PUT presigned URL: https://amzn-s3-demo-bucket
.s3.amazonaws.com/object.txt
?AWS AccessKeyId=AKIAIOSFODNN7EXAMPLE
&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D
&Expires=1741978496
-
Vous pouvez désormais télécharger le fichier en utilisant l'URL présignée générée avec curl. Assurez-vous d'inclure le même type de contenu que celui utilisé lors de la génération de l'URL :
curl -X PUT -T "path/to/your/local/file"
-H "Content-Type: application/octet-stream" "generated-presigned-url"
Si vous avez spécifié un type de contenu différent lors de la génération de l'URL, veillez à utiliser le même type de contenu dans la commande curl.
Pour d'autres exemples d'utilisation du AWS SDKs pour générer une URL présignée pour le téléchargement d'un objet, consultez Créer une URL présignée pour Amazon S3 à l'aide d'un SDK. AWS
Résolution des SignatureDoesNotMatch erreurs
Si vous rencontrez une SignatureDoesNotMatch
erreur lors de l'utilisation de Presigned URLs, vérifiez les points suivants :
-
Vérifiez que l'heure de votre système est synchronisée avec un serveur de temps fiable
-
Assurez-vous d'utiliser l'URL exactement telle qu'elle a été générée, sans aucune modification
-
Vérifiez si l'URL a expiré et générez-en une nouvelle si nécessaire
-
Assurez-vous que le type de contenu de votre demande de téléchargement correspond au type de contenu spécifié lors de la génération de l'URL
-
Vérifiez que vous utilisez la bonne région pour le compartiment
-
Lorsque vous utilisez curl, placez l'URL entre guillemets pour gérer correctement les caractères spéciaux