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

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

Pour créer une URL signée utilisant une politique personnalisée, suivez 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 plus d’informations, consultez Reformatage de la clé privée (.NET et Java uniquement).

  2. Concaténez les valeurs suivantes. Vous pouvez utiliser le format dans cet exemple d’URL signée.

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F

    Supprimez tous les espaces vides (tabulations et sauts de ligne inclus). 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.

    1. URL de base du fichier

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

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

    • L’URL CloudFront suivante concerne un fichier image dans une distribution (à l’aide du nom de domaine CloudFront). 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’URL CloudFront suivante inclut une chaîne de requête :

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

    • Les URL CloudFront 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’URL CloudFront 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. Incluez le ? même si vous ne spécifiez aucun paramètre de requête.

    Note

    Vous pouvez spécifier les paramètres de requête suivants dans n’importe quel ordre.

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

    (Facultatif) Vous pouvez entrer vos propres paramètres de chaîne de requête. Pour ce faire, ajoutez une esperluette (&) entre chaque valeur, par exemple. color=red&size=medium. Vous pouvez spécifier les paramètres de chaîne de requête dans n’importe quel ordre dans l’URL.

    Important

    Les paramètres de votre chaîne de requête ne peuvent pas être nommés 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 vide, puis encodage en base64. Pour plus d’informations, consultez 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 plus d’informations, consultez 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é publique CloudFront dont vous utilisez la clé privée correspondante pour générer la signature

    ID d’une clé publique CloudFront, par exempl, K2JCJMDEHXQW5F. L’ID de clé publique indique à CloudFront quelle 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 plus d’informations, consultez Spécification des signataires qui peuvent créer des URL et des cookies signés.

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 plus d’informations, consultez 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>" } } } ] }

    Remarques :

  2. Supprimez tous les espaces vides (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 plus d’informations, consultez 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

URL incluant des chaînes de requête quelconques, mais excluant les paramètres CloudFront Policy, Signature et Key-Pair-Id. Exemples :

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.

Remarques :

  • 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. Exemples :

    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

    Quand CloudFront met en correspondance l'URL figurant dans la politique avec l'URL 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 plus d’informations sur l’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 de la section Condition. CloudFront requiert cette valeur pour empêcher les utilisateurs d’avoir un accès permanent à votre contenu privé.

Pour plus d’informations, consultez  Quand CloudFront vérifie la date et l’heure d’expiration dans 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 avant la date et l’heure spécifiées. N’entourez pas la valeur de points d’interrogation.

IpAddress (facultatif)

Adresse IP du client formulant la requête HTTP. Remarques :

  • 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 IPv/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 (demandes des utilisateurs) dans la rubrique Référence de tous les paramètres de 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 vides (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 plus d’informations, consultez 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 inclut une URL qui identifie un fichier spécifique d’une distribution CloudFront 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 la clé privée RSA ou ECDSA générée pour hacher et signer la déclaration de politique JSON que vous avez créé 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 vides, 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 vides (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.