Création d'une URL signée à l'aide d'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 à l'aide d'une politique personnalisée

Pour créer une URL signée à l'aide d'une politique personnalisée, procédez comme suit.

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 Reformater la clé privée (.NET et Java uniquement).

  2. Concaténez les valeurs suivantes dans l'ordre indiqué, en reproduisant le format indiqué 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 (y compris les tabulations et les caractères de nouvelle ligne). Il se peut que vous ayez à inclure des caractères d’échappement dans la chaîne du code d’application. Toutes les valeurs ont un type deString.

    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. Dans l'exemple précédent, l'URL de base esthttps://d111111abcdef8.cloudfront.net/image.jpg. Pour plus d’informations sur le format des URL pour les distributions, consultez Personnalisez le 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. ?

    ?Cela indique que les paramètres de la chaîne de requête suivent l'URL de base. Incluez le ? même si vous n'avez pas vos propres paramètres de chaîne de requête.

    3. Les paramètres de votre 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 après ? et avant le Policy paramètre. 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-en un & après chacun d'eux, y compris le dernier.

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

    Votre déclaration de politique au format JSON, avec les espaces vides supprimés, puis encodée 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é 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 plus d’informations, consultez Spécifiez les signataires autorisés à créer des URL signées 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>" } } } ] }

    Notez ce qui suit :

  2. Supprimez tous les espaces vides (y compris les tabulations et les caractères de nouvelle ligne) 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

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 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 à 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 Référence des 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 tous les espaces vides (y compris les tabulations et les caractères de nouvelle ligne), remplacez les valeurs par vos propres valeurs et insérez un caractère de nouvelle 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éder à 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édez à tous les fichiers associés à un identifiant 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 vides mais qui n'a pas encore été codé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 (y compris les tabulations et les caractères de nouvelle ligne) 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.