Sécurisation des ressources Azure Content Delivery Network avec l’authentification du jeton
Important
Il s’agit d’une caractéristique de Azure CDN Premium fourni par Edgio uniquement, pour configurer des règles sur Azure CDN fourni par Microsoft utilisez le moteur de règles standard. Les règles avancées ne sont pas disponibles pour Azure CDN fourni par Akamai. Pour comparer toutes les fonctionnalités du CDN, consultez Caractéristiques de produit CDN Azure.
Vue d’ensemble
L’authentification par jeton est un mécanisme qui vous permet d’empêcher le réseau de distribution de contenu Azure de fournir des ressources à des clients non autorisés. L’authentification par jeton vise généralement à empêcher le hotlinking de contenu, dans le cadre duquel un autre site web, par exemple, un forum de discussion, utilise vos ressources sans autorisation. Le « hotlinking » peut avoir un impact sur vos coûts de distribution de contenu. Lorsque vous activez l’authentification par jeton sur le réseau de distribution de contenu, les requêtes sont authentifiées par le serveur de périphérie du réseau de distribution de contenu avant que le réseau de distribution de contenu ne distribue le contenu.
Fonctionnement
L’authentification du jeton s’assure que les requêtes sont générées par un site de confiance en vérifiant qu’elles comportent une valeur de jeton contenant des informations codées sur le demandeur. Le contenu est fourni à un demandeur uniquement si les informations codées respectent les exigences définies. Dans le cas contraire, les requêtes sont refusées. Vous pouvez procéder à la configuration à l’aide d’un ou de plusieurs des paramètres suivants :
- Pays/région : autorisez ou refusez les requêtes provenant des pays/régions spécifiés par leur code pays/région.
- URL : autorisez uniquement les requêtes qui correspondent à la ressource ou au chemin d’accès spécifique.
- Hôte : autorisez ou refusez les requêtes utilisant les hôtes spécifiés dans l’en-tête de requête.
- Référent : autorisez ou refusez une requête provenant du référent spécifié.
- Adresse IP : autorisez uniquement les requêtes provenant d’une adresse ou d’un sous-réseau IP spécifique.
- Protocole : autorisez ou refusez des requêtes en fonction du protocole utilisé pour demander le contenu.
- Date/heure d’expiration : attribuez une période de date et d’heure pour vous assurer qu’un lien reste valide uniquement pendant une période limitée.
Pour plus d’informations, consultez les exemples de configuration détaillés pour chaque paramètre dans Configuration de l’authentification du jeton.
Important
Si l’autorisation par jeton est activée pour un chemin d’accès sur ce compte, le mode de cache standard est le seul mode qui puisse être utilisé pour la mise en cache de la chaîne de requête. Pour plus d’informations, consultez Contrôler le comportement de mise en cache d’Azure Content Delivery Network à l’aide de chaînes de requête.
Architecture de référence
Le diagramme des flux de travail suivant décrit comment le réseau de distribution de contenu applique l’authentification par jeton pour utiliser votre application web.
Logique de validation de jeton sur le point de terminaison du réseau de distribution de contenu
L’organigramme suivant décrit comment Azure Content Delivery Network valide une requête du client lorsque l’authentification par jeton est configurée sur le point de terminaison du réseau de distribution de contenu.
Configuration de l’authentification du jeton
Sur le Portail Azure, accédez à votre profil réseau de distribution de contenu, puis sélectionnez Gérer pour ouvrir le portail supplémentaire.
Placez le curseur sur HTTP Large, puis sélectionnez Token Auth (Authentification par jeton) dans le menu volant. Vous pouvez ensuite configurer la clé de chiffrement et les paramètres de chiffrement comme suit :
Créez une ou plusieurs clés de chiffrement. Une clé de chiffrement respecte la casse et peut contenir n’importe quelle combinaison de caractères alphanumériques. D’autres types de caractères, y compris les espaces, ne sont pas autorisés. La longueur maximale est de 250 caractères. Pour vous assurer que vos clés de chiffrement sont aléatoires, nous vous recommandons de les créer à l’aide de l’outil OpenSSL.
La syntaxe de l’outil OpenSSL est la suivante :
rand -hex <key length>
Par exemple :
OpenSSL> rand -hex 32
Pour éviter les temps d’arrêt, créez une clé primaire et une clé de sauvegarde. Une clé de sauvegarde fournit un accès ininterrompu à votre contenu pendant que la mise à jour de votre clé primaire est en cours.
Entrez une clé de chiffrement unique dans la zone Clé primaire, puis tapez éventuellement une clé de sauvegarde dans la zone Clé de sauvegarde.
Sélectionnez la version minimale de chiffrement pour chaque clé dans sa liste Minimum Encryption Version (Version minimale de chiffrement) , puis sélectionnez Update (Mettre à jour) :
- V2 : indique que la clé peut être utilisée pour générer des jetons de version 2.0 et version 3.0. Utilisez cette option uniquement si vous effectuez la transition depuis une clé de chiffrement version 2.0 héritée vers une clé de version 3.0.
- V3 : (recommandé) indique que la clé peut être uniquement utilisée pour générer des jetons de version 3.0.
Utilisez l’outil de chiffrement pour définir les paramètres de chiffrement et générer un jeton. Avec l’outil de chiffrement, vous pouvez autoriser ou refuser des requêtes en fonction de la date/heure d’expiration, du pays/de la région, du référent, du protocole et de l’IP du client (dans toute combinaison). Bien qu’il n’existe aucune restriction sur le nombre et la combinaison de paramètres pouvant être associés pour former un jeton, la longueur totale d’un jeton est limitée à 512 caractères.
Entrez les valeurs pour un ou plusieurs des paramètres de chiffrement suivants dans la zone Encrypt Tool (Outil de chiffrement) :
Nom du paramètre Description ec_expire Affecte à un jeton une date/heure d’expiration au-delà de laquelle le jeton expire. Les requêtes soumises après la date/heure d’expiration sont refusées. Ce paramètre utilise un horodatage Unix, qui est basé sur le nombre de secondes écoulées depuis l’époque Unix standard « 1/1/1970 00:00:00 GMT ». (Vous pouvez utiliser des outils en ligne pour convertir l’heure standard en heure Unix, et inversement.) Par exemple, si vous souhaitez que le jeton expire à
12/31/2016 12:00:00 GMT
, utilisez la valeur de timestamp Unix1483185600
.ec_url_allow Permet d’adapter les jetons à une ressource ou à un chemin d’accès particulier. Ce paramètre restreint l’accès aux demandes dont l’URL commence par un chemin d’accès relatif spécifique. Les URL sont sensibles à la casse. Entrez plusieurs chemins d’accès en les séparant par une virgule ; n’ajoutez pas d’espaces. Selon vos exigences, vous pouvez définir des valeurs différentes pour fournir différents niveaux d’accès. Par exemple, pour l’URL
http://www.mydomain.com/pictures/city/strasbourg.png
, ces requêtes sont autorisées pour les valeurs d’entrée suivantes :- Valeur d’entrée « / » : toutes les requêtes sont autorisées.
- Valeur d’entrée « /pictures » : les requêtes suivantes sont autorisées :
- `http://www.mydomain.com/pictures.png`
- « http://www.mydomain.com/pictures/city/strasbourg.png »
- `http://www.mydomain.com/picturesnew/city/strasbourgh.png`
- Valeur d’entrée « /pictures/ » : seules les requêtes contenant le chemin « /pictures/ » sont autorisées. Par exemple, « http://www.mydomain.com/pictures/city/strasbourg.png ».
- Valeur d’entrée « /pictures/city/strasbourg.png » : seules les requêtes pour ce chemin et cette ressource spécifiques sont autorisées.
ec_country_allow Autorise uniquement les requêtes provenant d’un ou de plusieurs pays (ou régions) spécifiés. Les requêtes provenant de tous les autres pays/régions sont refusées. Utilisez un [code de pays/région ISO 3166](/previous-versions/azure/mt761717(v=azure.100)) de deux lettres pour chaque pays/région, en séparant les codes par une virgule ; n’ajoutez pas d’espace. Par exemple, pour autoriser l’accès aux requêtes provenant uniquement des États-Unis et de France, entrez « US,FR ». ec_country_deny Refuse les requêtes provenant d’un ou de plusieurs pays (ou régions) spécifiés. Les requêtes provenant de tous les autres pays/régions sont autorisées. L’implémentation est identique à celle du paramètre ec_country_allow. Si un code de pays/région est présent dans les paramètres ec_country_allow et ec_country_deny, le paramètre ec_country_allow est prioritaire. ec_ref_allow Autorise uniquement les requêtes provenant du référent spécifié. Un référent identifie l’URL de la page web qui est liée à la ressource demandée. N’incluez pas le protocole dans la valeur du paramètre. Les types d’entrée autorisés sont les suivants :
- Un nom d’hôte ou un nom d’hôte et un chemin d’accès.
- Plusieurs référents. Pour ajouter plusieurs référents, séparez-les par une virgule ; n’ajoutez pas d’espace. Si vous spécifiez une valeur de référent, mais que la configuration du navigateur ne permet pas l’envoi des informations sur le référent dans la requête, cette requête est refusée par défaut.
- Requêtes manquant d’informations ou contenant des informations vides sur le référent. Par défaut, le paramètre ec_ref_allow bloque ces types de requêtes. Pour autoriser ces requêtes, entrez le texte « missing » ou une valeur vide (à l’aide d’une virgule de fin).
- Sous-domaines. Pour autoriser des sous-domaines, entrez un astérisque (\*). Par exemple, pour autoriser tous les sous-domaines de « contoso.com », entrez « *.contoso.com ».
Par exemple, pour autoriser l’accès aux requêtes provenant de
www.contoso.com
, à l’ensemble des sous-domaines souscontoso2.com
et aux requêtes manquant de référents ou contenant des valeurs vides pour les référents, entrezwww.contoso.com,*.contoso.com,missing
.ec_ref_deny Refuse les requêtes provenant du référent spécifié. L’implémentation est identique à celle du paramètre ec_ref_allow. Si un référent est présent dans les deux paramètres ec_ref_allow et ec_ref_deny, le paramètre ec_ref_allow est prioritaire. ec_proto_allow Autorise uniquement les requêtes provenant du protocole spécifié. Les valeurs valides sont « http », « https » ou « http,https ». ec_proto_deny Refuse les requêtes du protocole spécifié. L’implémentation est identique à celle du paramètre ec_proto_allow. Si un protocole est présent dans les deux paramètres ec_proto_allow et ec_proto_deny, le paramètre ec_proto_allow est prioritaire. ec_clientip Restreint l’accès à l’adresse IP de demandeur spécifié. Internet Protocol version 4 (IPv4) et Internet Protocol version 6 (IPv6) sont pris en charge. Vous pouvez spécifier une adresse IP de requête unique ou des adresses IP associées à un sous-réseau spécifique. Par exemple, « 11.22.33.0/22 » autorise les requêtes provenant des adresses IP 11.22.32.1 à 11.22.35.254. Après avoir entré les valeurs des paramètres de chiffrement, sélectionnez une clé à chiffrer (si vous avez créé à la fois une clé primaire et une clé de sauvegarde) dans la liste Key To Encrypt (Clé à chiffrer).
Sélectionnez une version de chiffrement dans la liste Version de chiffrement liste : V2 pour la version 2 ou V3 pour la version 3 (recommandé).
Sélectionnez Encrypt (Chiffrer) pour générer le jeton.
Lorsque le jeton est généré, il est affiché dans la zone Generated Token (Jeton généré). Pour utiliser le jeton, ajoutez-le en tant que chaîne de requête à la fin du fichier dans le chemin de l’URL. Par exemple :
http://www.domain.com/content.mov?a4fbc3710fd3449a7c99986b
.Vous pouvez tester votre jeton avec l’outil de déchiffrement afin d’afficher les paramètres de votre jeton. Collez la valeur du jeton dans la zone Token to Decrypt (Jeton à déchiffrer) . Sélectionnez la clé de chiffrement à utiliser dans la liste Key To Decrypt (Clé pour déchiffrer) , puis sélectionnez Decrypt (Déchiffrer) .
Une fois que le jeton est déchiffré, ses paramètres sont affichés dans la zone Original Parameters (Paramètres d’origine) .
Personnalisez éventuellement le type de code de réponse qui est retourné lorsqu’une requête est refusée. Sélectionnez Enabled (Activé) , puis sélectionnez le code de réponse dans la liste Code de réponse. Le Header Name (Nom d’en-tête) est automatiquement défini sur Location (Emplacement) . Sélectionnez Save (Enregistrer) pour implémenter le nouveau code de réponse. Pour certains codes de réponse, vous devez également entrer l’URL de votre page d’erreur dans la zone Header Value (Valeur d’en-tête) . Le code de réponse 403 (Interdit) est sélectionné par défaut.
Sélectionnez Rules Engine (Moteur de règles) sous HTTP Large. Le moteur de règles permet de définir les chemins d’accès pour appliquer la fonctionnalité, d’activer la fonctionnalité d’authentification du jeton et d’activer d’autres fonctionnalités associées à l’authentification du jeton. Pour plus d’informations, consultez Moteur des règles Azure CDN.
Sélectionnez une règle existante ou créez-en une pour définir la ressource ou le chemin d’accès pour lesquels vous souhaitez appliquer l’authentification du jeton.
Pour activer l’authentification du jeton sur une règle, sélectionnez Token Auth (Authentification du jeton) dans la liste Fonctionnalités, puis sélectionnez Enabled (Activé) . Sélectionnez Update (Mettre à jour) si vous mettez à jour une règle ou Add (Ajouter) si vous en créez une.
Dans le moteur de règles, vous pouvez également activer d’autres fonctionnalités associées à l’authentification. Pour activer l’une des fonctionnalités suivantes, sélectionnez-la dans la liste Features (Fonctionnalités) , puis sélectionnez Enabled (Activé) .
Token Auth Denial Code (Code de refus d’authentification par jeton) : détermine le type de réponse à retourner à un utilisateur quand une requête est refusée. Les règles définies ici remplacent les codes de réponse de la section Custom Denial Handling (Gestion personnalisée des refus) de la page d’authentification basée sur le jeton.
Token Auth Ignore URL Case (Ignorer la casse de l’URL pour l’authentification par jeton) : détermine si la casse de l’URL utilisée pour valider le jeton est prise en compte.
Token Auth Parameter (Paramètre d’authentification par jeton) : renomme le paramètre de chaîne de requête d’authentification par jeton affiché dans l’URL demandée.
Vous pouvez personnaliser votre jeton en accédant au code source dans GitHub. Les langages disponibles sont notamment :
- C
- C#
- PHP
- Perl
- Java
- Python
Fonctionnalités et tarification du fournisseur Azure Content Delivery Network
Pour plus d’informations sur les fonctionnalités, consultez la page Fonctionnalités du produit Azure Content Delivery Network. Pour des informations sur les tarifs, consultez Tarifs Content Delivery Network.