Säkerhet är en av de viktigaste aspekterna av att driva en databas. Oavsett om du är en utvecklare eller en DBA, om du hanterar databasen, är det ditt ansvar att skydda dina data och skydda dem från all form av obehörig åtkomst. Det olyckliga faktum är att många organisationer inte skyddar sina data, vilket vi har sett från den nya vågen av MongoDB ransomware-attacker i september 2017. Vi hade tidigare publicerat en blogg om hur man säkrar MongoDB-databaser.
I det här blogginlägget ska vi ta en titt på hur du säkrar dina databaser med ClusterControl. Alla funktioner som beskrivs här är tillgängliga i version 1.5.1 av ClusterControl (släpptes den 23 december 2017). Observera att vissa funktioner endast är tillgängliga för vissa databastyper.
Säkerhetskopieringskryptering
ClusterControl 1.5.1 introducerade en ny funktion som heter säkerhetskopieringskryptering. Alla krypterade säkerhetskopior är markerade med en låsikon bredvid:
Du kan använda den här funktionen på alla säkerhetskopieringsmetoder (mysqldump, xtrabackup, mongodump, pg_dump) som stöds av ClusterControl. För att aktivera kryptering, slå helt enkelt på "Aktivera kryptering"-omkopplaren när du schemalägger eller skapar säkerhetskopian. ClusterControl genererar automatiskt en nyckel för att kryptera säkerhetskopian. Den använder AES-256 (CBC) krypteringsalgoritm och utför krypteringen i farten på målservern. Följande kommando visar ett exempel på hur ClusterControl utför en mysqldump backup:
$ mysqldump --defaults-file=/etc/my.cnf --flush-privileges --hex-blob --opt --no-create-info --no-data --triggers --routines --events --single-transaction --skip-comments --skip-lock-tables --skip-add-locks --databases db1 | gzip -6 -c | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-094508-e0bc6ad658e88d93.tmp | socat - TCP4:192.168.55.170:9999'
Du skulle se följande fel om du försökte dekomprimera en krypterad säkerhetskopia utan att först dekryptera den med rätt nyckel:
$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format
Nyckeln lagras i ClusterControl-databasen och kan hämtas från filen cmon_backup.metadata för en viss säkerhetskopia. Det kommer att användas av ClusterControl när du utför återställning. Kryptera säkerhetskopior rekommenderas starkt, särskilt när du vill säkra dina säkerhetskopior utanför platsen, som att arkivera dem i molnet.
MySQL/PostgreSQL klient-serverkryptering
Förutom att följa de rekommenderade säkerhetsstegen under driftsättningen kan du öka tillförlitligheten för din databastjänst genom att använda klient-server SSL-kryptering. Med ClusterControl kan du utföra den här operationen genom att peka och klicka:
Du kan sedan hämta de genererade nycklarna och certifikaten direkt från ClusterControl-värden under
Databasreplikeringskryptering
Replikeringstrafik inom ett Galera-kluster kan aktiveras med bara ett klick. ClusterControl använder en 2048-bitars standardnyckel och certifikat som genereras på ClusterControl-noden, som överförs till alla Galera-noder:
En omstart av kluster är nödvändig. ClusterControl kommer att utföra en rullande omstart och tar en nod i taget. Du kommer att se en grön låsikon bredvid databasservern (Galera anger Galera Replication-kryptering, medan SSL anger klient-server-kryptering) i Hosts-rutnätet på översiktssidan när kryptering har aktiverats:
Alla nycklar och certifikat kan hanteras direkt under Nyckelhantering, som beskrivs längre ner.
Nyckelhantering
Alla genererade nycklar och certifikat kan hanteras direkt från ClusterControl UI. Nyckelhantering låter dig hantera SSL-certifikat och nycklar som kan tillhandahållas på dina kluster:
Om certifikatet har gått ut kan du helt enkelt använda användargränssnittet för att generera ett nytt certifikat med korrekt nyckel och certifikatutfärdare (CA), eller importera en befintlig nyckel och certifikat till ClusterControl-värden.
Säkerhetsrådgivare
Rådgivare är miniprogram som körs i ClusterControl. De utför specifika uppgifter och ger råd om hur man löser problem inom områden som prestanda, säkerhet, logghantering, konfiguration, lagringsutrymme och annat. Varje rådgivare kan schemaläggas som ett cron-jobb och köras som en fristående körbar fil i ClusterControl-gränssnittet. Det kan också köras via ClusterControl 's9s' kommandoradsklient.
ClusterControl möjliggör två säkerhetsrådgivare för MySQL-baserade system:
- Åtkomst från valfri värd ('%') - Identifierar alla användare som använder en jokerteckenvärd från mysql-systemtabellen och låter dig ha mer kontroll över vilka värdar som kan ansluta till servrarna.
- Kontrollera antalet konton utan lösenord - Identifierar alla användare som inte har något lösenord i mysql-systemtabellen.
För MongoDB har vi följande rådgivare:
- MongoDB-autentisering aktiverad - Kontrollera om MongoDB-instansen körs med autentiseringsläge aktiverat.
- Auktoriseringskontroll – Kontrollera om MongoDB-användare är auktoriserade med en alltför tillåtande roll för åtkomstkontroll.
För mer information om hur ClusterControl utför säkerhetskontrollerna kan du titta på rådgivarens JavaScript-liknande källkod under
Flera nätverksgränssnitt
Genom att ha flera nätverkskort på databasvärdarna kan du separera databastrafik från ledningstrafik. Ett nätverk används av databasnoderna för att kommunicera med varandra, och detta nätverk är inte exponerat för något publikt nätverk. Det andra nätverket används av ClusterControl, för hanteringsändamål. ClusterControl kan distribuera en sådan multinätverkskonfiguration. Tänk på följande arkitekturdiagram:
För att importera ovanstående databaskluster till ClusterControl skulle man ange den primära IP-adressen för databasvärdarna. Sedan är det möjligt att välja förvaltningsnätverket såväl som datanätverket:
ClusterControl kan också fungera i en miljö utan internetåtkomst, där databaserna är helt isolerade från det publika nätverket. Majoriteten av funktionerna kommer att fungera bra. Om ClusterControl-värden är konfigurerad med Internet kan den också klona databasleverantörens arkiv för de internetlösa databasservrarna. Gå bara till
Speglingen kan ta cirka 10 till 20 minuter beroende på internetuppkoppling, du kommer att se det nya objektet i listan senare. Du kan sedan välja det här arkivet istället när du skalar eller distribuerar ett nytt kluster, utan att databasvärdarna behöver ha någon internetanslutning (observera att operativsystemets offline arkiv också bör vara på plats).
MySQL-användarhantering
MySQL-privilegiesystemet säkerställer att alla användare endast kan utföra de operationer de har rätt till. Beviljande är avgörande eftersom du inte vill ge alla användare fullständig åtkomst till din databas, men du måste ha de nödvändiga behörigheterna för att köra frågor och utföra dagliga uppgifter.
ClusterControl tillhandahåller ett interaktivt användargränssnitt för att hantera databasscheman och privilegier. Det förenar kontona på alla MySQL-servrar i klustret och förenklar beviljandeprocessen. Du kan enkelt visualisera databasanvändarna så att du slipper göra misstag.
Som du kan se i skärmdumpen ovan har ClusterControl gråtonat onödiga privilegier om du bara vill ge en användare till en databas (shopdb). "Kräver SSL?" är endast aktiverat om klient/server SSL-krypteringen är aktiverad medan kryssrutorna för administrationsbehörighet är helt inaktiverade om en specifik databas är definierad. Du kan också inspektera den genererade GRANT-satsen längst ner i guiden för att se satsen som ClusterControl kommer att köra för att skapa den här användaren. Den här hjälpen ser ganska enkel ut, men att skapa användare och bevilja privilegier kan vara felbenägen.
ClusterControl tillhandahåller också en lista över inaktiva användare för alla databasnoder i klustret, och visar de konton som inte har använts sedan den senaste omstarten av servern:
Detta varnar administratören för onödiga konton som finns och som potentiellt kan skada servern. Nästa steg är att verifiera om kontona inte längre är aktiva, och du kan helt enkelt använda alternativet "Släpp vald användare" för att ta bort dem. Se till att du har tillräckligt med databasaktivitet för att säkerställa att listan som genereras av ClusterControl är korrekt. Ju längre serverdrift, desto bättre.
Håll dig alltid uppdaterad
För produktionsanvändning rekommenderas det starkt att du installerar de databasrelaterade paketen från leverantörens arkiv. Lita inte på standardlagringsplatsen för operativsystemet, där paketen vanligtvis är föråldrade. Om du kör i en klustermiljö som Galera Cluster, eller till och med MySQL Replication, har du alltid valet att patcha systemet med minimal driftstopp.
ClusterControl stöder automatisk rullande mindre versionsuppgradering för MySQL/MariaDB med ett enda klick. Gå bara till
Uppgraderingar av större versioner (t.ex. från MySQL 5.6 till MySQL 5.7) är avsiktligt inte automatiserade. Större uppgraderingar kräver vanligtvis avinstallation av de befintliga paketen, vilket är en riskabel uppgift att automatisera. Noggrann planering och testning är nödvändig för sådana typer av uppgraderingar.
Databassäkerhet är en viktig aspekt av att köra din databas i produktion. Från alla incidenter som vi ofta läser om i nyheterna (och det finns säkert många andra som inte publiceras) är det tydligt att det finns grupper upptagna där ute med dåliga avsikter. Så se till att dina databaser är väl skyddade.