====== Bezvýpadková migrace Shibboleth IdP ====== ===== Úvod ===== Tento dokument popisuje, jak //bezvýpadkově// přemigrovat Shibboleth IdP z jednoho serveru na jiný, aniž by si toho uživatelé všimli. Zároveň není potřeba žádné spolupráce s operátorem federace, protože nedochází ke změně metadat (čili ani certifikátů v metadatech). Využijete toho např. v situaci, kdy chcete migrovat ze starší verze operačního systému na novější. ===== Předpoklady ===== Pro lepší orientaci v textu zavedeme následující konvenci. ==== Stávající server ==== * DNS: ''%%idp.example.org%%'' * IPv4: ''%%192.0.2.10%%'' * IPv6: ''%%2001:db8::10%%'' * Název serveru (hostname): ''%%idp.example.org%%'' * entityID: ''%%https://idp.example.org/idp/shibboleth%%'' ==== Nový server ==== * DNS: není třeba, pro instalaci stačí přístup přes IP adresu * IPv4: ''%%192.0.2.20%%'' * IPv6: ''%%2001:db8::20%%'' * Název serveru (hostname): ''%%idp.example.org%%'' * entityID: ''%%https://idp.example.org/idp/shibboleth%%'' ===== Postup ===== Nainstalujeme a nakonfigurujeme nový server jako kdyby se jednalo o stávající server ''%%idp.example.org%%''. Při konfiguraci Shibboleth IdP na novém serveru použijeme //entityID// stávajícího serveru, tedy ''%%https://idp.example.org/idp/shibboleth%%'', použijeme také stávající "ceritifikáty" (ve skutečnosti páry veřejných a odpovídajících soukromých klíčů) ''%%idp-encryption.{crt,key}%%'' a ''%%idp-signing.{crt,key}%%'', které se standardně nachází v adresáři ''%%/opt/shibboleth-idp/credentials/%%''. S největší pravděpodobností můžeme zapomenout na "certifikáty" takzvaného backchannelu, tedy ''%%backchannel.{crt,p12}%%'', jelikož ho v dnešní době již téměř nikdo nepoužívá. Samozřejmostí je identická konfigurace např. atributů (''%%attribute-resolver.xml%%''), ale i pravidel jejich uvolňování (''%%attribute-filter.xml%%'') a tak dále. Nezapomeneme ani na přenos databáze s persistentními identifikátory a samozřejmě použít stejnou sůl! Velice vhodné je v metadatech nově nainstalovaného serveru (''/opt/shibboleth-idp/metadata/idp-metadata.xml'') změnit certifikáty za ty původní. To pro případ, že byste chtěli metadata někomu poskytnout, tak aby se tam nacházely ty správné (původní) certifikáty a ne špatné (nově vygenerované při instalaci, které jste přepsali původními). ===== Otestování ===== Nyní si vše otestujeme pomocí jednoduchého triku. V konfiguračním souboru ''%%/etc/hosts%%'' (Linux, BSD, macOS) //na naší pracovní stanici// si upravíme DNS následujícím způsobem: 192.0.2.20 idp.example.org 2001:db8::20 idp.example.org Tím jsme docílili toho, že při zadání adresy ''%%https://idp.example.org%%'' do webového prohlížeče budeme ve skutečnosti komunikovat s novým serverem, kterému jsme v DNS zatím nedali žádné jméno. Jelikož tento server zná privátní klíče k veřejným klíčům uvedených v metadatech federace, bude vystupovat v rámci federace jako stávající server ''%%idp.example.org%%''. Tento trik funguje, protože již není potřeba používat "backchannel" a veškerá komunikace (přihlášení, atributy, ...) funguje pomocí cookies webového prohlížeče. Můžeme se tedy přihlásit na libovolnou službu ve federaci a otestovat, zda služba funguje správně i s nově nakonfigurovaným IdP. ===== Přepnutí ===== Po úspěšném otestování můžeme přistoupit k samotnému přepnutí. To provedeme ve třech krocích pomocí změn DNS záznamů: - Snížíme TTL hodnoty u DNS záznamů A (IPv4) i AAAA (IPv6) pro ''%%idp.example.org%%'' na co nejnižší hodnotu, která je možná, abychom dokázali přepnout uživatele co nejrychleji po vypršení platnosti nakešovaných DNS záznamů. Nyní vyčkáme, až se staré nakešované DNS záznamy nahradí novými záznamy. - Přejmenujeme starý server v DNS z ''%%idp.example.org%%'' na ''%%idp-old.example.org%%'' a nový server následně pojmenujeme jako ''%%idp.example.org%%''. TTL ponecháme na snížených hodnotách, abychom se v případě potřeby mohli změnou DNS záznamů vrátit zpět a používat i nadále IdP na původním serveru. Ten, kdo má stále nakešované staré DNS záznamy, se připojí na staré IdP, přihlásí se a vše funguje. Ten, kdo má již nové DNS záznamy, se připojí na nové IdP, přihlásí se a také vše funguje. - Pokud vše stále funguje, můžeme zvýšit hodnoty TTL na standardní úroveň a migrace je hotova. Starý server (včetně DNS záznamu ''%%idp-old.example.org%%'' a alokovaných IP adres) můžeme zrušit. Samozřejmostí je také odebrání záznamů z ''%%/etc/hosts%%'' pro doménu ''%%idp.example.org%%''. ==== Další varianta přepnutí ==== Máte-li virtualizační platformu a přidělujete-li IP adresy serverům na základě MAC adres, je proces přepnutí ještě jednodušší. - Vypnete nový virtuální server. - Novému virtuálnímu serveru nastavíte MAC adresu stávajícího virtuálního serveru. - Vypnete stávající virtuální server. - Zapnete nový virtuální server.