sql >> Database teknologi >  >> RDS >> PostgreSQL

Automatisering af sikkerhedsrevisioner til PostgreSQL

Sikkerhedsrevision er et must i alle virksomheder for at beskytte data og undgå eventuelle sikkerhedsbrud, men det er også en tidskrævende opgave, da du skal tjekke en masse ting med jævne mellemrum. Resultatet er, at virksomheder generelt følger en sikkerhedstjekliste og konfigurerer alt til at dække den, men de har ikke sikkerhedsrevisioner. Du kan sige, "Hvis alt fungerer fint, så behold det bare som det er". Nå, faktisk kan du ikke stole på, at de sikkerhedspolitikker, du konfigurerer nu, vil være nyttige i fremtiden, og at intet vil ændre sig for at påvirke dem. Løsningen til dette kunne være at automatisere disse sikkerhedsrevisioner eller have en måde at gøre det med jævne mellemrum på en brugervenlig måde.

I denne blog vil vi se, hvordan man udfører forskellige sikkerhedsrevisioner for PostgreSQL og automatiserer dem ved hjælp af ClusterControl.

Hvad skal du bruge for at lave en sikkerhedsrevision på PostgreSQL?

Lad os se på nogle af de vigtigste ting at revidere af sikkerhedsformål i en PostgreSQL-database:

  • Kommunikation:Kommunikationen i alle dine systemer skal være krypteret, og du skal begrænse trafik til det, der kun kommer fra kendte kilder for at reducere risikoen for uautoriseret adgang til dine data.

  • Databaseadgang:Du skal begrænse både fysisk og fjernadgang til dine databaser. Fjernadgang kan begrænses ved kun at tillade forbindelser fra kendte kilder for hver bruger, eller endda ved at bruge SSH- eller VPN-forbindelser.

  • Brugerkonti:Der er mange måder at forbedre sikkerheden for dine brugerkonti i PostgreSQL på, såsom at fjerne inaktive brugere , kun tildeling af nødvendige privilegier osv.

  • Installation og konfiguration:Der er nogle ændringer, der skal foretages for at sikre din PostgreSQL-installation, f.eks. kun at installere det nødvendige pakker, ændring af standard legitimationsoplysninger og konfiguration osv.

  • Revision og logning:Logføringsudsagn kan hjælpe dig med at opdage sikkerhedsproblemer eller undgå dem, hvis du fanger dem i tide . Du kan bruge standard PostgreSQL-logningsfaciliteten, men du kan også bruge en udvidelse som pgAudit for at få mere detaljeret logning.

  • Opgraderinger:Hold dit OS og din database så opdateret som muligt ved at anvende patches og sikkerhedsopgraderinger.

  • Forespørgselsovervågning:Du bør tjekke trafikken for at opdage unormale forespørgsler eller DoS-angreb.

  • Overvågning:For at kende status for dine systemer skal du have et godt overvågningssystem på plads. Dette kan være nyttigt for at finde sikkerhedsproblemer eller endda for at undgå dem.

Nu ved vi, hvad vi skal kontrollere, lad os se på en mulighed for at automatisere disse opgaver - ClusterControl.

Sikkerhedsrevision for PostgreSQL med ClusterControl

For PostgreSQL Security Audits er ClusterControl en god mulighed, da det er et administrations- og overvågningssystem, der hjælper dig med at implementere, administrere, overvåge og skalere dine databaser fra en brugervenlig grænseflade. Det har understøttelse af de bedste open source-databaseteknologier, og du kan automatisere mange af de databaseopgaver, du skal udføre regelmæssigt, såsom tilføjelse og skalering af nye noder, kørsel af sikkerhedskopier og gendannelser og mere.

Lad os se på, hvordan du kan dække de tidligere nævnte sikkerhedstjek ved hjælp af ClusterControl.

Kommunikation

I sikkerhedsafsnittet (ClusterControl -> Vælg Cluster -> fanen Sikkerhed), kan du aktivere SSL-kryptering for at kryptere forbindelserne mellem klienterne og serveren.

 

Adgang fra ClusterControl til noderne er også sikret ved hjælp af adgangskodefri SSH med et nøglepar.

Databasedgang

Du kan begrænse adgangen til din PostgreSQL-database ved at ændre pg_hba.conf-konfigurationsfilen fra ClusterControl-brugergrænsefladen (ClusterControl -> Vælg Cluster -> Administrer -> Konfigurationer). På denne måde kan du angive følgende muligheder:

  • Type:De mest brugte muligheder her er "lokal" for en Unix-domæne-socket og "vært" for en almindelig eller SSL-krypteret TCP/IP-socket, men der er andre muligheder som "hostssl" og mere.

  • Database:Det kan være "alle", "sameuser", "samerole", "replikering", en databasenavn eller en kommasepareret liste over databasenavne.

  • Bruger:Det kan være "alle", et brugernavn, et gruppenavn foran med "+", eller en kommasepareret liste heraf.

  • Adresse:Værtsnavn eller en IP-adresse og en CIDR-maske.

  • Metode:De mest brugte her er "trust", "reject", "md5", "ident" , og "peer", men der er flere muligheder som "scram-sha-256" eller "ldap".

Eksempel:

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

Brugerkonti

Du kan administrere dine databasebrugere fra ClusterControl UI (ClusterControl -> Vælg Cluster -> Administrer -> Brugerstyring). Du kan oprette nye brugere eller redigere og slette eksisterende og tildele dem de tilsvarende rettigheder.

Installation og konfiguration

Du kan implementere en ny PostgreSQL-klynge eller importere en eksisterende. Med din PostgreSQL-klynge tilføjet til ClusterControl, kan du administrere den aktuelle konfiguration (ClusterControl -> Vælg Cluster -> Administrer -> Konfiguration), eller endda tilføje nye noder til klyngen.

Under implementeringen kan du ændre databasekonfigurationen som databaseport eller legitimationsoplysninger, og derefter installerer ClusterControl kun de nødvendige pakker for at implementere din nye klynge.

Revision og logning

Du kan kontrollere standard PostgreSQL-logning i ClusterControl-brugergrænsefladen (ClusterControl -> Vælg Cluster -> Logs -> System Logs) eller endda aktivere pgAudit-udvidelsen fra ClusterControl og kontrollere revisionslogningen samme sted .

Opgraderinger

I tilfælde af mindre opgraderinger kan du bruge ClusterControl til denne opgave. Du kan få adgang til UI og køre opgraderingen (ClusterControl -> Vælg Cluster -> Administrer -> Opgraderinger), eller bruge "Package Upgrades" ClusterControl Operational Report for at modtage de tilgængelige pakker via e-mail eller kontrollere dem i ClusterControl UI.

Forespørgselsovervågning

I sektionen for forespørgselsovervågning kan du finde de mest populære forespørgsler, kørende forespørgsler, forespørgselsudlignere og forespørgselsstatistik for at overvåge din databasetrafik.

Overvågning

ClusterControl giver dig mulighed for at overvåge dine servere i realtid med et foruddefineret sæt dashboards for at analysere nogle af de mest almindelige metrics.

ClusterControl giver dig mulighed for at tilpasse de tilgængelige grafer i klyngen, og du kan aktivere den agentbaserede overvågning for at generere mere detaljerede dashboards.

Du kan også oprette advarsler, som informerer dig om begivenheder i din klynge, eller integreres med forskellige tjenester såsom PagerDuty eller Slack.

Driftsrapporter

Hvis du ikke vil have adgang til ClusterControl UI for at kontrollere status for dine klynger, kan du oprette eller planlægge driftsrapporter.

Driftsrapporterne giver dig information om din databasestatus, som du kan bruge til at revidere dit miljø. Disse rapporter består af forskellige kontroller og omhandler forskellige daglige DBA-opgaver. Ideen bag ClusterControl Operational Reporting er at samle alle de mest relevante data i et enkelt dokument, der hurtigt kan analyseres for at få en klar forståelse af status for databaserne og deres processer.

Du kan planlægge rapporter som "Daglig systemrapport", "Pakkeopgraderingsrapport", "Skemaændringsrapport", "Sikkerhedskopier" og "Tilgængelighed", og du kan modtage dem i mere end én e-mail adresse.

Brug af ClusterControl CLI til automatisering af sikkerhedsrevisioner

ClusterControl CLI, også kendt som s9s, er et kommandolinjeværktøj introduceret i ClusterControl version 1.4.1 til at interagere, kontrollere og administrere databaseklynger ved hjælp af ClusterControl-systemet. ClusterControl CLI åbner en ny dør til klyngeautomatisering, hvor du nemt kan integrere den med eksisterende installationsautomatiseringsværktøjer som Ansible, Puppet, Chef osv. Kommandolinjeværktøjet påkaldes ved at udføre en binær kaldet s9s, der er tilføjet som standard i ClusterControl-installationen.

Lad os se på nogle eksempler på dette kraftfulde værktøj. Til dette vil vi se, hvordan du udfører de nævnte sikkerhedsrevisionsopgaver ved hjælp af ClusterControl CLI.

Kommunikation

Du kan aktivere SSL-kryptering i din klynge ved at bruge følgende kommando:

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

Hvor ID er klynge-id-nummeret:Du kan overvåge fremskridtene for denne opgave (og resten af ​​opgaverne) ved at angive jobprocessen.

$ s9s job --list

Databasedgang

Du kan kontrollere databasekonfigurationen for at validere den tilladte adgang:

$ 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'
...

Hvor ID er klynge-id-nummeret, IP_ADDRESS og PORT er din databases IP-adresse og port.

Brugerkonti

Du kan angive de brugerkonti, der er i klyngen:

$ 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

Hvor ID er Cluster ID-nummeret.

Installation og konfiguration

Du kan oprette nye klynger, tilføje nye databasenoder eller endda ændre de eksisterende konfigurationer i din klynge:

$ 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

Hvor IP_ADDRESS er din databases IP-adresse, og du skal erstatte DBUSER, DBPASSWORD og OSUSER for henholdsvis dine databaselegitimationsoplysninger og operativsystembruger.

Revision og logning

Du kan aktivere revisionslogning fra kommandolinjen ved at bruge følgende kommando:

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

Hvor ID er klynge-id-nummeret:så kan du kontrollere logfilerne med revisionslogningsoplysningerne.

Opgraderinger

Du kan oprette rapporter for at se, om du skal opgradere dine databaser eller operativsystempakker.

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

Hvor ID er Cluster ID-nummeret:Baseret på denne rapport kan du planlægge vedligeholdelsesvinduer til at køre opgraderingerne, og det kan også gøres fra ClusterControl.

Forespørgselsovervågning

Du kan kontrollere processen, der kører på dine noder og filtrere dem efter forespørgslen, kilden og mere.

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


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

Overvågning

Du har forskellige muligheder for at overvåge dine systemer herfra. Du kan tjekke status for alle klyngerne, tjekke en af ​​dem eller endda tjekke alarmerne i realtid.

$  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
...

Driftsrapporter

Du kan oprette driftsrapporter og kontrollere dem fra kommandolinjen. Den samme rapport er tilgængelig i ClusterControl UI.

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

Dette var blot nogle grundlæggende eksempler for at se den slags ting, du kan udføre ved hjælp af ClusterControl CLI. For mere information om værktøjet, kan du henvise til den officielle dokumentation.

Konklusion

Der er altid en risiko for at blive hacket, men du kan lukke sårbarhedsgabet på din PostgreSQL-klynge ved at tjekke de ovennævnte punkter. For at gøre denne opgave meget nemmere kan du bruge ClusterControl UI eller endda automatisere kontrollerne med ClusterControl CLI. Det kan også integreres med eksterne værktøjer som Ansible, Puppet og mere.


  1. Har du problemer med MS Access Crashing? Prøv disse løsninger først

  2. MySQL:ALTER IGNORE TABLE TILFØJ UNIK, hvad vil blive afkortet?

  3. PostgreSQL jokertegn LIKE for enhver af en liste med ord

  4. Definer en variabel i select, og brug den inden for samme select