Mik azok a titkos kódok, és hogyan kezelhetők a Java-ban?
A titkos kódok olyan karaktersorozatok, amelyeket nem szabad megosztani a külvilággal: lehetnek adatbázisjelszavak, titkos titkosítási kulcsok, személyes hozzáférési jogkivonatok stb. A fokozott biztonság érdekében sokan úgy vélik, hogy minden, ami segíthet a támadónak, titkosnak tekinthető: például az éles adatbázis URL-címe titkosnak tekinthető. Az adatbázisnak nem szabad nyilvánosan elérhetőnek lennie. Ennek az az oka, hogy az ilyen típusú információk természetüknél függően érzékenyek, és minél kevesebb információ érhető el a kódban, annál jobb.
Mi az a Teljes felügyelet és a nulla titkos kód?
A Teljes felügyelet fogalma az, hogy senki sem lehet vakon megbízható, és senki sem férhet hozzá a vállalati erőforrásokhoz anélkül, hogy ellenőrizték és engedélyezték volna.
Ez a fogalom a webalkalmazásokra is vonatkozik: nem szabad titkos kódokat tárolniuk a kódjukban vagy a végleges bináris fájljaikban. Ezt hívjuk zéró titkoknak.
A titkos kulcsokat külső rendszernek kell kezelnie, szigorú hozzáférési szabályokkal és ellenőrzéssel, a támadási kockázat csökkentése érdekében.
Ne tegyen titkos kulcsokat a Git-adattárakba
Még ha a Git-adattár privát is, a forráskódba való bármilyen titkos kód elhelyezése helytelen gyakorlat:
- Bárki, aki hozzáfér az adattárhoz, tudni fogja a bizalmas adatait
- Bárki, aki hozzáfér az alkalmazás bináris fájljához, kinyerheti belőle a titkos kulcsokat
Ha egy titkos kulcsot egy Git-adattárban tárolnak, a támadók mindig megtalálhatják az adattár előzményeit, ahol hosszú idő elteltével elfelejthetők.
Még ha praktikusnak is tűnik, soha ne tároljon titkos kulcsokat a forráskódtárban. A probléma elkerülése érdekében használhat olyan automatikus eszközöket, amelyek rendszeresen ellenőrzik az adattárat, és figyelmeztetéseket küldenek, ha véletlenül tárolt jelszót vagy adatbázis URL-címet találnak.
Környezeti változók használata
A titkos kódok kezelésére a legegyszerűbb megoldás a környezeti változók használata. Számos előnnyel rendelkeznek:
- Könnyen használhatóak
- Minden rendszeren működnek (még a helyszíni rendszerekben is)
- Mindenki ismeri őket, és megérti, hogyan működnek
Azonban nem elég biztonságosak: a rendszer összes folyamata képes olvasni őket, és a Java-rendszereken a Java Management Extensions (JMX) használatával könnyen elérhetővé válnak.
Ennek eredményeképpen a környezeti változók gyakran első lépésként jelennek meg a Teljes felügyelet felé: biztonságosabbak, mint a titkos kódok közvetlenül a forráskódba való tárolása, de nem rendelkeznek felügyeleti képességekkel, és könnyen elérhetők a támadók számára.
Kubernetes-titkos kódok használata
A Kubernetesnek van egy fogalma secrets, ami egy másik jó megoldás. Ezek a titkos kódok fájlként tölthetők be az alkalmazás fájlrendszerére: a Java-programok ezt a fájlt indításkor elolvashatják, hogy hozzáférhessenek ezekhez a titkos kódokhoz. Az olyan eszközök, mint a Spring Frameworks, még standard támogatást is nyújtanak ehhez a mechanizmushoz, így könnyen és hatékonyan használhatják ezeket a titkos kulcsokat.
Ez a mechanizmus biztonságosabb, mint a környezeti változók, mivel ezeket a fájlokat csak az azt igénylő folyamat tudja olvasni. A gazdag Kubernetes-ökoszisztémának is hasznát vehetik, és különböző felügyeleti eszközökkel kezelhetők, beleértve a felhőszolgáltató által biztosított eszközöket is.
Bár a Kubernetes-titkos kulcsok jó megoldást jelentenek a Kubernetes számára, a Kubernetes-infrastruktúra kezeléséhez használt eszközöktől függően ezek a Kubernetes-szolgáltatásokra is korlátozódnak, és nem rendelkeznek fejlett felügyeleti képességekkel.
Titkos kódtár használata
A Titkos kulcsok tárolója, például a Hashicorp Vault vagy az Azure Key Vault, a titkos kódok kezelésére szolgáló speciális szoftver. Gazdag felügyeleti rendszert kínál a felhasználók engedélyezéséhez, a biztonsági kulcsok elforgatásához és annak ellenőrzéséhez, hogy melyik alkalmazás férhet hozzá a titkos kulcsokhoz.
Külső API-t is biztosítanak, így bármilyen rendszeren használhatók. Az Azure Key Vaultot például minden Azure-szolgáltatásban használhatja, beleértve a virtuális gépeket, Azure-alkalmazás szolgáltatásokat, az Azure Kubernetes Servicest vagy az Azure Spring Appst.
A titkos kódok kezelésére a Titkos kulcsok tároló a legbiztonságosabb megoldás, de egy dedikált eszköz használatát igénylik.