Digital Marketing IT Feedback
Construire un IIS like pour configurer et
gérer ses noms de domaines sur une
solution Cloud
Vousl’avieznoté,il n’existe pasunsite Microsoftmaisplusieurs.C’estpourquoi nousavonsbesoin
de noms de domaines;soitpourfaire atterrirdessitescampagnes – éphémèresde nature - , soit
pour avoirdes« friendlyname » pourredirigerversces campagnes,soitenfinpourprotégernos
marques,développerdesservices…Beaucoupde campagnes,beaucoupde sites,nousavonsdonc
besoind’une solutionsouple etefficace pourlesgérer.
Dans cet article,nousvousprésentonsune solutionpertinente –pournousau moins - qui nous
permetd’administrernomsde domaine le touttirantpleinementpartie de lapuissance de Microsoft
Azure.
Cédric Folliot, Tech Lead, Redsen Consulting
Lucas Riedberger, Digital Optimization Lead, Microsoft France
Contexte
Une url est constituée d’undomaine représentantl’entreprise etd’unmotfacile àretenirpouvant
éventuellementrappelerlacampagne. Elle doitdonnerdusensavecunminimumde caractère. Afin
de maximiserle SEOetla gestiondu site, nousfaisons atterrirlacampagne surunsite existant. Pour
ces communications,nousévitons l’utilisationde liens nonhuman readableàla bitly…C’estvrai pour
lessites/pagescampagnes,maiségalementpourlessiteswebproduitsouservices. Dansle cas d’un
produit, nousprotégeonssimplement nosmarques.
En faisantpointernoszonesDNSsurnos instancesAzure (IPouCNAME),nouspouvonsanalyserla
requête etconstruire desrèglesde redirectioncomplexes.Pourcelanousutilisonslapuissance des
expressionsrégulièresRegex.
A date,tousnos nomsde domaine ne sontpas managéspar cette application,uniquementceux qui
nécessitentdesmodifications rapidesetune administrationagile. Danscetarticle,vousdécouvrirez
commentcomposervotre service pour pouvoirbénéficierde lacontinuité de service d’Azure
essentielle pource type d’application.
Architecture de la solution
Parcours d’une requête
Architecture Fonctionnelle sur Windows Azure
Le cœur de notre programme réside dansl’analysede l’url.Cetteanalyse estfaitegrâce àune
requête Linqcouplée àdes expressionsrégulières.Elle nousfournitl’url dudomaine de destination
le pluspertinent ainsi que le code httpàrenvoyer.Le traitementse faitsurcesdifférents cas:
 Trouve l'url exacte
 Trouve le répertoire
 Trouve lesexpressionsRegex.
On ordonne larègle ayantlachaine la plusgrande.C'estdoncl'url lapluslongue qui vienten
premier.Celapermetde prendrelesrèglesplusprécises pourfinirsurlesrèglesgénérales.
On suppose que le code Httpexiste. Vouspouvezutiliserl’ensemble descodes (From100 to520).
Néanmoins,si uncode httpn’existepas, l’applicationretournerauncode 500 signifiantque le code
http n’existepas.
Les statutsde redirectionsontindispensablesàvotre stratégie SEO. Par exemple,si vousgardezune
redirection302 sur le rootmicrosoft.comvers www.microsoft.com;lesmoteursde recherche
afficherontcomme url le rootet non lavéritable url.Le title etladescriptionaffichésserontceux de
la page cible etlespagesqui sontendessusserontaffectées…
Status Code Status
300 "Multiple Choices"
301 "MovedPermanently"
302 "Found"
303 "See Other(since HTTP/1.1)"
304 "NotModified"
305 "Use Proxy(since HTTP/1.1)"
306 "SwitchProxy"
307 "TemporaryRedirect(since HTTP/1.1)"
308 "PermanentRedirect(approvedas
experimental RFC)[12]"
Architecture Applicative
Compute
Afind’obtenirles99.8 % d’uptime,nous avonsaligné2instances Azure.Le besoinenressources
étantlimité,nousavonsopté pourdesinstancesextrasmall.
Database
Nousavonschoisi SQL Serverpourcette applicationmais unblobtable Azure auraitputoutautant
satisfaire nosbesoins.Eneffet,le modèlede données n’apasbesoinde relationnel caril comporte
une table seulement.
Table Domains
- [IdDomain] INT IDENTITY (1, 1) NOT NULL,
- [Domain] NVARCHAR(500) NOT NULL,
- [Type] NCHAR (3) NULL,
- [Destination] VARCHAR(250) NULL,
- [StatusCode] INT NULL,
- [Actif] BIT NULL,
- [MailOwner] VARCHAR(250) NULL,
- [DateCreated] DateTime NULL,
- [DateUpdated] DateTime NULL,
Cache
Nousavonschoisi le cache HttpRuntime du .NetFramework.Inutile dansnotre cas d’avoiruncache
distribué.Néanmoins, si vousle souhaitez, le systèmede cache distribué estaccessible directementà
partir despropriétésde l’application.
La logique de développement, le métier et les regex
Les Evènements :
Afind’écouterl’ensemble desrequêtesqui arriventsurnotre applicationnousavonschoisi
l’événementApplication_BeginRequest qui se trouve dansle fichier Global.asax
Logique métier :
La logique métierestencapsulée dansune classe.
L’essentiel de cette logique se trouve danscette requête Linq
var lDDMList = from obj in this.ListDomains
let mySearchTerm = obj.DomainRegex.Match(this.FinalPath)
where mySearchTerm.Success
orderby obj.Domain.Length descending
select new DomainsDataModel
{
Destination = obj.Destination,
Domain = obj.Domain,
DomainRegex = obj.DomainRegex,
DomainMatch = mySearchTerm,
StatusCode = obj.StatusCode
};
Nouscherchonsdansnotre base de domaine àanalyserl’expression(notre requête)laplus
pertinente etnousrenvoyonslaredirection correspondante.
La Data Access Layer
Nouscréonsun repositoryde domainqui gère le cache etl’accèsà la base de donnéesviaEntity
Framework.Afind’assurerune continuité de service,nousne rafraichissons le cache que si la
requête SQLestpassé.Si une coupure entre labase et l’applicationarrive,alorsnousgardonsles
règlesenmémoire etce jusqu’àce qu’ellesoitaccessible ànouveau.
Gestion des erreurs
Si une redirectionn’estpas trouvée ousi unmauvaiscode httpest fourni,l’application redirige
temporairementvers une page pardéfaut.
Monitoring
DepuislaSDK 2.0, un système de diagnosticestapparudansAzure.Ce monitoringestutilisédans
notre applicationqui tourne surlaSDK Azure 2.2. Pour l’utiliser,il suffitde bienconfigurer
l’applicationlorsdudéploiement suivantvotre besoin :
Ensuite,il suffitd’utiliserlalibde diagnosticdu.NetFramework :
System.Diagnostics.Trace.TraceError
System.Diagnostics.Trace.TraceWarning
System.Diagnostics.Trace.TraceInformation
Plusieursressourcessontutilisées pourlarécupérationdesdonnées :
Type Stockage Accès Type d’erreur
Blob storage wad-control-container Déploiement
Table storage WADLogsTable AppTrace Error
HandledException
Table storage WADWindowsEventLogsTable Windows Error
Infrastructure
UnandledException
Si une expressionrégulière n'estpasbonne,le problème estnotifié dansleslogs.Elle n'estpas
ajoutée àla liste.
Les principes de sécurité
L’avantage de déployersonapplicationsurAzure estde ne pas se soucierde lapartie infrastructure.
Vouspouvezdoncvousconcentrersurla partie applicative. Voici quelquesconsidérationsgénérales :
Faille potentiel Solution Sévérité
XSS Si une requête potentiellementdangereuseest
détectée alorsonredirige verslapage pardéfaut(":"et
les"////") > mécanisme Unandledexception
HIGH
Configuration La chaine de connexionestencodéegrâce auprotocole
PKCS12ProtectedConfigurationProvider (voir
déploiement)
MEDIUM
DOS Load balancerAzure contientdesmécanismes de
protection.
Timeoutexecutionde 10 secs
MEDIUM
Data hack SQL ServerprotectedbyFirewall IP.Bydesign dansSQL
Azure
LOW
SQL Injection Use of Entityframework
No input:L’applicationn’estpasautorisée àécrire en
base.
LOW
Et pour le déploiement, c’est simple
Pour Updater le rôle sans downtime
1. Update le rôle de Visual Studioversle staging
2. Test
3. Swap d'adresse IP
Encoder le fichier de configuration :
1. Il fautStrong typerl’application(lien)
2. Ensuite copierl’Assemblyde l’application dansle dossier .NETFramework
(C:WindowsMicrosoft.NETFrameworkv4.0.30319)
3. Installerle CertificatAzure généré dansle magasinde lamachine de développement
4. Run CommandwithVSCommandprompt(AdminMode):
/// cd root folderde l’application
/// aspnet_regiis -pef "connectionStrings""." -prov"CustomProvider"
Aide : http://archive.msdn.microsoft.com/pkcs12protectedconfg
http://www.heikniemi.net/hardcoded/2013/06/encrypting-connection-strings-in-windows-azure-
web-applications/
Next Step
Aujourd’hui,lesrèglessontinséréesenbase parun poweruserqui vérifie que le domaine ne rentre
pas enconflitavecune autre.Dans une VNext,nousmettronsàdispositiondesutilisateursmarketing
un outil permettantde mettre àjourleurUrls sanspassé par l’IT.Idéalementce système pourra
gérerlesTime Policies(une url qui n’estpasrenouvelée estautomatiquementsuppriméeauboutde
T Temps).Les3 grandesfonctionnalitésàmettre enplace serontdonc :
- Analyse métier/Validationdudomaine.(larequête estjouée surl’ensembledesrègles.Si le
domaine envoyé estégale audomaine saisi,alorslarègle estvalidée.)
- Notification :Mail envoyé 1moisavantl’expirationavecunlienpermettantd’étendre l’url
pour une nouvelle période.
- Mise en place d’une mémoire tamponenglobantl’ensemble desdemandes.Eventuellement,
système de synchronisationdataentre le système de donnéeslocalesetle systèmede
donnéesAzure.
Conclusion
Comme vous l’avezconstaté, le développementducœurde l’applicationn’estqu’uneinfimepartie
de l’effortde développementtotal. A ce titre, laplateforme nouspermetde basernos
développementssurdesFrameworképrouvés.Ainsi,cescouchessonttotalementoupartiellement
traitéesparMicrosoftou sespartenaires sanscoutsadditionnels :
- Monitoring
- Cache system
- Data Synchronisation
L’applicatif estsimple,ne nécessite pas d’effortde mise àjourou d’administrationcomme c’étaitle
cas lorsque nousavionsune machine dédiéeetse metà jouren toute simplicité.

ShortUrlApp-iis-like

  • 1.
    Digital Marketing ITFeedback Construire un IIS like pour configurer et gérer ses noms de domaines sur une solution Cloud Vousl’avieznoté,il n’existe pasunsite Microsoftmaisplusieurs.C’estpourquoi nousavonsbesoin de noms de domaines;soitpourfaire atterrirdessitescampagnes – éphémèresde nature - , soit pour avoirdes« friendlyname » pourredirigerversces campagnes,soitenfinpourprotégernos marques,développerdesservices…Beaucoupde campagnes,beaucoupde sites,nousavonsdonc besoind’une solutionsouple etefficace pourlesgérer. Dans cet article,nousvousprésentonsune solutionpertinente –pournousau moins - qui nous permetd’administrernomsde domaine le touttirantpleinementpartie de lapuissance de Microsoft Azure. Cédric Folliot, Tech Lead, Redsen Consulting Lucas Riedberger, Digital Optimization Lead, Microsoft France
  • 2.
    Contexte Une url estconstituée d’undomaine représentantl’entreprise etd’unmotfacile àretenirpouvant éventuellementrappelerlacampagne. Elle doitdonnerdusensavecunminimumde caractère. Afin de maximiserle SEOetla gestiondu site, nousfaisons atterrirlacampagne surunsite existant. Pour ces communications,nousévitons l’utilisationde liens nonhuman readableàla bitly…C’estvrai pour lessites/pagescampagnes,maiségalementpourlessiteswebproduitsouservices. Dansle cas d’un produit, nousprotégeonssimplement nosmarques. En faisantpointernoszonesDNSsurnos instancesAzure (IPouCNAME),nouspouvonsanalyserla requête etconstruire desrèglesde redirectioncomplexes.Pourcelanousutilisonslapuissance des expressionsrégulièresRegex. A date,tousnos nomsde domaine ne sontpas managéspar cette application,uniquementceux qui nécessitentdesmodifications rapidesetune administrationagile. Danscetarticle,vousdécouvrirez commentcomposervotre service pour pouvoirbénéficierde lacontinuité de service d’Azure essentielle pource type d’application. Architecture de la solution Parcours d’une requête Architecture Fonctionnelle sur Windows Azure Le cœur de notre programme réside dansl’analysede l’url.Cetteanalyse estfaitegrâce àune requête Linqcouplée àdes expressionsrégulières.Elle nousfournitl’url dudomaine de destination le pluspertinent ainsi que le code httpàrenvoyer.Le traitementse faitsurcesdifférents cas:  Trouve l'url exacte  Trouve le répertoire  Trouve lesexpressionsRegex. On ordonne larègle ayantlachaine la plusgrande.C'estdoncl'url lapluslongue qui vienten premier.Celapermetde prendrelesrèglesplusprécises pourfinirsurlesrèglesgénérales.
  • 3.
    On suppose quele code Httpexiste. Vouspouvezutiliserl’ensemble descodes (From100 to520). Néanmoins,si uncode httpn’existepas, l’applicationretournerauncode 500 signifiantque le code http n’existepas. Les statutsde redirectionsontindispensablesàvotre stratégie SEO. Par exemple,si vousgardezune redirection302 sur le rootmicrosoft.comvers www.microsoft.com;lesmoteursde recherche afficherontcomme url le rootet non lavéritable url.Le title etladescriptionaffichésserontceux de la page cible etlespagesqui sontendessusserontaffectées… Status Code Status 300 "Multiple Choices" 301 "MovedPermanently" 302 "Found" 303 "See Other(since HTTP/1.1)" 304 "NotModified" 305 "Use Proxy(since HTTP/1.1)" 306 "SwitchProxy" 307 "TemporaryRedirect(since HTTP/1.1)" 308 "PermanentRedirect(approvedas experimental RFC)[12]" Architecture Applicative Compute Afind’obtenirles99.8 % d’uptime,nous avonsaligné2instances Azure.Le besoinenressources étantlimité,nousavonsopté pourdesinstancesextrasmall.
  • 4.
    Database Nousavonschoisi SQL Serverpourcetteapplicationmais unblobtable Azure auraitputoutautant satisfaire nosbesoins.Eneffet,le modèlede données n’apasbesoinde relationnel caril comporte une table seulement. Table Domains - [IdDomain] INT IDENTITY (1, 1) NOT NULL, - [Domain] NVARCHAR(500) NOT NULL, - [Type] NCHAR (3) NULL, - [Destination] VARCHAR(250) NULL, - [StatusCode] INT NULL, - [Actif] BIT NULL, - [MailOwner] VARCHAR(250) NULL, - [DateCreated] DateTime NULL, - [DateUpdated] DateTime NULL, Cache Nousavonschoisi le cache HttpRuntime du .NetFramework.Inutile dansnotre cas d’avoiruncache distribué.Néanmoins, si vousle souhaitez, le systèmede cache distribué estaccessible directementà partir despropriétésde l’application. La logique de développement, le métier et les regex Les Evènements : Afind’écouterl’ensemble desrequêtesqui arriventsurnotre applicationnousavonschoisi l’événementApplication_BeginRequest qui se trouve dansle fichier Global.asax Logique métier : La logique métierestencapsulée dansune classe.
  • 5.
    L’essentiel de cettelogique se trouve danscette requête Linq var lDDMList = from obj in this.ListDomains let mySearchTerm = obj.DomainRegex.Match(this.FinalPath) where mySearchTerm.Success orderby obj.Domain.Length descending select new DomainsDataModel { Destination = obj.Destination, Domain = obj.Domain, DomainRegex = obj.DomainRegex, DomainMatch = mySearchTerm, StatusCode = obj.StatusCode }; Nouscherchonsdansnotre base de domaine àanalyserl’expression(notre requête)laplus pertinente etnousrenvoyonslaredirection correspondante. La Data Access Layer Nouscréonsun repositoryde domainqui gère le cache etl’accèsà la base de donnéesviaEntity Framework.Afind’assurerune continuité de service,nousne rafraichissons le cache que si la requête SQLestpassé.Si une coupure entre labase et l’applicationarrive,alorsnousgardonsles règlesenmémoire etce jusqu’àce qu’ellesoitaccessible ànouveau. Gestion des erreurs Si une redirectionn’estpas trouvée ousi unmauvaiscode httpest fourni,l’application redirige temporairementvers une page pardéfaut. Monitoring DepuislaSDK 2.0, un système de diagnosticestapparudansAzure.Ce monitoringestutilisédans notre applicationqui tourne surlaSDK Azure 2.2. Pour l’utiliser,il suffitde bienconfigurer l’applicationlorsdudéploiement suivantvotre besoin :
  • 6.
    Ensuite,il suffitd’utiliserlalibde diagnosticdu.NetFramework: System.Diagnostics.Trace.TraceError System.Diagnostics.Trace.TraceWarning System.Diagnostics.Trace.TraceInformation Plusieursressourcessontutilisées pourlarécupérationdesdonnées : Type Stockage Accès Type d’erreur Blob storage wad-control-container Déploiement Table storage WADLogsTable AppTrace Error HandledException Table storage WADWindowsEventLogsTable Windows Error Infrastructure UnandledException Si une expressionrégulière n'estpasbonne,le problème estnotifié dansleslogs.Elle n'estpas ajoutée àla liste.
  • 7.
    Les principes desécurité L’avantage de déployersonapplicationsurAzure estde ne pas se soucierde lapartie infrastructure. Vouspouvezdoncvousconcentrersurla partie applicative. Voici quelquesconsidérationsgénérales : Faille potentiel Solution Sévérité XSS Si une requête potentiellementdangereuseest détectée alorsonredirige verslapage pardéfaut(":"et les"////") > mécanisme Unandledexception HIGH Configuration La chaine de connexionestencodéegrâce auprotocole PKCS12ProtectedConfigurationProvider (voir déploiement) MEDIUM DOS Load balancerAzure contientdesmécanismes de protection. Timeoutexecutionde 10 secs MEDIUM Data hack SQL ServerprotectedbyFirewall IP.Bydesign dansSQL Azure LOW SQL Injection Use of Entityframework No input:L’applicationn’estpasautorisée àécrire en base. LOW
  • 8.
    Et pour ledéploiement, c’est simple Pour Updater le rôle sans downtime 1. Update le rôle de Visual Studioversle staging 2. Test 3. Swap d'adresse IP Encoder le fichier de configuration : 1. Il fautStrong typerl’application(lien) 2. Ensuite copierl’Assemblyde l’application dansle dossier .NETFramework (C:WindowsMicrosoft.NETFrameworkv4.0.30319) 3. Installerle CertificatAzure généré dansle magasinde lamachine de développement 4. Run CommandwithVSCommandprompt(AdminMode): /// cd root folderde l’application /// aspnet_regiis -pef "connectionStrings""." -prov"CustomProvider" Aide : http://archive.msdn.microsoft.com/pkcs12protectedconfg http://www.heikniemi.net/hardcoded/2013/06/encrypting-connection-strings-in-windows-azure- web-applications/ Next Step Aujourd’hui,lesrèglessontinséréesenbase parun poweruserqui vérifie que le domaine ne rentre pas enconflitavecune autre.Dans une VNext,nousmettronsàdispositiondesutilisateursmarketing un outil permettantde mettre àjourleurUrls sanspassé par l’IT.Idéalementce système pourra gérerlesTime Policies(une url qui n’estpasrenouvelée estautomatiquementsuppriméeauboutde T Temps).Les3 grandesfonctionnalitésàmettre enplace serontdonc : - Analyse métier/Validationdudomaine.(larequête estjouée surl’ensembledesrègles.Si le domaine envoyé estégale audomaine saisi,alorslarègle estvalidée.) - Notification :Mail envoyé 1moisavantl’expirationavecunlienpermettantd’étendre l’url pour une nouvelle période. - Mise en place d’une mémoire tamponenglobantl’ensemble desdemandes.Eventuellement, système de synchronisationdataentre le système de donnéeslocalesetle systèmede donnéesAzure. Conclusion Comme vous l’avezconstaté, le développementducœurde l’applicationn’estqu’uneinfimepartie de l’effortde développementtotal. A ce titre, laplateforme nouspermetde basernos développementssurdesFrameworképrouvés.Ainsi,cescouchessonttotalementoupartiellement traitéesparMicrosoftou sespartenaires sanscoutsadditionnels : - Monitoring - Cache system
  • 9.
    - Data Synchronisation L’applicatifestsimple,ne nécessite pas d’effortde mise àjourou d’administrationcomme c’étaitle cas lorsque nousavionsune machine dédiéeetse metà jouren toute simplicité.