ShortUrlApp-iis-like

78 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
78
Sur SlideShare
0
Issues des intégrations
0
Intégrations
39
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

ShortUrlApp-iis-like

  1. 1. 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
  2. 2. 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.
  3. 3. 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.
  4. 4. 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.
  5. 5. 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 :
  6. 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. 7. 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
  8. 8. 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
  9. 9. - 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é.

×