sql >> Database >  >> RDS >> PostgreSQL

Beveiligingsaudits automatiseren voor PostgreSQL

Veiligheidsaudits zijn een must in alle bedrijven om gegevens te beschermen en mogelijke inbreuken op de beveiliging te voorkomen, maar het is ook een tijdrovende taak omdat u regelmatig veel dingen moet controleren. Het resultaat is dat bedrijven over het algemeen een beveiligingschecklist volgen en alles configureren om deze te dekken, maar ze hebben geen beveiligingsaudits. Je zou kunnen zeggen:"Als alles goed werkt, laat het dan zoals het is". Nou, eigenlijk kun je er niet op vertrouwen dat het beveiligingsbeleid dat je nu configureert in de toekomst nuttig zal zijn en dat er niets zal veranderen om ze te beïnvloeden. De oplossing hiervoor zou kunnen zijn deze beveiligingsaudits te automatiseren of een manier te vinden om dit periodiek op een gebruiksvriendelijke manier te doen.

In deze blog zullen we zien hoe we verschillende beveiligingsaudits voor PostgreSQL kunnen uitvoeren en automatiseren met ClusterControl.

Wat heb je nodig om een ​​beveiligingsaudit uit te voeren op PostgreSQL?

Laten we eens kijken naar enkele van de belangrijkste dingen om te controleren voor beveiligingsdoeleinden in een PostgreSQL-database:

  • Communicatie:de communicatie in al uw systemen moet versleuteld zijn en u moet verkeer beperken tot dat wat alleen komt van bekende bronnen om het risico van ongeautoriseerde toegang tot uw gegevens te verminderen.

  • Databasetoegang:u moet zowel fysieke als externe toegang tot uw databases beperken. Externe toegang kan worden beperkt door alleen verbindingen van bekende bronnen toe te staan ​​voor elke gebruiker, of zelfs door SSH- of VPN-verbindingen te gebruiken.

  • Gebruikersaccounts:er zijn veel manieren om de beveiliging van uw gebruikersaccounts in PostgreSQL te verbeteren, zoals het verwijderen van inactieve gebruikers , alleen noodzakelijke rechten toekennen, enz.

  • Installatie en configuratie:er zijn enkele wijzigingen die u moet doen om uw PostgreSQL-installatie te beveiligen, zoals het installeren van alleen de noodzakelijke pakketten, het wijzigen van de standaardgegevens en configuratie, enz.

  • Auditing en logboekregistratie:logboekinstructies kunnen u helpen beveiligingsproblemen op te sporen of te vermijden als u ze op tijd opmerkt . U kunt de standaard PostgreSQL-logboekfunctie gebruiken, maar u kunt ook een extensie zoals pgAudit gebruiken voor meer gedetailleerde logboekregistratie.

  • Upgrades:houd uw besturingssysteem en database zo up-to-date mogelijk door patches en beveiligingsupgrades toe te passen.

  • Query Monitor:u moet het verkeer controleren om abnormale zoekopdrachten of DoS-aanvallen te detecteren.

  • Monitoring:om de status van uw systemen te kennen, moet u een goed monitoringsysteem hebben. Dit kan handig zijn om beveiligingsproblemen op te sporen of zelfs te vermijden.

Nu we weten wat we moeten controleren, gaan we kijken naar een optie om deze taken te automatiseren - ClusterControl.

Beveiligingsaudits voor PostgreSQL met ClusterControl

Voor PostgreSQL-beveiligingsaudits is ClusterControl een goede optie, omdat het een beheer- en controlesysteem is dat u helpt bij het implementeren, beheren, bewaken en schalen van uw databases vanuit een gebruiksvriendelijke interface. Het biedt ondersteuning voor de beste open-source databasetechnologieën en u kunt veel van de databasetaken automatiseren die u regelmatig moet uitvoeren, zoals het toevoegen en schalen van nieuwe knooppunten, het uitvoeren van back-ups en herstelbewerkingen, en meer.

Laten we eens kijken hoe u de eerder genoemde beveiligingscontroles kunt dekken met ClusterControl.

Communicatie

In het beveiligingsgedeelte (ClusterControl -> Cluster selecteren -> tabblad Beveiliging) kunt u SSL-codering inschakelen om de verbindingen tussen de clients en de server te coderen.

 

Toegang van ClusterControl tot de nodes is ook beveiligd met SSH zonder wachtwoord met een sleutelpaar.

Databasetoegang

U kunt de toegang tot uw PostgreSQL-database beperken door het configuratiebestand pg_hba.conf te wijzigen vanuit de gebruikersinterface van ClusterControl (ClusterControl -> Cluster selecteren -> Beheren -> Configuraties). Op deze manier kunt u de volgende opties specificeren:

  • Type:De meest gebruikte opties hier zijn "local" voor een Unix-domein socket en "host" voor een gewone of SSL-gecodeerde TCP/IP-socket, maar er zijn andere opties zoals "hostssl", en meer.

  • Database:het kan "all", "sameuser", "samerole", "replication", a databasenaam of een door komma's gescheiden lijst met databasenamen.

  • Gebruiker:het kan "all" zijn, een gebruikersnaam, een groepsnaam voorafgegaan door "+", of een door komma's gescheiden lijst daarvan.

  • Adres:Hostnaam, of een IP-adres en een CIDR-masker.

  • Methode:De meest gebruikte hier zijn "trust", "reject", "md5", "ident" , en "peer", maar er zijn meer opties zoals "scram-sha-256" of "ldap".

Voorbeeld:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
  host  all             admindb         10.10.10.121/32         md5

Gebruikersaccounts

U kunt uw databasegebruikers beheren vanuit de ClusterControl-gebruikersinterface (ClusterControl -> Cluster selecteren -> Beheren -> Gebruikersbeheer). U kunt nieuwe gebruikers maken of bestaande bewerken en verwijderen en de bijbehorende rechten aan hen toewijzen.

Installatie en configuratie

Je kunt een nieuw PostgreSQL-cluster implementeren of een bestaande importeren. Met uw PostgreSQL-cluster toegevoegd aan ClusterControl, kunt u de huidige configuratie beheren (ClusterControl -> Cluster selecteren -> Beheren -> Configuratie), of zelfs nieuwe knooppunten aan het cluster toevoegen.

Tijdens de implementatie kunt u de databaseconfiguratie wijzigen, zoals databasepoort of referenties, en dan zal ClusterControl alleen de benodigde pakketten installeren om uw nieuwe cluster te implementeren.

Auditing en logboekregistratie

U kunt de standaard PostgreSQL-logboekregistratie controleren in de gebruikersinterface van ClusterControl (ClusterControl -> Cluster selecteren -> Logboeken -> Systeemlogboeken) of zelfs de pgAudit-extensie van ClusterControl inschakelen en de auditregistratie op dezelfde plaats controleren .

Upgrades

In het geval van kleine upgrades kunt u ClusterControl gebruiken voor deze taak. U kunt toegang krijgen tot de gebruikersinterface en de upgrade uitvoeren (ClusterControl -> Cluster selecteren -> Beheer -> Upgrades), of het ClusterControl Operational Report "Package Upgrades" gebruiken om de beschikbare pakketten via e-mail te ontvangen of ze in de ClusterControl UI te controleren.

Query-monitor

In de sectie Querymonitor kunt u de meest voorkomende zoekopdrachten, lopende zoekopdrachten, uitbijters van zoekopdrachten en zoekopdrachtstatistieken vinden om uw databaseverkeer te controleren.

Bewaking

Met ClusterControl kunt u uw servers in realtime bewaken met een vooraf gedefinieerde set dashboards om enkele van de meest voorkomende statistieken te analyseren.

ClusterControl stelt u in staat om de grafieken die beschikbaar zijn in het cluster aan te passen, en u kunt de op agenten gebaseerde monitoring inschakelen om meer gedetailleerde dashboards te genereren.

U kunt ook waarschuwingen maken, die u informeren over gebeurtenissen in uw cluster, of integreren met verschillende services zoals PagerDuty of Slack.

Operationele rapporten

Als u geen toegang wilt tot de gebruikersinterface van ClusterControl om de status van uw clusters te controleren, kunt u operationele rapporten maken of plannen.

De operationele rapporten geven u informatie over uw databasestatus, die u kunt gebruiken om uw omgeving te controleren. Deze rapportages bestaan ​​uit verschillende controles en behandelen verschillende dagelijkse DBA-taken. Het idee achter ClusterControl Operational Reporting is om alle meest relevante gegevens in één document te plaatsen dat snel kan worden geanalyseerd om een ​​duidelijk inzicht te krijgen in de status van de databases en hun processen.

U kunt rapporten plannen zoals "Dagelijks systeemrapport", "Pakketupgraderapport", "Schemawijzigingsrapport", "Back-ups" en "Beschikbaarheid", en u kunt ze in meer dan één e-mail ontvangen adres.

ClusterControl CLI gebruiken voor het automatiseren van beveiligingsaudits

ClusterControl CLI, ook bekend als s9s, is een opdrachtregelprogramma dat is geïntroduceerd in ClusterControl versie 1.4.1 voor interactie, controle en beheer van databaseclusters met behulp van het ClusterControl-systeem. ClusterControl CLI opent een nieuwe deur voor clusterautomatisering, waar u het eenvoudig kunt integreren met bestaande automatiseringstools voor implementatie, zoals Ansible, Puppet, Chef, enz. Het opdrachtregelprogramma wordt aangeroepen door een binair bestand met de naam s9s uit te voeren dat standaard is toegevoegd aan de ClusterControl-installatie.

Laten we eens kijken naar enkele voorbeelden van deze krachtige tool. Hiervoor zullen we zien hoe de genoemde Security Audit-taken kunnen worden uitgevoerd met behulp van de ClusterControl CLI.

Communicatie

U kunt SSL-codering in uw cluster inschakelen met de volgende opdracht:

$ s9s cluster --enable-ssl --cluster-id=ID

Waar ID het Cluster-ID-nummer is:u kunt de voortgang van deze taak (en de rest van de taken) volgen door het taakproces op te sommen.

$ s9s job --list

Databasetoegang

U kunt de databaseconfiguratie controleren om de toegestane toegang te valideren:

$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config

GROUP OPTION NAME                  VALUE
-     data_directory               '/var/lib/pgsql/13/data'
-     hba_file                     '/var/lib/pgsql/13/data/pg_hba.conf'
-     ident_file                   '/var/lib/pgsql/13/data/pg_ident.conf'
-     listen_addresses             '*'
-     port                         5432
-     max_connections              100
-     ssl                          on
-     ssl_ca_file                  '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
-     ssl_cert_file                '/etc/ssl/postgresql_single/cluster_47/server.crt'
...

Waar ID het Cluster-ID-nummer is, zijn IP_ADDRESS en PORT het IP-adres en de poort van uw database.

Gebruikersaccounts

U kunt de gebruikersaccounts in het cluster weergeven:

$ s9s accounts --list --cluster-id=ID --long


NAME                            P CONN MAXC GRANTS
's9spostgresqlchk'@'%'          N    0    0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%'                  N    1    0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%'     N    0    0 INHERIT
...
'cmon_replication'@'%'          N    2    0 LOGIN,INHERIT,REPLICATION
'admindb'@'%'                   N    3    0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB

Waar ID het Cluster-ID-nummer is.

Installatie en configuratie

U kunt nieuwe clusters maken, nieuwe databaseknooppunten toevoegen of zelfs de bestaande configuraties in uw cluster wijzigen:

$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log

Waarbij IP_ADDRESS het IP-adres van uw database is, en u DBUSER, DBPASSWORD en OSUSER moet vervangen voor respectievelijk uw databasereferenties en besturingssysteemgebruiker.

Auditing en logboekregistratie

U kunt controlelogboekregistratie inschakelen vanaf de opdrachtregel met de volgende opdracht:

$ s9s cluster --setup-audit-logging --cluster-id=ID

Waar ID het Cluster-ID-nummer is:dan kunt u de logboeken controleren met de controlelogboekinformatie.

Upgrades

U kunt rapporten maken om te zien of u uw databases of besturingssysteempakketten moet upgraden.

$ s9s report --cluster-id=ID --type=upgrade --create

Waar ID het Cluster-ID-nummer is:op basis van dit rapport kunt u onderhoudsvensters plannen om de upgrades uit te voeren, en dit kan ook worden gedaan vanuit ClusterControl.

Query-monitor

Je kunt het proces op je nodes controleren en ze filteren op de query, bron en meer.

$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'


$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'

Bewaking

Je hebt verschillende opties om je systemen vanaf hier te bewaken. U kunt de status van alle clusters controleren, een ervan controleren of zelfs de alarmen in realtime controleren.

$  s9s cluster --list --long



ID STATE   TYPE              OWNER  GROUP  NAME         COMMENT
 1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
 2 FAILURE galera            system admins PXC57        Cluster failure.
 3 STARTED replication       system admins MariaDB104   All nodes are operational.
 4 STARTED mongodb           system admins MongoDB42    All nodes are operational.
Total: 4


$ s9s alarm --cluster-name="PostgreSQL Cluster" --list

ID  CID SEVERITY COMPONENT TYPE              HOSTNAME        TITLE
263   1 CRITICAL Network   HostSshFailed     haproxy1    SSH failed
264   1 CRITICAL Network   HostSshFailed     haproxy2    SSH failed
265   1 CRITICAL Network   HostSshFailed     postgresql2 SSH failed
266   1 CRITICAL Network   HostSshFailed     postgresql3 SSH failed
...

Operatierapporten

U kunt operationele rapporten maken en deze controleren vanaf de opdrachtregel. Hetzelfde rapport is beschikbaar in de gebruikersinterface van ClusterControl.

$ s9s report --cluster-id=ID --type=default --create

Dit waren slechts enkele basisvoorbeelden om te zien wat voor soort dingen u kunt doen met de ClusterControl CLI. Voor meer informatie over de tool kun je de officiële documentatie raadplegen.

Conclusie

Er is altijd een risico om gehackt te worden, maar u kunt de kwetsbaarheidskloof op uw PostgreSQL-cluster dichten door de bovengenoemde punten te controleren. Om deze taak veel gemakkelijker te maken, kunt u de ClusterControl UI gebruiken of zelfs de controles automatiseren met de ClusterControl CLI. Het kan ook worden geïntegreerd met externe tools zoals Ansible, Puppet en meer.


  1. Hoe de directory / hiërarchie / boomstructuur in de database op te slaan?

  2. Hoe een geparametriseerde Oracle Insert-query te schrijven?

  3. Hoe zorgen dat gegevens niet worden gesorteerd?

  4. Een kolomtype wijzigen in langere strings in rails