Partage des ressources cross-origin (CORS) - AWS SDK for JavaScript

Le guide de API référence AWS SDK for JavaScript V3 décrit en détail toutes les API opérations de la AWS SDK for JavaScript version 3 (V3).

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.

Partage des ressources cross-origin (CORS)

Le partage des ressources cross-origin, ou CORS, est une fonctionnalité de sécurité des navigateurs web modernes. Elle permet aux navigateurs web de négocier les domaines pouvant effectuer des demandes de sites web ou services externes.

CORS est une fonction importante à prendre en considération lors du développement des applications de navigateur avec le kit AWS SDK for JavaScript , car la plupart des demandes de ressources sont envoyées à un domaine externe, tel que le point de terminaison d'un service web. Si votre JavaScript environnement applique la sécurité CORS, vous devez configurer CORS avec le service.

CORS détermine s'il convient d'autoriser le partage de ressources dans une demande d'origine croisée sur la base des éléments suivants :

  • Le domaine spécifique qui effectue la demande

  • Le type de demande HTTP effectuée (GET, PUT, POST, DELETE, etc.)

Comment fonctionne CORS

Dans le cas le plus simple, votre script de navigateur effectue une demande GET pour une ressource à partir d'un serveur appartenant à un autre domaine. Selon la configuration CORS de ce serveur, si la demande provient d'un domaine qui est autorisé à soumettre des demandes GET, le serveur cross-origin répond en retournant la ressource demandée.

Si le domaine effectuant la demande ou si le type de demande HTTP n'est pas autorisé, la demande est refusée. Toutefois, CORS permet de vérifier la demande en amont avant de la soumettre. Dans ce cas, une demande en amont est effectuée. Cette demande inclut l'envoi de l'opération de demande d'accès OPTIONS. Si la configuration de la fonction CORS du serveur cross-origin accorde l'accès au domaine demandeur, le serveur renvoie une réponse en amont qui répertorie tous les types de requête HTTP que le domaine demandeur peut faire sur la ressource demandée.

Flux de processus pour les demandes CORS

La configuration CORS est-elle requise ?

Les compartiments Amazon S3 nécessitent une configuration CORS avant que vous puissiez effectuer des opérations sur ceux-ci. Dans certains JavaScript environnements, le CORS peut ne pas être appliqué et sa configuration n'est donc pas nécessaire. Par exemple, si vous hébergez votre application à partir d'un compartiment Amazon S3 et que vous accédez à des ressources depuis un point de terminaison spécifique *.s3.amazonaws.com ou depuis un autre point de terminaison spécifique, vos demandes n'accèderont pas à un domaine externe. Par conséquent, cette configuration n'exige pas CORS. Dans ce cas, CORS est toujours utilisé pour des services autres qu'Amazon S3.

Configurer CORS pour un compartiment Amazon S3

Vous pouvez configurer un compartiment Amazon S3 pour utiliser CORS dans la console Amazon S3.

Si vous configurez CORS dans la console de gestion des services AWS Web, vous devez utiliser JSON pour créer une configuration CORS. La nouvelle console de gestion des services AWS Web prend uniquement en charge les configurations JSON CORS.

Important

Dans la nouvelle console de gestion des services AWS Web, la configuration CORS doit être JSON.

  1. Dans la console de gestion des services AWS Web, ouvrez la console Amazon S3, recherchez le compartiment que vous souhaitez configurer et cochez sa case.

  2. Dans le volet qui s'ouvre, choisissez Permissions.

  3. Dans l'onglet Autorisation, choisissez Configuration CORS.

  4. Entrez votre configuration CORS dans l'éditeur de configuration CORS, puis choisissez Enregistrer.

Une configuration CORS est un fichier XML qui contient une série de règles au sein d'un élément <CORSRule>. Une configuration peut contenir jusqu'à 100 règles. Une règle est définie par l'une des balises suivantes :

  • <AllowedOrigin>— Spécifie les origines de domaines que vous autorisez à effectuer des demandes entre domaines.

  • <AllowedMethod>— Spécifie le type de demande que vous autorisez (GET, PUT, POST, DELETE, HEAD) dans les requêtes interdomaines.

  • <AllowedHeader>— Spécifie les en-têtes autorisés dans une demande de prévol.

Pour des exemples de configurations, voir Comment configurer CORS sur mon bucket ? dans le guide de l'utilisateur d'Amazon Simple Storage Service.

Exemple de configuration CORS

L'exemple de configuration CORS suivant permet à un utilisateur de visualiser, d'ajouter, de supprimer ou de mettre à jour des objets à l'intérieur d'un compartiment du domaineexample.org. Cependant, nous vous recommandons de <AllowedOrigin> définir le domaine de votre site Web. Vous pouvez spécifier "*" pour autoriser n'importe quelle origine.

Important

Dans la nouvelle console S3, la configuration CORS doit être de type JSON.

XML
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>https://example.org</AllowedOrigin> <AllowedMethod>HEAD</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> <ExposeHeader>ETag</ExposeHeader> <ExposeHeader>x-amz-meta-custom-header</ExposeHeader> </CORSRule> </CORSConfiguration>
JSON
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "HEAD", "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "https://www.example.org" ], "ExposeHeaders": [ "ETag", "x-amz-meta-custom-header"] } ]

Cette configuration n'autorise pas l'utilisateur à effectuer des actions sur le compartiment. Il active le modèle de sécurité du navigateur pour autoriser une demande à Amazon S3. Les autorisations doivent être configurées via des autorisations de compartiment ou des autorisations de rôle IAM.

Vous pouvez l'utiliser ExposeHeader pour permettre au SDK de lire les en-têtes de réponse renvoyés par Amazon S3. Par exemple, si vous lisez l'ETagen-tête d'un téléchargement partitionné PUT ou partiel, vous devez inclure la ExposeHeader balise dans votre configuration, comme indiqué dans l'exemple précédent. Le kit SDK ne peut accéder qu'aux en-têtes qui sont exposés via la configuration CORS. Si vous définissez des métadonnées sur l'objet, les valeurs sont renvoyées sous forme d'en-têtes avec le préfixe x-amz-meta-, comme x-amz-meta-my-custom-header par exemple, et doivent également être exposées de la même manière.