Legacy Chronicles - AWS Systems Manager

Legacy Chronicles - AWS Systems Manager

Cloud2
Cloud2

11 Jan 2019

5 min read

Julkipilven kiistatta parhaita puolia on niiden käyttöönoton helppous ja nopeus. Projektiorganisaatiot voivat ketterästi validoida uusia liikeideoita, ja kehittäjät saavat nopeasti pystyyn uusia ympäristöjä. Pilviarkkitehdin työn veikeimpiä puolia ovat puolestaan tilanteet, joissa tällaiset ketterät kokeilut ovat päätyneet kokeilumoodissa tuotantoon ja unohtuneet mahdollisesti pitkäksikin aikaa. Viime syksynä asiakas pudotti syliimme kasan AWS:ssä pyöriviä EC2-palvelimia saatesanoilla “tässä olis tällaisia ja jotain pitäis tehdä, ottakaa haltuun”. Tällaisessa tilanteessa pitää saada akuutisti tehtyä seuraavat asiat:

  1. Palvelinten tietoturva ajan tasalle
  2. Selvyys siitä mitä palvelimilla pyörii ja ovatko ne tarpeellisia
  3. Varmuuskopiot kuntoon
  4. Logit talteen Yleensä kannattaa myös harkita onko palvelimia mielekästä pyöritellä sellaisenaan, vai onko järjestelmä niin tärkeä että sama toiminnallisuus kannattaa toteuttaa kokonaan uudelleen. Usein suosimme vähintään kevyttä refaktorointia tai kokonaan uuden pilvinatiivin infrastruktuurin rakentamista. Tässäkin tapauksessa päädyimme sopivaan refaktorointiin ja päädyimme tekohengittämään palvelimet sekä määrittelemään asiakkaalle joustavan, konttipohjaisen alustan jolla jatkossa pyörittää näitä ja muita vastaavia järjestelmiä. Keskityn tässä kirjoituksessa tekohengittämiseen, jonka osalta oleellisia ovat listan kohdat 1 ja 2. (Kolmosen ja nelosen saa meiltä palveluna) Saimme asiakkaalta pääsyn AWS-tilille ja palvelimille, joten ei muuta kun lapio käteen ja hommiin. Ensimmäinen havainto oli, että palvelimilla ajettiin Ubuntun versiota 14.04, joka on tämän kirjoitushetkellä elinkaarensa loppupäässä. Käyttöjärjestelmät pitäisi siis saada päivitettyä ennemmin kuin myöhemmin. Palvelimilla pyöri lähinnä erinäisiä WordPress- ja MySQL-asennuksia, joten kohdan 2 osalta keikassa ei ollut mitään erityisen ihmeellistä. AWS julkaisi taannoin Systems Managerin, joka sopii tällaisiin tilanteisiin kuin nakutettu. Sen avulla palvelinten ja muiden resurssien tilanteeseen saa helposti näkyvyyden, ja sitä voi käyttää resurssien keskitettyyn hallintaan. Päätimme hyödyntää Systems Manageria tietoturvapäivitysten tekemiseen keskitetysti. Mukavana bonuksena sillä saisi hallittua myös kehittäjien pääsyt palvelimille IAM-tunnuksilla, jolloin niistä jää automaattisesti audit trail eikä palvelimille tarvitse tehdä erillisiä virityksiä käyttäjätunnuksia varten. Teoriassa Systems Managerin käyttöönotto on helppoa: asenna agentti palvelimelle ja valmista tuli. Lisäksi palvelimille tarvitaan IAM-rooli joka mahdollistaa palvelinten kommunikoinnin SSM-rajapinnan kanssa. Ansible siis käteen ja agentit kaikille pannuille pyörimään. Ensimmäinen ongelma: kaikkia palvelimia ei näkynyt SSM:n inventaariossa lainkaan, ja osa näkyi connection lost -tilassa, vaikka agentin asennus näytti pinnallisin puolin onnistuneen. Tarkistimme että palvelimilla on oikea IAM-rooli eikä missään ole palomuuria estämässä liikennettä. AWS:n päässä security groupit näyttivät oikeilta, eikä pannuilta löytynyt iptables-virityksiä. Teimme samaan aliverkkoon samoilla asetuksilla testiksi uuden Ubuntu 14.04 -palvelimen, jonka kanssa SSM toimi kuten pitääkin. Tässä vaiheessa huomasimme, että toimimattomat palvelimet on itseasiassa pystytetty jostakin kustomoidusta imagesta - testipalvelimemme sen sijaan oli Amazonin tarjoama AMI. Periaatteessa palvelimilla saattoi siis olla ihan mitä tahansa leipomuksia. Hommassa oli potentiaalia kehittyä todella kummalliseksi, joten tässä vaiheessa kysyimme näkemystä myös AWS:n tuelta. Mitään haittaakaan kysymisestä ei ole, ja usein AWS:ltä saa arvokasta näkemystä tällaisissa hieman eksoottisimmissa tapauksissa. Omassa päässämme otimme puolestaan SSM-agentin logit käteen. Logeissa pisti silmään, että palvelimen instanssi-id oli mi-alkuinen, kun yleensä EC2:n id:t alkavat i-kirjaimella. “Setting up websocket for controlchannel for instance: mi-06745f6170fb0fe84, requestId: 2d068de2-c906-4133-9753-46c9d790efee” Logimerkintä herätti epäilyksen palvelinten alkuperästä. Tällaisen mi-alkuisen instanssi-id:n saavat nimittäin SSM:llä hallinnoidut on-premise -palvelimet. Asiakas tiesi kertoa, että palvelimet oli alunperin lift ’n shiftattu heidän VMWare-ympäristöstään AWS:ään. SSM julkaistiin loppuvuonna 2017, ja mysteeripalvelimemme oli pystytetty alkuvuonna 2018 jostakin custom imagesta. Ilmeisesti alkuperäisessä migraatiossa VMWare-palvelimista oli luotu sellaisenaan AMI, josta oli pystytetty nämä uudetkin palvelimet. Tämän imagen mukana on sitten kulkeutunut uusien palvelinten levynkulmalle tämä SSM-rekisteröinti. AWS-tuen kaveri kertoi törmänneensä joskus ongelmiin tällaisten hybridiympäristöjen kanssa, ja ohjeisti poistamaan SSM-agentin hakemistosta kaiken vanhaan instanssi-id:hen viittaavan. $ ls -al /var/lib/amazon/ssm/ drw——- 7 root root 4096 Oct 26 2017 . drw——- 3 root root 4096 Oct 26 2017 .. drw——- 3 root root 4096 Oct 26 2017 Vault drw——- 2 root root 4096 Oct 26 2017 daemons drw——- 5 root root 4096 Oct 26 2017 i-07fbc8dfc7a9207f5 drw——- 3 root root 4096 Oct 26 2017 localcommands drw——- 7 root root 4096 Oct 15 10:24 mi-06745f6170fb0fe84 -rw——- 1 root root 68 Oct 26 2017 registration Poistimme mi-06745f6170fb0fe84 -hakemiston sekä registration-tiedoston, jonka sisältö hienovaraisesti vihjasi että palvelin tosiaan haluaa rekisteröidä itsensä väärällä instanssi-id:llä. {“ManagedInstanceID”:“mi-06745f6170fb0fe84”,“Region”:“eu-central-1”} Käynnistimme SSM-agentin uudelleen, mutta palvelin ei vieläkään näkynyt SSM:n inventaariossa. mi-06745f7170fb0fe84 -hakemistokin oli putkahtanut jostain takaisin, mutta mistä? Väärä id ei pyörinyt missään konfiguraatioissa tai palvelimen metadatassa. Yritimme poistaa palvelinta myös SSM:n päästä, mutta kyseisellä id:llä sitä ei löytynyt. $ aws ssm deregister-managed-instance –instance-id “mi-06745f6170fb0fe84” “An error occurred (InvalidInstanceId) when calling the DeregisterManagedInstance operation:” Tässä vaiheessa poistimme koko SSM-agentin ja asensimme sen uudelleen. Tällaisenaan toimenpide ei auttanut, sillä agentin itsensä poistaminen ei poista sen välimuistia. Näin ollen vanha rekisteröinti putkahtaa jälleen esille kun agentin asentaa uudelleen. Homma saatiin lopulta pelittämään paremmin poistamalla agentti, tyhjentämällä koko /var/lib/amazon/ssm/ -hakemisto ja tämän jälkeen asentamalla agentti uudelleen. Näiden temppujen jälkeen kaikki palvelimet yhtä lukuunottamatta näkyivät Systems Managerissa online-tilassa kuten pitääkin. Tämän yhden palvelimen osalta mysteeri ei oikeastaan ikinä selvinnyt. AWS-tuki halusi palvelimen SSM-agentin debug-logit, jotka saa enabloitua tunkkaamalla SSM:n käyttämän Seelogin konfiguraatio-XML:ää. Linux-ympäristössä tiedosto asustaa polussa /etc/amazon/ssm/seelog.xml, ja debug-logit saa enabloitua vaihtamalla seelog-elementin minlevel-attribuutin arvosta “info” arvoon “debug”. Tuki mainitsi myös, että connection lost -tilassa olevat palvelimet poistuvat SSM:stä 30 päivän kuluessa elleivät ne sitä ennen saa SSM:n yhteyttä. Laskeskelimme, että tätä painiottelua oli käyty sen verran kauan että palvelin kokisi luonnollisen poistuman noin viikon kuluttua joka tapauksessa, joten kovin intensiivinen tunkkailu ei maksaisi vaivaa. Jätimme SSM-agentin pyörimään palvelimelle ja jäimme odottelemaan, että AWS-tuki kävisi debug-logit läpi tai että 30 päivän määräaika tulisi täyteen. Kuinka ollakaan, eräänä päivänä töihin tullessani totesin että palvelin oli ilmestynyt online-tilaan ja AWS-tuki vahvisti että tämä johtui 30 päivän määräajan täyttymisestä. Tietoturvapäivitykset ovat pyörineet palvelimilla automaattisesti nyt joitakin kuukausia, ja kehittäjät ovat käytelleet SSM:ää oikein tyytyväisinä silloin kun ovat tarvinneet pääsyä palvelimille. Palvelu toimii siis erittäin hyvin, mutta täysin ongelmatonta sen käyttöönotto ei ollut. Tyypillisessä tapauksessa homma lienee helpompaa etenkin kun SSM-agentti tulee tätä nykyä AWS:n ylläpitämien AMI:en mukana (ja normaalitilanteessa kannattaa käyttää näitä imageja ilman mitään omia virityksiä). Toisaalta tämä oli oikein mielenkiintoinen oppitunti SSM:n sielunelämästä ja siitä mitä yllätyksiä saattaa tulla kun palvelimia lift ’n shiftataan konesalista tai muusta virtuaaliympäristöstä julkiseen pilveen. Tällaisten yllätysten takia emme Cloud2:lla ole niitä lift ’n shiftin suurimpia faneja, mutta se on jo sitten ihan toinen tarina…
Cloud2

Cloud2

Field Notes

Related Articles

Continue exploring cloud technology and best practices

Legacy Chronicles - AWS Systems Manager

Resilience

8 min read

Cloud Risk Is Business Risk: What Your Board Needs to Know

Most boards treat cloud as a technology topic delegated to IT. That gap between perception and reality is where real business risk hides.

Read more
Legacy Chronicles - AWS Systems Manager

Resilience

8 min read

Business Continuity When Geopolitics Is the Threat Model

Geopolitical conflict has become a direct threat to your cloud infrastructure. Your threat model just changed.

Read more
Legacy Chronicles - AWS Systems Manager

AI

6 min read

Is Your AI High-Risk? A 5-minute Assessment for Business Leaders

Four questions to determine if your AI system faces mandatory EU AI Act compliance by August 2026. Covers the eight high-risk categories, obligations, and practical next steps.

Read more

Services

Related Services

Explore Cloud2 services related to this topic

Ready to discuss your cloud strategy?

Let's talk about how Cloud2 can help your organization.

Field Notes

Stay ahead of the cloud

Practical insights on AWS, Azure, security and AI. Delivered to your inbox.

No spam. Unsubscribe any time.