Création d’une URL signée utilisant une politique personnalisée - Amazon CloudFront

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.

Création d’une URL signée utilisant une politique personnalisée

Pour créer une URL signée utilisant une politique personnalisée, effectuez la procédure suivante.

Pour créer une URL signée utilisant une politique personnalisée
  1. Si vous utilisez .NET ou Java pour créer des URL signées et si vous n’avez pas reformaté la clé privée de votre paire de clés du format par défaut .pem en un format compatible avec .NET ou Java, procédez comme suit : Pour de plus amples informations, veuillez consulter Reformatage de la clé privée (.NET et Java uniquement).

  2. Concaténez les valeurs suivantes dans l’ordre spécifié et supprimez les espaces (tabulations et caractères de saut de ligne inclus) entre les parties. Il se peut que vous ayez à inclure des caractères d’échappement dans la chaîne du code d’application. Toutes les valeurs ont le type String. Chaque partie est identifiée par un numéro ( 
							1
						) pour les deux exemples qui suivent.

    
										1
									URL de base du fichier

    L'URL de base est l' CloudFront URL que vous utiliseriez pour accéder au fichier si vous n'utilisiez pas d'URL signées, y compris vos propres paramètres de chaîne de requête, le cas échéant. Pour plus d’informations sur le format des URL pour les distributions, consultez Personnalisation du format d'URL pour les fichiers dans CloudFront.

    Les exemples suivants affichent les valeurs que vous spécifiez pour les distributions.

    • L' CloudFront URL suivante concerne un fichier image dans une distribution (en utilisant le nom de CloudFront domaine). Notez que image.jpg se trouve dans un répertoire images. Le chemin d’accès au fichier de l’URL doit correspondre à celui du fichier de votre serveur HTTP ou de votre compartiment Amazon S3.

      https://d111111abcdef8.cloudfront.net/images/image.jpg

    • L' CloudFront URL suivante inclut une chaîne de requête :

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • Les CloudFront URL suivantes concernent les fichiers image d'une distribution. Les deux utilisent un nom de domaine alternatif ; le second inclut une chaîne de requête :

      https://www.example.com/images/image.jpg

      https://www.example.com/images/image.jpg?color=red

    • L' CloudFront URL suivante concerne un fichier image d'une distribution qui utilise un autre nom de domaine et le protocole HTTPS :

      https://www.example.com/images/image.jpg

    
										2
									?

    Le ? indique que les paramètres de chaîne de requête suivent l’URL de base. Veillez à inclure le ? même si vous n’avez aucun paramètre de chaîne de requête propre.

    
										3
									Vos paramètres de chaîne de requête, le cas échéant&

    Ce champ est facultatif. Si vous voulez ajouter vos propres paramètres de chaîne de requête, par exemple :

    color=red&size=medium

    puis ajoutez les paramètres après le ? (voir 
											2
										) et avant le paramètre Policy. Dans certaines circonstances exceptionnelles, il se peut que vous ayez besoin de placer vos paramètres de chaîne de requête après Key-Pair-Id.

    Important

    Vos paramètres ne peuvent pas se nommer Policy, Signature ou Key-Pair-Id.

    Si vous ajoutez vos propres paramètres, ajoutez un & après chacun d’eux, y compris le dernier.

    
										4
									Policy=version encodée en base64 de la déclaration de politique

    Votre déclaration de politique au format JSON, avec suppression des espaces, puis encodage en base64. Pour de plus amples informations, veuillez consulter Création d’une déclaration de politique pour une URL signée qui utilise une politique personnalisée.

    La déclaration de politique contrôle l’accès accordé par une URL signée à un utilisateur. Elle inclut l’URL du fichier, une date et une heure d’expiration, une date et une heure (facultatif) auxquelles l’URL devient valide et une adresse IP (facultatif) ou une plage d’adresses IP autorisées à accéder au fichier.

    
										5
									&Signature=version hachée et signée de la déclaration de politique

    Version hachée, signée et encodée en base 64 de la déclaration de politique JSON. Pour de plus amples informations, veuillez consulter Création d’une signature pour une URL signée qui utilise une politique personnalisée.

    
									6
								&Key-Pair-Id=ID de clé publique pour la clé CloudFront publique dont vous utilisez la clé privée correspondante pour générer la signature

    L'ID d'une clé CloudFront publique, par exemple,K2JCJMDEHXQW5F. L'ID de clé publique indique CloudFront la clé publique à utiliser pour valider l'URL signée. CloudFront compare les informations de la signature avec celles de la déclaration de politique pour vérifier que l'URL n'a pas été falsifiée.

    Cette clé publique doit appartenir à un groupe de clés qui est un signataire approuvé dans la distribution. Pour de plus amples informations, veuillez consulter Spécification des signataires qui peuvent créer des URL et des cookies signés.

Exemple d’URL signée :


					1
				https://d111111abcdef8.cloudfront.net/image.jpg 
					2
				? 
					3
				color=red&size=medium& 
					4
				Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA 6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ 29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiI yMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQ VdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp 7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo 
					5
				&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~ -ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmat EXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
					6
				&Key-Pair-Id=K2JCJMDEHXQW5F

Création d’une déclaration de politique pour une URL signée qui utilise une politique personnalisée

Effectuez la procédure suivante pour créer une déclaration de politique pour une URL signée qui utilise une politique personnalisée.

Pour obtenir des exemples de déclaration de politique qui contrôlent l’accès aux fichiers de différentes façons, consultez Exemple d’une déclaration de politique pour une URL signée qui utilise une politique personnalisée.

Pour créer la déclaration de politique d’une URL signée qui utilise une politique personnalisée
  1. Construisez la déclaration de politique à l’aide du format JSON suivant. Remplacez les symboles inférieur à (<) et supérieur à (>), ainsi que les descriptions qu'ils contiennent, par vos propres valeurs. Pour de plus amples informations, veuillez consulter Valeurs que vous spécifiez dans la déclaration de politique d’une URL signée utilisant une politique personnalisée.

    { "Statement": [ { "Resource": "<Optional but recommended: URL of the file>", "Condition": { "DateLessThan": { "AWS:EpochTime": <Required: ending date and time in Unix time format and UTC> }, "DateGreaterThan": { "AWS:EpochTime": <Optional: beginning date and time in Unix time format and UTC> }, "IpAddress": { "AWS:SourceIp": "<Optional: IP address>" } } } ] }

    Notez ce qui suit :

  2. Supprimez tous les espaces (tabulations et sauts de ligne inclus) de la déclaration de politique. Il se peut que vous ayez à inclure des caractères d’échappement dans la chaîne du code d’application.

  3. Encodez en base64 la déclaration de politique à l’aide de l’encodage MIME base64. Pour plus d’informations, consultez Section 6.8, Base64 Content-Transfer-Encoding dans RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Remplacez les caractères non valides d’une chaîne de requête d’URL par les caractères valides. Le tableau suivant répertorie les caractères valides et non valides.

    Remplacer ces caractères non valides Par ces caractères valides

    +

    - (trait d’union)

    =

    _ (soulignement)

    /

    ~ (tilde)

  5. Ajoutez la valeur obtenue à votre URL signée après Policy=.

  6. Créez une signature pour l’URL signée en hachant, signant et encodant en base64 la déclaration de politique. Pour de plus amples informations, veuillez consulter Création d’une signature pour une URL signée qui utilise une politique personnalisée.

Valeurs que vous spécifiez dans la déclaration de politique d’une URL signée utilisant une politique personnalisée

Lorsque vous créez une déclaration de politique pour une politique personnalisée, vous spécifiez les valeurs suivantes.

Ressource

L'URL, y compris les chaînes de requête, à l'exception des Key-Pair-Id paramètres CloudFront PolicySignature, et. Par exemple :

https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

Vous ne pouvez spécifier qu’une seule valeur d'URL pour Resource.

Important

Vous pouvez omettre le paramètre Resource dans une politique, mais cela signifie que toute personne disposant de l'URL signée peut accéder à tous les fichiers de toute distribution associée à cette paire de clés que vous utilisez pour créer l'URL signée.

Notez ce qui suit :

  • Protocole : la valeur doit commencer par http://, https:// ou *://.

  • Paramètres de chaîne de requête : si l'URL comporte des paramètres de chaîne de requête, utilisez une barre oblique inverse (\) pour échapper le point d'interrogation (?) qui commence la chaîne de requête. Par exemple :

    https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

  • Caractères génériques : vous pouvez utiliser des caractères génériques dans l'URL de la politique. Les caractères génériques suivants sont pris en charge :

    • astérisque (*), qui correspond à zéro, un ou plusieurs caractères

    • point d'interrogation (?), qui correspond à un et un seul caractère

    Lorsque l'URL de la politique CloudFront correspond à celle de la requête HTTP, l'URL de la politique est divisée en quatre sections (protocole, domaine, chemin et chaîne de requête) comme suit :

    [protocol]://[domain]/[path]\?[query string]

    Lorsque vous utilisez un caractère générique dans l'URL de la politique, la correspondance avec le caractère générique s'applique uniquement dans les limites de la section qui contient ce caractère générique. Par exemple, envisagez l'URL suivante dans une politique :

    https://www.example.com/hello*world

    Dans cet exemple, le caractère générique astérisque (*) s'applique uniquement dans la section du chemin. Il correspond donc aux URL https://www.example.com/helloworld et https://www.example.com/hello-world, mais il ne correspond pas à l'URL https://www.example.net/hello?world.

    Les exceptions suivantes s'appliquent aux limites des sections pour la mise en correspondance des caractères génériques :

    • La présence d'un astérisque à la fin de la section de chemin implique un astérisque dans la section de la chaîne de requête. Par exemple, http://example.com/hello* équivaut à http://example.com/hello*\?*.

    • La présence d'un astérisque à la fin de la section de domaine implique un astérisque dans les sections de chemin et de chaîne de requête. Par exemple, http://example.com* équivaut à http://example.com*/*\?*.

    • Une URL figurant dans la politique peut omettre la section de protocole et commencer par un astérisque dans la section de domaine. Dans ce cas, la section de protocole est implicitement définie sur un astérisque. Par exemple, l'URL *example.com d'une politique est équivalente à *://*example.com/.

    • Un astérisque à lui seul ("Resource": "*") correspond à n'importe quelle URL.

    Par exemple, la valeur https://d111111abcdef8.cloudfront.net/*game_download.zip* dans une politique correspond à toutes les URL suivantes :

    • https://d111111abcdef8.cloudfront.net/game_download.zip

    • https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp

  • Autres noms de domaine : si vous spécifiez un nom de domaine alternatif (CNAME) dans l’URL de la politique, la requête HTTP doit utiliser ce nom de domaine alternatif dans votre page ou application Web. Ne spécifiez pas l’URL Amazon S3 pour le fichier dans une politique.

DateLessThan

Date et heure d’expiration de l’URL au format horaire Unix (en secondes) et en heure UTC. Dans la politique, n’entourez pas la valeur avec des points d’interrogation. Pour obtenir des informations sur UTC, consultez Date et heure sur Internet : Horodatages.

Par exemple, l'horodatage 31 janvier 2023 10 h 00 UTC est converti en 1675159200 au format horaire Unix.

Il s'agit du seul paramètre obligatoire dans Condition cette section. CloudFront nécessite cette valeur pour empêcher les utilisateurs d'avoir un accès permanent à votre contenu privé.

Pour de plus amples informations, veuillez consulter la page Quand CloudFront vérifie-t-on la date et l'heure d'expiration d'une URL signée ?.

DateGreaterThan (Facultatif)

(Facultatif) Date et heure de début de l’URL au format horaire Unix (en secondes) et en heure UTC. Les utilisateurs ne sont pas autorisés à accéder au fichier à la date et à l'heure spécifiées ou avant. N’entourez pas la valeur de points d’interrogation.

IpAddress (Facultatif)

Adresse IP du client formulant la requête HTTP. Notez ce qui suit :

  • Pour autoriser une adresse IP à accéder au fichier, omettez le paramètre IpAddress.

  • Vous pouvez spécifier une adresse IP ou une plage d’adresses IP. Vous ne pouvez pas utiliser cette politique pour autoriser l’accès si l’adresse IP du client figure dans l’une des deux plages distinctes.

  • Pour autoriser l’accès depuis une seule adresse IP, vous spécifiez :

    "Adresse IP IPv4/32"

  • Vous devez spécifier les plages d’adresses IP selon le format IPv4 CIDR standard (par exemple, 192.0.2.0/24). Pour plus d’informations, consultez Routage inter-domaines sans classe (CIDR) : plan d'agrégation et d'affectation d'adresses Internet.

    Important

    Les adresses IP au format IPv6, telles que 2001:0db8:85a3::8a2e:0370:7334, ne sont pas prises en charge.

    Si vous utilisez une politique personnalisée qui inclut IpAddress, n’activez pas IPv6 pour la distribution. Si vous souhaitez limiter l’accès à un contenu spécifique par adresse IP et prendre en charge les requêtes IPv6 pour les autres contenus, vous pouvez créer deux distributions. Pour plus d’informations, consultez Activation d’IPv6 dans la rubrique Valeurs que vous spécifiez lorsque vous créez ou mettez à jour une distribution.

Exemple d’une déclaration de politique pour une URL signée qui utilise une politique personnalisée

Les exemples suivants de déclaration de politique montrent comment accéder à un fichier spécifique, à tous les objets d’un répertoire ou à tous les fichiers associés à un ID de paire de clés. Les exemples montrent aussi comment contrôler l’accès depuis une adresse IP individuelle ou une plage d’adresses IP, et comment empêcher les utilisateurs d’employer l’URL signée au-delà d’une date et heure spécifiées.

Si vous copiez et collez l’un de ces exemples, supprimez les espaces (y compris les tabulations et les sauts de ligne), remplacez les valeurs par vos propres valeurs et incluez un caractère de saut de ligne après l’accolade fermante (}).

Pour de plus amples informations, veuillez consulter Valeurs que vous spécifiez dans la déclaration de politique d’une URL signée utilisant une politique personnalisée.

Exemple de déclaration de politique : accès à un fichier à partir d’une plage d’adresses IP

L’exemple suivant de politique personnalisée dans une URL signée spécifie qu’un utilisateur peut accéder au fichier https://d111111abcdef8.cloudfront.net/game_download.zip à partir des adresses IP de la plage 192.0.2.0/24 jusqu’au 31 janvier 2023 10 h 00 UTC :

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

Exemple de déclaration de politique : accès à tous les fichiers d’un répertoire à partir d’une plage d’adresses IP

L’exemple suivant de politique personnalisée vous permet de créer des URL signées pour n’importe quel fichier du répertoire training, comme l'indique le caractère générique astérisque (*) du paramètre Resource. Les utilisateurs peuvent accéder au fichier depuis une adresse IP de la plage 192.0.2.0/24 jusqu’au 31 janvier 2023 10 h 00 UTC :

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

Chaque URL signée avec laquelle vous utilisez cette politique inclut une URL qui identifie un fichier spécifique ; par exemple :

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

Exemple de déclaration de politique : accès à tous les fichiers associés à un ID de paire de clés à partir d’une adresse IP

L’exemple suivant de politique personnalisée vous permet de créer des URL signées pour tout fichier associé à une distribution quelconque, comme l'indique le caractère générique astérisque (*) du paramètre Resource. L'URL signée doit utiliser le protocole https://, et non http://. L’utilisateur doit employer l’adresse IP 192.0.2.10/32. (La valeur 192.0.2.10/32 en notation CIDR fait référence à une seule adresse IP, 192.0.2.10.) Les fichiers ne sont disponibles qu’entre le 31 janvier 2023 10 h 00 UTC et le 2 février 2023 10 h 00 UTC :

{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1675159200 }, "DateLessThan": { "AWS:EpochTime": 1675332000 } } } ] }

Chaque URL signée avec laquelle vous utilisez cette politique possède une URL qui identifie un fichier spécifique dans une CloudFront distribution spécifique, par exemple :

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

L’URL signée inclut aussi un ID de paire de clés, qui doit être associé à un groupe de clés autorisé dans la distribution (d111111abcdef8.cloudfront.net) que vous spécifiez dans l’URL.

Création d’une signature pour une URL signée qui utilise une politique personnalisée

La signature d’une URL signée utilisant une politique personnalisée est une version hachée, signée et encodée en base64 de la déclaration de politique. Pour créer une signature pour une politique personnalisée, procédez comme suit.

Pour plus d’informations et d’exemples sur la façon de hacher, signer et encoder la déclaration de politique, consultez :

Option 1 : Créer une signature à l’aide d’une politique personnalisée
  1. Utilisez la fonction de hachage SHA-1 et RSA pour hacher et signer la déclaration de politique JSON que vous avez créée dans la procédure Pour créer la déclaration de politique d’une URL signée qui utilise une politique personnalisée. Utilisez la version de la déclaration de politique qui n’inclut plus d’espaces, mais qui n’a pas encore été encodée en base64.

    Pour la clé privée requise par la fonction de hachage, utilisez une clé privée dont la clé publique se trouve dans un groupe de clés approuvé actif pour la distribution.

    Note

    La méthode que vous utilisez pour hacher et signer la déclaration de politique dépend du langage de programmation et de la plateforme. Pour un exemple de code, consultez Exemples de code pour la création de la signature d’une URL signée.

  2. Supprimez les espaces (tabulations et sauts de ligne inclus) de la chaîne hachée et signée.

  3. Encodez en base64 la chaîne à l’aide de l’encodage MIME base64. Pour plus d’informations, consultez Section 6.8, Base64 Content-Transfer-Encoding dans RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies.

  4. Remplacez les caractères non valides d’une chaîne de requête d’URL par les caractères valides. Le tableau suivant répertorie les caractères valides et non valides.

    Remplacer ces caractères non valides Par ces caractères valides

    +

    - (trait d’union)

    =

    _ (soulignement)

    /

    ~ (tilde)

  5. Ajoutez la valeur obtenue à votre URL signée après &Signature=, et retournez à Pour créer une URL signée utilisant une politique personnalisée pour terminer la concaténation des parties de votre URL signée.