Encryption ao amin'ny MySQL: Keystore

Eo am-piandrasana ny fanombohan'ny fisoratana anarana vaovao ho an'ny taranja "Database" Nanomana fandikana lahatsoratra mahasoa ho anao izahay.

Encryption ao amin'ny MySQL: Keystore

Nipoitra ny Transparent Data Encryption (TDE). Server Percona ho an'ny MySQL ary MySQL nandritra ny fotoana ela. Saingy efa nieritreritra ny fomba fiasan'izy io eo ambanin'ny saron-tava ve ianao ary inona no fiantraikan'ny TDE amin'ny mpizara anao? Amin'ity andian-dahatsoratra ity dia hojerentsika ny fomba fiasan'ny TDE anatiny. Andeha isika hanomboka amin'ny fitahirizana fanalahidy, satria ilaina izany mba hampandehanana ny fanafenana rehetra. Avy eo dia hojerentsika akaiky ny fomba fiasan'ny encryption ao amin'ny Server Percona ho an'ny MySQL/MySQL ary inona ny endri-javatra fanampiny ananan'ny Percona Server for MySQL.

MySQL Keyring

Keyring dia plugins ahafahan'ny mpizara manontany, mamorona ary mamafa fanalahidy ao amin'ny rakitra eo an-toerana (keyring_file) na amin'ny mpizara lavitra (toy ny HashiCorp Vault). Voatahiry ao an-toerana foana ny fanalahidy mba hanafainganana ny fakana azy.

Ny plugins dia azo zaraina ho sokajy roa:

  • Fitehirizana eo an-toerana. Ohatra, rakitra eo an-toerana (antsoinay hoe keyring mifototra amin'ny rakitra).
  • Fitehirizana lavitra. Ohatra, Vault Server (antsoinay hoe keyring mifototra amin'ny server).

Zava-dehibe io fisarahana io satria ny karazana fitahirizana samihafa dia tsy mitovy amin'ny fitondran-tenany, tsy rehefa mitahiry sy maka fanalahidy ihany, fa koa rehefa mampiasa azy ireo.

Rehefa mampiasa fitahirizana rakitra, rehefa manomboka, ny atiny manontolo amin'ny fitahirizana dia ampidirina ao amin'ny cache: ID key, mpampiasa key, type key, ary ny lakile mihitsy.

Raha amin'ny fivarotana eo amin'ny lafiny mpizara (toy ny Vault Server), ny ID lakile sy ny mpampiasa fanalahidy ihany no entina amin'ny fanombohana, ka ny fahazoana ny fanalahidy rehetra dia tsy mampiadana ny fanombohana. Ny fanalahidy dia entina amin'ny kamo. Izany hoe, ny lakile mihitsy no entina avy ao amin'ny Vault rehefa tena ilaina. Rehefa alaina dia voatahiry ao anaty fitadidiana ilay lakile mba tsy hidirana amin'ny alalan'ny fifandraisana TLS amin'ny Server Vault amin'ny ho avy. Manaraka, andeha hojerentsika hoe inona ny fampahalalana hita ao amin'ny fivarotana fanalahidy.

Ny fampahalalana fototra dia ahitana ireto manaraka ireto:

  • key id - famantarana famantarana, ohatra:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • karazana fanalahidy - karazana fanalahidy mifototra amin'ny algorithm encryption ampiasaina, sanda azo atao: "AES", "RSA" na "DSA".
  • halavany lehibe β€” halavan'ny fanalahidy amin'ny bytes, AES: 16, 24 na 32, RSA 128, 256, 512 ary DSA 128, 256 na 384.
  • mpampiasa - tompon'ny fanalahidy. Raha rafitra ny fanalahidy, ohatra, Master Key, dia foana io saha io. Raha noforonina amin'ny alalan'ny keyring_udf ny fanalahidy iray, dia io saha io no mamaritra ny tompon'ny lakile.
  • ny fanalahidy mihitsy

Ny lakile dia fantatr'ilay mpivady tokana: key_id, mpampiasa.

Misy ihany koa ny fahasamihafana eo amin'ny fitahirizana sy famafana ny fanalahidy.

Haingana kokoa ny fitahirizana rakitra. Mety hieritreritra ianao fa manoratra fotsiny ny fanalahidin'ny rakitra iray ny fivarotana fanalahidy iray, saingy tsia, misy zavatra hafa mitranga eto. Isaky ny misy fanovana fitehirizana rakitra dia amboarina aloha ny dika mitovy amin'ny atiny rehetra. Aleo atao hoe my_biggest_secrets ilay rakitra, dia ny backup dia ho my_biggest_secrets.backup. Avy eo, ovaina ny cache (ampiana na voafafa ny fanalahidy) ary, raha mahomby ny zava-drehetra, dia averina amin'ny rakitra iray ny cache. Amin'ny tranga tsy fahita firy, toy ny tsy fahombiazan'ny server, mety ho hitanao ity rakitra backup ity. Ny rakitra backup dia voafafa amin'ny manaraka rehefa feno ny fanalahidy (matetika aorian'ny famerenana ny server).

Rehefa mitahiry na mamafa fanalahidy iray ao amin'ny fitahirizana mpizara, ny fitahirizana dia tsy maintsy mifandray amin'ny mpizara MySQL miaraka amin'ny baiko "alefaso ny lakile" / "angataho ny famafana fanalahidy".

Andao hiverina amin'ny hafainganan'ny fanombohana mpizara. Ho fanampin'ny zava-misy fa ny hafainganam-pandehan'ny fandefasana dia misy fiantraikany amin'ny vata fampangatsiahana, misy ihany koa ny olana momba ny habetsaky ny lakile avy amin'ny vault tsy maintsy alaina amin'ny fanombohana. Mazava ho azy fa zava-dehibe indrindra ho an'ny fitahirizana mpizara izany. Amin'ny fanombohana, ny mpizara dia manamarina izay fanalahidy ilaina amin'ny latabatra / latabatra misy miafina ary mangataka ny lakile avy amin'ny fitahirizana. Amin'ny mpizara "madio" misy encryption Master Key, dia tsy maintsy misy Master Key iray, izay tsy maintsy alaina avy amin'ny fitahirizana. Na izany aza, mety ilaina ny fanalahidy maromaro kokoa, ohatra, rehefa mamerina ny backup avy amin'ny lohamilina voalohany ny mpizara backup. Amin'ny toe-javatra toy izany, ny fihodinan'ny Master Key dia tokony homena. Hodinihina amin'ny antsipiriany bebe kokoa amin'ny lahatsoratra ho avy izany, na dia eto aza dia tiako ny manamarika fa ny mpizara mampiasa Master Keys marobe dia mety haharitra ela kokoa vao manomboka, indrindra rehefa mampiasa fivarotana fanalahidy amin'ny lafiny server.

Andeha isika hiresaka bebe kokoa momba ny keyring_file. Rehefa namolavola keyring_file aho dia nanahy ihany koa ny amin'ny fomba hijerena ny fiovan'ny keyring_file rehefa mandeha ny mpizara. Ao amin'ny 5.7, ny fanamarinana dia natao mifototra amin'ny antontan'isa rakitra, izay tsy vahaolana tsara indrindra, ary ao amin'ny 8.0 dia nosoloina checksum SHA256.

Ny fotoana voalohany nampandehananao keyring_file dia kajy ny antontan'isa rakitra sy ny checksum, izay tadidin'ny mpizara, ary ny fanovana dia ampiharina raha tsy mifanaraka. Rehefa miova ny rakitra dia havaozina ny checksum.

Efa nandinika fanontaniana maro momba ny vaults lehibe izahay. Na izany aza, misy lohahevitra manan-danja iray hafa izay matetika adino na tsy takatry ny saina: fizarana fanalahidy amin'ny mpizara.

Ny tiako lazaina? Ny mpizara tsirairay (ohatra, Percona Server) ao amin'ny cluster dia tsy maintsy manana toerana mitokana ao amin'ny Vault Server izay tsy maintsy itehirizan'i Percona Server ny lakileny. Ny Key Master tsirairay voatahiry ao amin'ny fitahirizana dia misy ny GUID an'ny Server Percona ao anatin'ny famantarana azy. Nahoana no zava-dehibe izany? Alaivo sary an-tsaina fa iray ihany ny Server Vault ary ny Servers Percona rehetra ao amin'ny cluster dia mampiasa io Server Vault tokana io. Toa miharihary ny olana. Raha mampiasa Key Master tsy misy famantarana tokana ny Servers Percona rehetra, toy ny id = 1, id = 2, sns., dia hampiasa Key Master iray ihany ny mpizara rehetra ao amin'ny cluster. Ny omen'ny GUID dia ny fanavahana ny mpizara. Nahoana ary no miresaka momba ny fizarana fanalahidy eo amin'ny mpizara raha efa misy ny GUID tokana? Misy plugin hafa - keyring_udf. Miaraka amin'ity plugin ity dia afaka mitahiry ny fanalahidiny ao amin'ny mpizara Vault ny mpampiasa mpizara anao. Mitranga ny olana rehefa mamorona fanalahidy amin'ny server1, ohatra, ny mpampiasa iray, ary avy eo manandrana mamorona fanalahidy miaraka amin'ny ID mitovy amin'ny server2, ohatra:

--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 Π·Π½Π°Ρ‡ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1

Andraso. Samy mampiasa Vault Server ireo mpizara roa ireo, tsy tokony ho levona ve ny fiasan'ny keyring_key_store amin'ny server2? Mahaliana fa raha manandrana manao toy izany amin'ny mpizara iray ianao dia hahazo hadisoana:

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

Marina izany, efa misy ny ROB_1.

Andeha hodinihintsika aloha ny ohatra faharoa. Araka ny voalazanay teo aloha, ny keyring_vault na ny plugin keyring hafa dia mitazona ny ID manan-danja rehetra ao anaty fitadidiana. Noho izany, aorian'ny famoronana fanalahidy vaovao, ROB_1 dia ampiana amin'ny server1, ary ankoatra ny fandefasana an'io fanalahidy io amin'ny Vault, dia ampidirina amin'ny cache ihany koa ny fanalahidy. Ankehitriny, rehefa manandrana manampy fanindroany io fanalahidy io isika, keyring_vault dia manamarina raha misy ny lakile ao amin'ny cache ary manipy hadisoana.

Amin'ny tranga voalohany dia hafa ny toe-javatra. Server1 sy server2 dia manana cache misaraka. Rehefa avy nampidirina ROB_1 amin'ny cache fanalahidin'ny server1 sy ny mpizara Vault, dia tsy mifanaraka ny cache famaha ao amin'ny server2. Tsy misy lakile ROB_2 ao amin'ny cache amin'ny server1. Noho izany, ny fanalahidin'ny ROB_1 dia voasoratra ao amin'ny keyring_key_store sy amin'ny mpizara Vault, izay manodina (!) ny sanda teo aloha. Ankehitriny ny lakile ROB_1 amin'ny mpizara Vault dia 543210987654321. Mahaliana fa tsy manakana ny hetsika toy izany ny mpizara Vault ary manodina mora foana ny sanda taloha.

Hitantsika izao ny antony maha-zava-dehibe ny fisarahana amin'ny mpizara ao amin'ny Vault - rehefa mampiasa keyring_udf ianao ary te hitahiry fanalahidy ao amin'ny Vault. Ahoana no hanatrarana an'io fisarahana amin'ny mpizara Vault io?

Misy fomba roa ahafahana mizara ho Vault. Azonao atao ny mamorona teboka tendrombohitra samihafa ho an'ny mpizara tsirairay, na mampiasa lalana samihafa ao anatin'ny teboka tendrombohitra iray ihany. Izany no tsara indrindra aseho amin'ny ohatra. Andeha hojerentsika aloha ireo teboka mount tsirairay:

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

Eto ianao dia afaka mahita fa ny server1 sy server2 dia mampiasa teboka tendrombohitra samihafa. Rehefa mizara ny lalana dia ho toy izao ny config:

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

Amin'ity tranga ity, ny mpizara roa dia mampiasa "mount_point" mitovy, fa lalana hafa. Rehefa mamorona ny tsiambaratelo voalohany amin'ny server1 ianao amin'ny fampiasana an'io lalana io dia mamorona lahatahiry "server1" ho azy ny mpizara Vault. Ho an'ny server2 dia mitovy daholo ny zava-drehetra. Rehefa mamafa ny tsiambaratelo farany ao amin'ny mount_point/server1 na mount_point/server2 ianao, dia mamafa ireo lahatahiry ireo ihany koa ny mpizara Vault. Raha toa ka mampiasa fanasarahana lalana ianao, dia tsy maintsy mamorona teboka iray ihany ianao ary manova ny rakitra fanamafisam-peo mba hampiasan'ireo mpizara lalana misaraka. Ny teboka mount dia azo atao amin'ny alΓ lan'ny fangatahana HTTP. Ny fampiasana CURL dia azo atao toy izao:

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

Ny saha rehetra (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) dia mifanandrify amin'ny mason'ny fisie fichier. Mazava ho azy, azonao atao ny mampiasa ny fitaovana Vault hanaovana izany. Saingy mora kokoa ny manamboatra automatique ny famoronana teboka tendrombohitra. Manantena aho fa mahasoa anao ity fampahalalana ity ary hahita anao amin'ny lahatsoratra manaraka amin'ity andiany ity.

Encryption ao amin'ny MySQL: Keystore

Hamaky bebe kokoa:

Source: www.habr.com

Add a comment