SQL Saturday Haïti 2022 - Débuter avec Azure pour les DBA.pptx
ShortUrlApp-iis-like
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. 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. 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. 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. 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. 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 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. 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. - 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é.