Beveiliging is een van de belangrijkste aspecten van het runnen van een database. Of u nu een ontwikkelaar of een DBA bent, als u de database beheert, is het uw verantwoordelijkheid om uw gegevens te beschermen tegen elke vorm van ongeoorloofde toegang. Het ongelukkige feit is dat veel organisaties hun gegevens niet beschermen, zoals we hebben gezien bij de nieuwe golf van MongoDB-ransomware-aanvallen in september 2017. We hadden eerder een blog gepubliceerd over het beveiligen van MongoDB-databases.
In deze blogpost bekijken we hoe u uw databases kunt beveiligen met ClusterControl. Alle hier beschreven functies zijn beschikbaar in versie 1.5.1 van ClusterControl (uitgebracht op 23 december 2017). Houd er rekening mee dat sommige functies alleen beschikbaar zijn voor bepaalde databasetypes.
Back-up versleuteling
ClusterControl 1.5.1 introduceerde een nieuwe functie genaamd back-upversleuteling. Alle gecodeerde back-ups zijn gemarkeerd met een slotpictogram ernaast:
U kunt deze functie gebruiken op alle back-upmethoden (mysqldump, xtrabackup, mongodump, pg_dump) die door ClusterControl worden ondersteund. Om codering in te schakelen, schakelt u eenvoudig de schakelaar "Encryptie inschakelen" in bij het plannen of maken van de back-up. ClusterControl genereert automatisch een sleutel om de back-up te versleutelen. Het maakt gebruik van AES-256 (CBC) coderingsalgoritme en voert de codering on-the-fly uit op de doelserver. De volgende opdracht toont een voorbeeld van hoe ClusterControl een mysqldump-back-up uitvoert:
$ 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'
U krijgt de volgende foutmelding te zien als u probeert een versleutelde back-up te decomprimeren zonder deze eerst met de juiste sleutel te ontsleutelen:
$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format
De sleutel wordt opgeslagen in de ClusterControl-database en kan worden opgehaald uit het bestand cmon_backup.metadata voor een bepaalde back-upset. Het zal door ClusterControl worden gebruikt bij het uitvoeren van herstel. Het versleutelen van back-ups wordt sterk aanbevolen, vooral als u uw back-ups offsite wilt beveiligen, zoals archiveren in de cloud.
MySQL/PostgreSQL Client-Server Encryptie
Naast het volgen van de aanbevolen beveiligingsstappen tijdens de implementatie, kunt u de betrouwbaarheid van uw databaseservice verhogen door client-server SSL-codering te gebruiken. Met ClusterControl kunt u deze bewerking uitvoeren door eenvoudig aan te wijzen en te klikken:
Vervolgens kunt u de gegenereerde sleutels en certificaten rechtstreeks ophalen van de ClusterControl-host onder
Encryptie databasereplicatie
Replicatieverkeer binnen een Galera-cluster kan met slechts één klik worden ingeschakeld. ClusterControl gebruikt een 2048-bits standaardsleutel en certificaat gegenereerd op het ClusterControl-knooppunt, dat wordt overgedragen naar alle Galera-knooppunten:
Een cluster opnieuw opstarten is noodzakelijk. ClusterControl voert een rollende herstartbewerking uit, waarbij één knooppunt tegelijk wordt gebruikt. U ziet een groen slotpictogram naast de databaseserver (Galera geeft Galera Replication-codering aan, terwijl SSL client-server-codering aangeeft) in het Hosts-raster van de overzichtspagina zodra codering is ingeschakeld:
Alle sleutels en certificaten kunnen direct worden beheerd onder Sleutelbeheer, zoals verderop beschreven.
Sleutelbeheer
Alle gegenereerde sleutels en certificaten kunnen direct vanuit de ClusterControl UI worden beheerd. Met Sleutelbeheer kunt u SSL-certificaten en sleutels beheren die op uw clusters kunnen worden geleverd:
Als het certificaat is verlopen, kunt u eenvoudig de gebruikersinterface gebruiken om een nieuw certificaat met de juiste sleutel en certificeringsinstantie (CA) te genereren, of een bestaande sleutel en certificaat importeren in de ClusterControl-host.
Beveiligingsadviseurs
Adviseurs zijn miniprogramma's die draaien in ClusterControl. Ze voeren specifieke taken uit en geven advies over het aanpakken van problemen op het gebied van prestaties, beveiliging, logbeheer, configuratie, opslagruimte en andere. Elke adviseur kan worden gepland als een cron-taak en als een zelfstandig uitvoerbaar bestand worden uitgevoerd binnen de gebruikersinterface van ClusterControl. Het kan ook worden uitgevoerd via de ClusterControl 's9s'-opdrachtregelclient.
ClusterControl maakt twee beveiligingsadviseurs mogelijk voor op MySQL gebaseerde systemen:
- Toegang vanaf elke host ('%') - Identificeert alle gebruikers die een host met jokertekens uit de mysql-systeemtabel gebruiken, en geeft u meer controle over welke hosts verbinding kunnen maken met de servers.
- Controleer het aantal accounts zonder wachtwoord - Identificeert alle gebruikers die geen wachtwoord hebben in de mysql-systeemtabel.
Voor MongoDB hebben we de volgende adviseurs:
- MongoDB-verificatie ingeschakeld - Controleer of de MongoDB-instantie wordt uitgevoerd met de verificatiemodus ingeschakeld.
- Autorisatiecontrole - Controleer of MongoDB-gebruikers zijn geautoriseerd met een te tolerante rol voor toegangscontrole.
Voor meer details over hoe ClusterControl de beveiligingscontroles uitvoert, kunt u de JavaScript-achtige broncode van de adviseur bekijken onder
Meerdere netwerkinterfaces
Door meerdere NIC's op de databasehosts te hebben, kunt u databaseverkeer scheiden van beheerverkeer. Eén netwerk wordt door de databaseknooppunten gebruikt om met elkaar te communiceren, en dit netwerk is niet blootgesteld aan enig openbaar netwerk. Het andere netwerk wordt door ClusterControl gebruikt voor beheerdoeleinden. ClusterControl kan zo'n multi-netwerk setup implementeren. Beschouw het volgende architectuurdiagram:
Om het bovenstaande databasecluster in ClusterControl te importeren, zou men het primaire IP-adres van de databasehosts specificeren. Vervolgens is het mogelijk om zowel het beheernetwerk als het datanetwerk te kiezen:
ClusterControl kan ook werken in een omgeving zonder internettoegang, waarbij de databases volledig geïsoleerd zijn van het openbare netwerk. De meeste functies werken prima. Als de ClusterControl-host is geconfigureerd met internet, kan deze ook de repository van de databaseleverancier voor de internetloze databaseservers klonen. Ga gewoon naar
Het spiegelen kan ongeveer 10 tot 20 minuten duren, afhankelijk van de internetverbinding, je ziet het nieuwe item later in de lijst. U kunt dan deze repository kiezen bij het schalen of implementeren van een nieuw cluster, zonder dat de databasehosts een internetverbinding nodig hebben (merk op dat de offline repository van het besturingssysteem ook aanwezig moet zijn).
MySQL-gebruikersbeheer
Het MySQL-privilegesysteem zorgt ervoor dat alle gebruikers alleen de bewerkingen kunnen uitvoeren die ze mogen uitvoeren. Toekenning is van cruciaal belang omdat u niet alle gebruikers volledige toegang tot uw database wilt geven, maar u moet gebruikers wel over de nodige machtigingen beschikken om query's uit te voeren en dagelijkse taken uit te voeren.
ClusterControl biedt een interactieve gebruikersinterface om de databaseschema's en privileges te beheren. Het verenigt de accounts op alle MySQL-servers in het cluster en vereenvoudigt het toekenningsproces. U kunt de databasegebruikers eenvoudig visualiseren, zodat u geen fouten maakt.
Zoals u kunt zien in de bovenstaande schermafbeelding, heeft ClusterControl onnodige privileges grijs gemaakt als u een gebruiker alleen aan een database (shopdb) wilt verlenen. "SSL vereist?" is alleen ingeschakeld als de SSL-codering van de client/server is ingeschakeld, terwijl de selectievakjes voor beheerdersrechten volledig zijn uitgeschakeld als een specifieke database is gedefinieerd. U kunt ook de gegenereerde GRANT-instructie onder aan de wizard bekijken om de instructie te zien die ClusterControl zal uitvoeren om deze gebruiker aan te maken. Deze helper ziet er vrij eenvoudig uit, maar het maken van gebruikers en het verlenen van privileges kan foutgevoelig zijn.
ClusterControl biedt ook een lijst met inactieve gebruikers voor alle databaseknooppunten in het cluster, waarbij de accounts worden weergegeven die niet zijn gebruikt sinds de laatste herstart van de server:
Dit waarschuwt de beheerder voor onnodige accounts die bestaan en die mogelijk schade kunnen toebrengen aan de server. De volgende stap is om te controleren of de accounts niet langer actief zijn en u kunt eenvoudig de optie "Geselecteerde gebruiker verwijderen" gebruiken om ze te verwijderen. Zorg ervoor dat u voldoende database-activiteit hebt om ervoor te zorgen dat de lijst die door ClusterControl wordt gegenereerd, nauwkeurig is. Hoe langer de uptime van de server, hoe beter.
Blijf altijd op de hoogte
Voor productiegebruik wordt het ten zeerste aanbevolen om de databasegerelateerde pakketten uit de repository van de leverancier te installeren. Vertrouw niet op de standaard repository van het besturingssysteem, waar de pakketten meestal verouderd zijn. Als je in een clusteromgeving zoals Galera Cluster of zelfs MySQL-replicatie draait, heb je altijd de keuze om het systeem te patchen met minimale downtime.
ClusterControl ondersteunt automatische doorlopende upgrade van de secundaire versie voor MySQL/MariaDB met een enkele klik. Ga gewoon naar
Grote versie-upgrades (bijvoorbeeld van MySQL 5.6 naar MySQL 5.7) zijn opzettelijk niet geautomatiseerd. Grote upgrades vereisen meestal de verwijdering van de bestaande pakketten, wat een riskante taak is om te automatiseren. Zorgvuldige planning en testen zijn nodig voor dit soort upgrades.
Databasebeveiliging is een belangrijk aspect van het uitvoeren van uw database in productie. Uit alle incidenten waar we vaak over lezen in het nieuws (en er zijn er waarschijnlijk nog veel meer die niet bekend zijn), is het duidelijk dat er groepen bezig zijn met slechte bedoelingen. Zorg er dus voor dat uw databases goed beveiligd zijn.