Encryption fil-MySQL: Keystore

B'antiċipazzjoni tal-bidu ta' reġistrazzjoni ġdida għall-kors "Database" Ħejjejna traduzzjoni ta’ artiklu utli għalik.

Encryption fil-MySQL: Keystore

Transparent Data Encryption (TDE) deher fi Percona Server għall-MySQL u MySQL għal żmien pjuttost twil. Imma qatt ħsibt dwar kif taħdem taħt il-barnuża u x'impatt jista' jkollu TDE fuq is-server tiegħek? F'din is-sensiela ta' artikli ser inħarsu lejn kif TDE jaħdem internament. Nibdew bil-ħażna taċ-ċavetta, peress li dan huwa meħtieġ biex taħdem kwalunkwe encryption. Imbagħad nagħtu ħarsa aktar mill-qrib lejn kif jaħdem l-encryption f'Percona Server għal MySQL/MySQL u x'karatteristiċi addizzjonali għandu Percona Server għal MySQL.

MySQL Keyring

Keyring huma plugins li jippermettu lis-server li jfittex, joħloq, u jħassar ċwievet f'fajl lokali (keyring_file) jew fuq server remot (bħal HashiCorp Vault). Iċ-ċwievet dejjem jinżammu fil-cache lokalment biex jitħaffef l-irkupru tagħhom.

Il-plugins jistgħu jinqasmu f'żewġ kategoriji:

  • Ħażna lokali. Per eżempju, fajl lokali (din insejħulha keyring ibbażat fuq fajl).
  • Ħażna mill-bogħod. Per eżempju, Vault Server (aħna nsejħu dan keyring ibbażat fuq server).

Din is-separazzjoni hija importanti minħabba li tipi differenti ta 'ħażna jġibu ruħhom kemmxejn differenti, mhux biss meta jaħżnu u jġibu ċwievet, iżda wkoll meta jħaddmuhom.

Meta tuża ħażna ta 'fajls, mal-istartjar, il-kontenut kollu tal-ħażna jitgħabba fil-cache: id-ċavetta, l-utent ewlieni, it-tip taċ-ċavetta, u ċ-ċavetta nnifisha.

Fil-każ ta 'maħżen fuq in-naħa tas-server (bħal Vault Server), l-id taċ-ċavetta u l-utent taċ-ċavetta biss huma mgħobbija fl-istartjar, u għalhekk li tikseb iċ-ċwievet kollha ma tnaqqasx il-veloċità tal-istartjar. Iċ-ċwievet huma mgħobbija għażżien. Jiġifieri, iċ-ċavetta nnifisha titgħabba minn Vault biss meta tkun fil-fatt meħtieġa. Ladarba titniżżel, iċ-ċavetta tiġi miżmuma fil-cache fil-memorja sabiex ma jkunx hemm bżonn li tiġi aċċessata permezz ta' konnessjonijiet TLS mas-Server tal-Vault fil-futur. Sussegwentement, ejja nħarsu lejn liema informazzjoni hija preżenti fil-maħżen taċ-ċavetta.

L-informazzjoni ewlenija fiha dan li ġej:

  • id-ċavetta — identifikatur ewlieni, pereżempju:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • tip ewlieni — tip ta’ ċavetta bbażat fuq l-algoritmu ta’ kriptaġġ użat, valuri possibbli: “AES”, “RSA” jew “DSA”.
  • tul taċ-ċavetta — tul taċ-ċavetta f'bytes, AES: 16, 24 jew 32, RSA 128, 256, 512 u DSA 128, 256 jew 384.
  • utent - sid taċ-ċavetta. Jekk iċ-ċavetta hija sistema, pereżempju, Master Key, allura dan il-qasam huwa vojt. Jekk ċavetta tinħoloq billi tuża keyring_udf, allura dan il-qasam jidentifika s-sid taċ-ċavetta.
  • iċ-ċavetta nnifisha

Iċ-ċavetta hija identifikata unikament mill-par: key_id, user.

Hemm ukoll differenzi fil-ħażna u t-tħassir taċ-ċwievet.

Il-ħażna tal-fajls hija aktar mgħaġġla. Għandek mnejn taħseb li maħżen taċ-ċavetta sempliċement qed jikteb iċ-ċavetta għal fajl darba, imma le, hemm aktar għaddej hawn. Kull meta ssir modifika tal-ħażna tal-fajls, l-ewwel tinħoloq kopja ta' backup tal-kontenut kollu. Ejja ngħidu li l-fajl jissejjaħ my_biggest_secrets, allura l-kopja tal-backup tkun my_biggest_secrets.backup. Sussegwentement, il-cache tinbidel (iċ-ċwievet jiġu miżjuda jew imħassra) u, jekk kollox jirnexxi, il-cache jiġi reset għal fajl. F'każijiet rari, bħal ħsara fis-server, tista' tara dan il-fajl backup. Il-fajl tal-backup jitħassar il-ħin li jmiss iċ-ċwievet jitgħabbew (ġeneralment wara li s-server jerġa' jinbeda).

Meta tissejvja jew tħassar ċavetta f'ħażna ta 'server, il-ħażna għandha tikkonnettja mas-server MySQL bil-kmandi "ibgħat iċ-ċavetta" / "itlob it-tħassir taċ-ċavetta".

Ejja nerġgħu lura għall-veloċità tal-istartjar tas-server. Minbarra l-fatt li l-veloċità tat-tnedija hija affettwata mill-kaxxa-forti innifsu, hemm ukoll il-kwistjoni ta 'kemm ċwievet mill-kaxxa-forti jeħtieġ li jiġu rkuprati fl-istartjar. Naturalment, dan huwa speċjalment importanti għall-ħażna tas-server. Fl-istartjar, is-server jiċċekkja liema ċavetta hija meħtieġa għal tabelli/tablespaces encrypted u jitlob iċ-ċavetta mill-ħażna. Fuq server "nadif" b'encryption Master Key, għandu jkun hemm Master Key waħda, li trid tiġi rkuprata mill-ħażna. Madankollu, jista 'jkun meħtieġ numru akbar ta' ċwievet, pereżempju, meta s-server tal-backup ikun qed jirrestawra backup mis-server primarju. F'każijiet bħal dawn, għandha tiġi pprovduta rotazzjoni tal-Master Key. Dan se jkun kopert f'aktar dettall f'artikli futuri, għalkemm hawnhekk nixtieq ninnota li server li juża diversi Master Keys jista 'jieħu ftit aktar żmien biex jibda, speċjalment meta juża maħżen taċ-ċwievet fuq is-server.

Issa ejja nitkellmu ftit aktar dwar keyring_file. Meta kont qed niżviluppa keyring_file, kont imħasseb ukoll dwar kif niċċekkja għal bidliet keyring_file waqt li s-server ikun qed jaħdem. F'5.7, il-verifika twettqet ibbażata fuq l-istatistika tal-fajl, li ma kinitx soluzzjoni ideali, u f'8.0 ġiet sostitwita b'summa ta 'kontroll SHA256.

L-ewwel darba li tmexxi keyring_file, jiġu kkalkulati l-istatistika tal-fajl u checksum, li jiġu mfakkar mis-server, u l-bidliet jiġu applikati biss jekk jaqblu. Meta l-fajl jinbidel, iċ-checksum tiġi aġġornata.

Diġà koprejna ħafna mistoqsijiet dwar il-kaxxa-forti ewlenin. Madankollu, hemm suġġett importanti ieħor li ħafna drabi jintesa jew jinftiehem ħażin: il-qsim taċ-ċwievet bejn is-servers.

Xi ngħid? Kull server (pereżempju, Percona Server) fil-cluster għandu jkollu post separat fuq is-Server tal-Vault li fih Percona Server għandu jaħżen iċ-ċwievet tiegħu. Kull Master Key salvata fil-ħażna fiha l-GUID tas-Server Percona fl-identifikatur tiegħu. Għaliex huwa importanti? Immaġina li għandek Vault Server wieħed biss u s-Servers Percona kollha fil-cluster jużaw dak il-Vault Server wieħed. Il-problema tidher ovvja. Jekk is-Servers Percona kollha użaw Master Key mingħajr identifikaturi uniċi, bħal id = 1, id = 2, eċċ., allura s-servers kollha fil-cluster jużaw l-istess Master Key. Dak li jipprovdi l-GUID hija d-distinzjoni bejn is-servers. Għaliex allura tkellem dwar il-qsim taċ-ċwievet bejn is-servers jekk diġà jeżisti GUID uniku? Hemm plugin ieħor - keyring_udf. B'dan il-plugin, l-utent tas-server tiegħek jista 'jaħżen iċ-ċwievet tiegħu fuq is-server tal-Vault. Il-problema sseħħ meta utent joħloq ċavetta fuq server1, pereżempju, u mbagħad jipprova joħloq ċavetta bl-istess ID fuq server2, pereżempju:

--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 значит успешное завершение
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1

Stenna. Iż-żewġ servers qed jużaw l-istess Vault Server, il-funzjoni keyring_key_store m'għandhiex tonqos fuq server2? Interessanti, jekk tipprova tagħmel l-istess fuq server wieħed, tirċievi żball:

--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
select keyring_key_store('ROB_1','AES',"543210987654321");
0

Hekk hu, ROB_1 diġà jeżisti.

Ejja niddiskutu t-tieni eżempju l-ewwel. Kif għidna qabel, keyring_vault jew kwalunkwe plugin ieħor taċ-ċavetta jpoġġi l-IDs ewlenin kollha fil-memorja. Għalhekk, wara li tinħoloq ċavetta ġdida, ROB_1 tiżdied mas-server1, u minbarra li tibgħat din iċ-ċavetta lil Vault, iċ-ċavetta hija miżjuda wkoll mal-cache. Issa, meta nippruvaw inżidu l-istess ċavetta għat-tieni darba, keyring_vault jiċċekkja jekk iċ-ċavetta teżistix fil-cache u tarmi żball.

Fl-ewwel każ is-sitwazzjoni hija differenti. Server1 u server2 għandhom caches separati. Wara li żżid ROB_1 mal-cache taċ-ċavetta fuq is-server1 u s-server tal-Vault, il-cache taċ-ċavetta fuq is-server2 mhix sinkronizzata. M'hemm l-ebda ċavetta ROB_2 fil-cache fuq is-server1. Għalhekk, iċ-ċavetta ROB_1 tinkiteb fil-keyring_key_store u lis-server tal-Vault, li fil-fatt jissostitwixxi (!) il-valur preċedenti. Issa ċ-ċavetta ROB_1 fuq is-server tal-Vault hija 543210987654321. Interessanti, is-server tal-Vault ma jimblokkax azzjonijiet bħal dawn u faċilment jissostitwixxi l-valur l-antik.

Issa nistgħu naraw għaliex il-qsim tas-server f'Vault jista' jkun importanti - meta tkun qed tuża keyring_udf u trid taħżen iċ-ċwievet fil-Vault. Kif tikseb din is-separazzjoni fuq server Vault?

Hemm żewġ modi biex taqsam fil-Vault. Tista 'toħloq punti ta' muntatura differenti għal kull server, jew tuża mogħdijiet differenti fl-istess punt ta 'muntaġġ. Dan huwa illustrat l-aħjar b'eżempji. Mela ejja nħarsu lejn il-punti tal-muntaġġ individwali l-ewwel:

--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 = (...)

Hawnhekk tista 'tara li server1 u server2 qed jużaw punti ta' muntatura differenti. Meta taqsam il-mogħdijiet, il-konfigurazzjoni tidher bħal din:

--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 = (...)

F'dan il-każ, iż-żewġ servers jużaw l-istess punt ta 'muntaġġ "mount_point", iżda mogħdijiet differenti. Meta toħloq l-ewwel sigriet fuq server1 billi tuża din it-triq, is-server tal-Vault awtomatikament joħloq direttorju "server1". Għal server2 kollox huwa simili. Meta tħassar l-aħħar sigriet f'mount_point/server1 jew mount_point/server2, is-server tal-Vault iħassar ukoll dawk id-direttorji. F'każ li tuża s-separazzjoni tal-mogħdijiet, trid toħloq punt ta' muntaġġ wieħed biss u tibdel il-fajls tal-konfigurazzjoni sabiex is-servers jużaw mogħdijiet separati. Punt ta 'muntaġġ jista' jinħoloq bl-użu ta 'talba HTTP. Bl-użu ta' CURL dan jista' jsir hekk:

curl -L -H "X-Vault-Token: TOKEN" –cacert VAULT_CA
--data '{"type":"generic"}' --request POST VAULT_URL/v1/sys/mounts/SECRET_MOUNT_POINT

L-oqsma kollha (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) jikkorrispondu għall-parametri tal-fajl tal-konfigurazzjoni. Naturalment, tista 'tuża l-utilitajiet tal-Vault biex tagħmel l-istess. Iżda huwa aktar faċli li awtomatizzat il-ħolqien ta 'punt ta' muntatura. Nispera li ssibu din l-informazzjoni utli u narawkom fl-artikoli li jmiss f'din is-sensiela.

Encryption fil-MySQL: Keystore

Aqra iktar:

Sors: www.habr.com

Żid kumment