Gaidot jaunas uzÅemÅ”anas sÄkumu kursÄ
gadÄ parÄdÄ«jÄs Transparent Data Encryption (TDE).
MySQL atslÄgu piekariÅÅ”
AtslÄgu piekariÅi ir spraudÅi, kas ļauj serverim vaicÄt, izveidot un dzÄst atslÄgas lokÄlÄ failÄ (keyring_file) vai attÄlajÄ serverÄ« (piemÄram, HashiCorp Vault). AtslÄgas vienmÄr tiek saglabÄtas lokÄli, lai paÄtrinÄtu izguvi.
SpraudÅus var iedalÄ«t divÄs kategorijÄs:
- VietÄjÄ krÄtuve. PiemÄram, lokÄlais fails (mÄs to saucam par failu atslÄgu piekariÅu).
- attÄlÄ krÄtuve. PiemÄram, Vault Server (mÄs to saucam par servera atslÄgu piekariÅu).
Å Ä« atdalÄ«Å”ana ir svarÄ«ga, jo dažÄdi krÄtuves veidi darbojas nedaudz atŔķirÄ«gi ne tikai saglabÄjot un izgÅ«stot atslÄgas, bet arÄ« palaižot tÄs.
Lietojot failu krÄtuvi, startÄÅ”anas laikÄ keÅ”atmiÅÄ tiek ielÄdÄts viss krÄtuves saturs: atslÄgas ID, atslÄgas lietotÄjs, atslÄgas veids un pati atslÄga.
AizmugurÄjÄ veikala (piemÄram, Vault servera) gadÄ«jumÄ startÄÅ”anas laikÄ tiek ielÄdÄts tikai atslÄgas ID un atslÄgas lietotÄjs, tÄpÄc visu atslÄgu iegÅ«Å”ana nepalÄnina startÄÅ”anu. AtslÄgas tiek ielÄdÄtas laiski. Tas nozÄ«mÄ, ka pati atslÄga tiek ielÄdÄta no Vault tikai tad, kad tÄ patieÅ”Äm ir nepiecieÅ”ama. PÄc lejupielÄdes atslÄga tiek saglabÄta keÅ”atmiÅÄ, lai turpmÄk tai nebÅ«tu jÄpiekļūst, izmantojot TLS savienojumus ar Vault serveri. PÄc tam apsveriet, kÄda informÄcija atrodas atslÄgu krÄtuvÄ.
GalvenÄ informÄcija satur Å”Ädu informÄciju:
- atslÄgas id - atslÄgas identifikators, piemÄram:
INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
- atslÄgas veids - atslÄgas veids, pamatojoties uz izmantoto Å”ifrÄÅ”anas algoritmu, iespÄjamÄs vÄrtÄ«bas: "AES", "RSA" vai "DSA".
- atslÄgas garums - atslÄgas garums baitos, AES: 16, 24 vai 32, RSA 128, 256, 512 un DSA 128, 256 vai 384.
- lietotÄjs ir atslÄgas Ä«paÅ”nieks. Ja atslÄga ir sistÄmas atslÄga, piemÄram, galvenÄ atslÄga, Å”is lauks ir tukÅ”s. Ja atslÄga ir izveidota, izmantojot keyring_udf, tad Å”ajÄ laukÄ ir norÄdÄ«ts atslÄgas Ä«paÅ”nieks.
- pati atslÄga
AtslÄgu unikÄli identificÄ pÄris: atslÄgas_id, lietotÄjs.
AtŔķirÄ«bas ir arÄ« atslÄgu glabÄÅ”anÄ un dzÄÅ”anÄ.
Failu glabÄÅ”ana ir ÄtrÄka. VarÄtu domÄt, ka atslÄgu krÄtuve ir tikai vienreizÄja faila atslÄgas ierakstÄ«Å”ana, taÄu tÄ nav ā Å”eit notiek vairÄk. Ikreiz, kad tiek mainÄ«ta failu krÄtuve, viss saturs vispirms tiek dublÄts. PieÅemsim, ka failu sauc my_biggest_secrets, tad dublÄjums bÅ«s my_biggest_secrets.backup. PÄc tam keÅ”atmiÅa tiek mainÄ«ta (atslÄgas tiek pievienotas vai noÅemtas) un, ja viss ir veiksmÄ«gs, keÅ”atmiÅa tiek izmesta failÄ. Retos gadÄ«jumos, piemÄram, servera avÄrijas gadÄ«jumÄ, jÅ«s varat redzÄt Å”o dublÄjuma failu. DublÄjuma fails tiek dzÄsts nÄkamreiz, kad tiek ielÄdÄtas atslÄgas (parasti pÄc servera restartÄÅ”anas).
SaglabÄjot vai dzÄÅ”ot atslÄgu servera veikalÄ, veikalam ir jÄpieslÄdzas MySQL serverim ar komandÄm "nosÅ«tÄ«t atslÄgu" / "pieprasÄ«t atslÄgas dzÄÅ”anu".
AtgriezÄ«simies pie servera startÄÅ”anas Ätruma. Papildus tam, ka pati glabÄtuve ietekmÄ palaiÅ”anas Ätrumu, ir arÄ« jautÄjums par to, cik atslÄgu no glabÄtuves ir jÄiegÅ«st startÄÅ”anas laikÄ. Protams, tas ir Ä«paÅ”i svarÄ«gi serveru krÄtuvÄm. StartÄjot, serveris pÄrbauda, āākura atslÄga ir nepiecieÅ”ama Å”ifrÄtajÄm tabulÄm/tabulu vietÄm, un pieprasa atslÄgu no krÄtuves. "TÄ«rÄ" serverÄ« ar galveno atslÄgu - Å”ifrÄÅ”anai ir jÄbÅ«t vienai galvenajai atslÄgai, kas jÄizgÅ«st no krÄtuves. TomÄr var bÅ«t nepiecieÅ”ams vairÄk atslÄgu, piemÄram, ja rezerves serverÄ« tiek atjaunota rezerves kopija no primÄrÄ servera. Å Ädos gadÄ«jumos ir jÄnodroÅ”ina galvenÄ atslÄgas rotÄcija. Tas tiks sÄ«kÄk apspriests nÄkamajos rakstos, lai gan Å”eit es vÄlos atzÄ«mÄt, ka servera, kas izmanto vairÄkas galvenÄs atslÄgas, startÄÅ”ana var aizÅemt nedaudz ilgÄku laiku, it Ä«paÅ”i, ja tiek izmantots servera atslÄgu krÄtuvis.
Tagad parunÄsim nedaudz vairÄk par keyring_file. IzstrÄdÄjot atslÄgu piekariÅa_failu, man bija bažas arÄ« par to, kÄ pÄrbaudÄ«t atslÄgas gredzena_faila izmaiÅas, kamÄr serveris darbojas. ProgrammÄ 5.7 pÄrbaude tika veikta, pamatojoties uz failu statistiku, kas nebija ideÄla, un 8.0 versijÄ tÄ tika aizstÄta ar SHA256 kontrolsummu.
Pirmo reizi palaižot keyring_file, serveris aprÄÄ·ina un atceras faila statistiku un kontrolsummu, un izmaiÅas tiek lietotas tikai tad, ja tÄs atbilst. Kad fails mainÄs, kontrolsumma tiek atjauninÄta.
MÄs jau esam apskatÄ«juÅ”i daudzus jautÄjumus par atslÄgu krÄtuvÄm. TomÄr ir vÄl viena svarÄ«ga tÄma, kas bieži tiek aizmirsta vai pÄrprasta ā atslÄgu koplietoÅ”ana starp serveriem.
Ko es domÄju? Katram klastera serverim (piemÄram, Percona Server) Vault serverÄ« ir jÄbÅ«t atseviŔķai vietai, kurÄ Percona Server jÄglabÄ savas atslÄgas. Katra krÄtuvÄ saglabÄtÄ galvenÄ atslÄga savÄ ID satur Percona Server GUID. KÄpÄc tas ir svarÄ«gi? IedomÄjieties, ka jums ir tikai viens Vault serveris un visi klastera Percona serveri izmanto Å”o vienu Vault serveri. ProblÄma Ŕķiet acÄ«mredzama. Ja visi Percona serveri izmantotu galveno atslÄgu bez unikÄliem identifikatoriem, piemÄram, id = 1, id = 2 utt., tad visi klastera serveri izmantotu vienu un to paÅ”u galveno atslÄgu. Tas ir tas, ko nodroÅ”ina GUID ā atŔķirÄ«ba starp serveriem. KÄpÄc tad runÄt par atslÄgu koplietoÅ”anu starp serveriem, ja jau ir unikÄls GUID? Ir vÄl viens spraudnis - keyring_udf. Izmantojot Å”o spraudni, jÅ«su servera lietotÄjs var saglabÄt savas atslÄgas Vault serverÄ«. ProblÄma rodas, ja lietotÄjs izveido atslÄgu, piemÄram, serverÄ«1, un pÄc tam mÄÄ£ina izveidot atslÄgu ar tÄdu paÅ”u ID serverÄ«2, piemÄram:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 Š·Š½Š°ŃŠøŃ ŃŃŠæŠµŃŠ½Š¾Šµ Š·Š°Š²ŠµŃŃŠµŠ½ŠøŠµ
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1
Pagaidiet. Abi serveri izmanto vienu un to paÅ”u Vault serveri. Vai serverÄ«2 nevajadzÄtu darboties keyring_key_store funkcijai? Interesanti, ka, mÄÄ£inot darÄ«t to paÅ”u tajÄ paÅ”Ä serverÄ«, jÅ«s saÅemsit kļūdu:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
select keyring_key_store('ROB_1','AES',"543210987654321");
0
TieÅ”i tÄ, ROB_1 jau pastÄv.
Vispirms apspriedÄ«sim otro piemÄru. KÄ jau teicÄm iepriekÅ”, keyring_vault vai jebkurÅ” cits glabÄtuves spraudnis (keyring) saglabÄ atmiÅÄ visus atslÄgu ID. TÄtad, pÄc jaunas atslÄgas izveidoÅ”anas ROB_1 tiek pievienots serverim1, un papildus Ŕīs atslÄgas nosÅ«tÄ«Å”anai uz Vault, atslÄga tiek pievienota arÄ« keÅ”atmiÅai. Tagad, mÄÄ£inot pievienot to paÅ”u atslÄgu otrreiz, keyring_vault pÄrbauda, āāvai atslÄga pastÄv keÅ”atmiÅÄ, un rada kļūdu.
PirmajÄ gadÄ«jumÄ situÄcija ir atŔķirÄ«ga. Server1 un serverim2 ir atseviŔķas keÅ”atmiÅas. PÄc ROB_1 pievienoÅ”anas atslÄgu keÅ”atmiÅai serverÄ«1 un Vault serverÄ«, servera2 atslÄgas keÅ”atmiÅa nav sinhronizÄta. Server2 keÅ”atmiÅÄ nav ROB_1 atslÄgas. TÄdÄjÄdi atslÄga ROB_1 tiek ierakstÄ«ta keyring_key_store un Vault serverÄ«, kas faktiski pÄrraksta (!) iepriekÅ”Äjo vÄrtÄ«bu. Tagad Vault servera atslÄga ROB_1 ir 543210987654321. Interesanti, ka Vault serveris nebloÄ·Ä Å”Ädas darbÄ«bas un viegli pÄrraksta veco vÄrtÄ«bu.
Tagad mÄs redzam, kÄpÄc segregÄcija pÄc servera pakalpojumÄ Vault var bÅ«t svarÄ«ga, ja izmantojat keyring_udf un vÄlaties saglabÄt atslÄgas pakalpojumÄ Vault. KÄ nodroÅ”inÄt Å”Ädu atdalÄ«Å”anu Vault serverÄ«?
Ir divi veidi, kÄ sadalÄ«t Vault. Katram serverim varat izveidot dažÄdus stiprinÄjuma punktus vai izmantot dažÄdus ceļus vienÄ un tajÄ paÅ”Ä stiprinÄjuma punktÄ. LabÄkais veids, kÄ to parÄdÄ«t, ir ar piemÄriem. Vispirms apskatÄ«sim atseviŔķus stiprinÄjuma punktus:
--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = server1_mount
token = (...)
vault_ca = (...)
--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = sever2_mount
token = (...)
vault_ca = (...)
Å eit jÅ«s varat redzÄt, ka serveris1 un serveris2 izmanto dažÄdus stiprinÄjuma punktus. Izmantojot ceļu atdalÄ«Å”anu, konfigurÄcija izskatÄ«sies Å”Ädi:
--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/server1
token = (...)
vault_ca = (...)
--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/sever2
token = (...)
vault_ca = (...)
Å ajÄ gadÄ«jumÄ abi serveri izmanto vienu un to paÅ”u pievienoÅ”anas punktu "mount_point", bet atŔķirÄ«gus ceļus. Kad izveidojat pirmo noslÄpumu serverÄ«1, izmantojot Å”o ceļu, Vault serveris automÄtiski izveido direktoriju "server1". Server2 viss ir vienÄds. DzÄÅ”ot pÄdÄjo noslÄpumu mount_point/server1 vai mount_point/server2, Vault serveris dzÄÅ” arÄ« Å”os direktorijus. Ja izmantojat sadalÄ«tos ceļus, jums ir jÄizveido tikai viens stiprinÄjuma punkts un jÄmaina konfigurÄcijas faili, lai serveri izmantotu atseviŔķus ceļus. MontÄžas punktu var izveidot ar HTTP pieprasÄ«jumu. Ar CURL to var izdarÄ«t Å”Ädi:
curl -L -H "X-Vault-Token: TOKEN" ācacert VAULT_CA
--data '{"type":"generic"}' --request POST VAULT_URL/v1/sys/mounts/SECRET_MOUNT_POINT
Visi lauki (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) atbilst konfigurÄcijas faila parametriem. Protams, varat izmantot Vault utilÄ«tas, lai veiktu to paÅ”u. Bet montÄžas punkta izveidi ir vieglÄk automatizÄt. Ceru, ka Ŕī informÄcija jums noderÄs un tiekamies nÄkamajos Ŕīs sÄrijas rakstos.
LasÄ«t vairÄk:
Avots: www.habr.com