Pag-encrypt sa MySQL: Keystore

Sa pagpaabot sa pagsugod sa bag-ong enrolment para sa kurso "Database" Nag-andam kami usa ka hubad sa usa ka mapuslanon nga artikulo alang kanimo.

Pag-encrypt sa MySQL: Keystore

Ang Transparent Data Encryption (TDE) nagpakita sa Percona Server alang sa MySQL ug MySQL sa dugay nga panahon. Apan nahunahuna ba nimo kung giunsa kini molihok sa ilawom sa hood ug unsa ang epekto sa TDE sa imong server? Niini nga serye sa mga artikulo atong tan-awon kung giunsa ang TDE molihok sa sulod. Magsugod kita sa yawe nga pagtipig, tungod kay gikinahanglan kini aron molihok ang bisan unsang pag-encrypt. Dayon atong tan-awon pag-ayo kung giunsa ang pag-encrypt sa Percona Server para sa MySQL/MySQL ug unsa ang dugang nga mga feature sa Percona Server para sa MySQL.

MySQL Keyring

Ang keyring kay mga plugins nga nagtugot sa server sa pagpangutana, paghimo, ug pagtangtang sa mga yawe sa lokal nga file (keyring_file) o sa layo nga server (sama sa HashiCorp Vault). Ang mga yawe kanunay nga gi-cache sa lokal aron mapadali ang pagkuha niini.

Ang mga plugin mahimong bahinon sa duha ka kategorya:

  • Lokal nga pagtipig. Pananglitan, usa ka lokal nga file (gitawag namo kini nga keyring nga nakabase sa file).
  • Hilit nga pagtipig. Pananglitan, ang Vault Server (gitawag namo kini nga server-based keyring).

Importante kini nga pagbulag tungod kay ang lain-laing mga matang sa pagtipig adunay gamay nga kalainan, dili lamang sa pagtipig ug pagkuha sa mga yawe, apan usab sa diha nga kini gipadagan.

Kung mogamit usa ka pagtipig sa file, sa pagsugod, ang tibuuk nga sulud sa pagtipig gikarga sa cache: key id, key user, key type, ug ang yawe mismo.

Sa kaso sa usa ka tindahan sa kilid sa server (sama sa Vault Server), ang yawe nga id ug yawe nga tiggamit lamang ang gikarga sa pagsugod, mao nga ang pagkuha sa tanan nga mga yawe dili makapahinay sa pagsugod. Ang mga yawe gikarga nga tapulan. Sa ato pa, ang yawe mismo gikarga gikan sa Vault kung gikinahanglan gyud kini. Kung ma-download na, ang yawe gi-cache sa memorya aron dili na kini kinahanglan nga ma-access pinaagi sa mga koneksyon sa TLS sa Vault Server sa umaabot. Sunod, atong tan-awon kung unsang kasayuran ang naa sa yawe nga tindahan.

Ang importante nga impormasyon naglangkob sa mosunod:

  • yawe id — key identifier, pananglitan:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • tipo sa yawi — key type base sa encryption algorithm nga gigamit, posible nga mga kantidad: “AES”, “RSA” o “DSA”.
  • gitas-on sa yawe — yawe nga gitas-on sa byte, AES: 16, 24 o 32, RSA 128, 256, 512 ug DSA 128, 256 o 384.
  • user - tag-iya sa yawe. Kung ang yawe mao ang sistema, pananglitan, Master Key, nan kini nga uma walay sulod. Kung ang usa ka yawe gihimo gamit ang keyring_udf, nan kini nga uma nagpaila sa tag-iya sa yawe.
  • ang yawe mismo

Ang yawe talagsaon nga giila sa pares: key_id, user.

Adunay usab mga kalainan sa pagtipig ug pagtangtang sa mga yawe.

Ang pagtipig sa file mas paspas. Mahimong maghunahuna ka nga ang usa ka yawe nga tindahan yano nga nagsulat sa yawe sa usa ka file kausa, apan dili, adunay daghan pa nga nagpadayon dinhi. Sa matag higayon nga ang usa ka pagbag-o sa pagtipig sa file gihimo, usa ka backup nga kopya sa tanan nga sulud ang una nga gihimo. Ingnon ta nga ang file gitawag og my_biggest_secrets, unya ang backup nga kopya kay my_biggest_secrets.backup. Sunod, giusab ang cache (gidugang o gitangtang ang mga yawe) ug, kung malampuson ang tanan, i-reset ang cache sa usa ka file. Sa talagsaon nga mga kaso, sama sa pagkapakyas sa server, mahimo nimong makita kini nga backup file. Ang backup file matangtang sa sunod higayon nga makarga ang mga yawe (kasagaran human ma-restart ang server).

Kung nagtipig o nagtangtang sa usa ka yawe sa pagtipig sa server, ang pagtipig kinahanglan nga magkonektar sa MySQL server nga adunay mga mando nga "ipadala ang yawe" / "hangyo nga pagtangtang sa yawe".

Balik ta sa tulin sa pagsugod sa server. Gawas pa sa kamatuoran nga ang katulin sa paglansad apektado sa vault mismo, adunay isyu usab kung pila ang mga yawe gikan sa vault nga kinahanglan makuha sa pagsugod. Siyempre, kini labi ka hinungdanon alang sa pagtipig sa server. Sa pagsugod, gisusi sa server kung unsang yawe ang gikinahanglan alang sa mga naka-encrypt nga mga lamesa/tablespace ug gihangyo ang yawe gikan sa pagtipig. Sa usa ka "limpyo" nga server nga adunay Master Key encryption, kinahanglan adunay usa ka Master Key, nga kinahanglan makuha gikan sa pagtipig. Bisan pa, ang usa ka mas dako nga gidaghanon sa mga yawe mahimong gikinahanglan, pananglitan, kung ang backup nga server nagpahiuli sa usa ka backup gikan sa panguna nga server. Sa maong mga kaso, ang rotation sa Master Key kinahanglang ihatag. Pagatabunan kini sa dugang nga detalye sa umaabot nga mga artikulo, bisan kung dinhi gusto nakong timan-an nga ang usa ka server nga naggamit daghang mga Master Keys mahimo’g magdugay sa pagsugod, labi na kung mogamit usa ka tindahan sa yawe sa kilid sa server.

Karon maghisgot ta og gamay bahin sa keyring_file. Sa dihang nag-develop ko sa keyring_file, nabalaka sab ko kon unsaon pagsusi sa mga kausaban sa keyring_file samtang nagdagan ang server. Sa 5.7, ang tseke gihimo base sa mga istatistika sa file, nga dili usa ka sulundon nga solusyon, ug sa 8.0 kini gipulihan sa usa ka SHA256 checksum.

Sa unang higayon nga imong gipadagan ang keyring_file, ang mga estadistika sa file ug usa ka checksum gikalkulo, nga mahinumduman sa server, ug ang mga pagbag-o magamit lamang kung kini magkatugma. Kung nabag-o ang file, gi-update ang checksum.

Daghan na ang among natubag nga mga pangutana bahin sa yawe nga mga vault. Bisan pa, adunay lain nga hinungdanon nga hilisgutan nga kanunay makalimtan o dili masabtan: pagpaambit sa mga yawe sa mga server.

Unsay buot ipasabot? Ang matag server (pananglitan, Percona Server) sa cluster kinahanglan adunay bulag nga lokasyon sa Vault Server diin ang Percona Server kinahanglan magtipig sa mga yawe niini. Ang matag Master Key nga gitipigan sa storage naglangkob sa GUID sa Percona Server sulod sa identifier niini. Nganong importante kini? Hunahunaa nga ikaw adunay usa ra ka Vault Server ug ang tanan nga Percona Server sa cluster naggamit sa usa ka Vault Server. Ang problema daw klaro. Kung ang tanan nga Percona Server migamit ug Master Key nga walay talagsaon nga mga identifier, sama sa id = 1, id = 2, ug uban pa, nan ang tanang server sa cluster mogamit sa samang Master Key. Ang gihatag sa GUID mao ang kalainan tali sa mga server. Ngano man nga maghisgot bahin sa pagpaambit sa mga yawe tali sa mga server kung adunay usa ka talagsaon nga GUID? Adunay laing plugin - keyring_udf. Uban niini nga plugin, ang imong server user makatipig sa ilang mga yawe sa Vault server. Ang problema mahitabo kung ang usa ka user maghimo usa ka yawe sa server1, pananglitan, ug dayon mosulay sa paghimo og yawe nga adunay parehas nga ID sa server2, pananglitan:

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

Hulat. Ang duha nga mga server naggamit sa parehas nga Vault Server, dili ba kinahanglan nga ang keyring_key_store function mapakyas sa server2? Makapainteres, kung sulayan nimo nga buhaton ang parehas sa usa ka server, makadawat ka usa ka sayup:

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

Husto, anaa na ang ROB_1.

Atong hisgotan una ang ikaduhang pananglitan. Sama sa among giingon sa sayo pa, ang keyring_vault o bisan unsang ubang keyring plugin nag-cache sa tanang key ID sa memorya. Busa, human sa paghimo og bag-ong yawe, ang ROB_1 gidugang sa server1, ug dugang sa pagpadala niini nga yawe ngadto sa Vault, ang yawe gidugang usab sa cache. Karon, kung gisulayan namon nga idugang ang parehas nga yawe sa ikaduhang higayon, gisusi sa keyring_vault kung naa ba ang yawe sa cache ug nagbutang usa ka sayup.

Sa una nga kaso, lahi ang kahimtang. Ang server1 ug server2 adunay bulag nga mga cache. Human idugang ang ROB_1 sa yawe nga cache sa server1 ug sa Vault server, ang yawe nga cache sa server2 wala na mag-sync. Walay ROB_2 yawe sa cache sa server1. Sa ingon, ang ROB_1 nga yawe gisulat sa keyring_key_store ug sa Vault server, nga sa tinuud nag-overwrite (!) sa miaging kantidad. Karon ang ROB_1 nga yawe sa Vault server mao ang 543210987654321. Makapainteres, ang Vault server wala mag-ali sa ingon nga mga aksyon ug dali nga ma-overwrite ang daan nga kantidad.

Karon atong makita ngano nga ang pagbahin sa server sa Vault mahimong importante - kung ikaw naggamit sa keyring_udf ug gusto nga magtipig sa mga yawe sa Vault. Giunsa pagkab-ot kini nga panagbulag sa usa ka Vault server?

Adunay duha ka paagi sa pagbahin sa Vault. Makahimo ka og lain-laing mga mount point para sa matag server, o mogamit og lain-laing mga agianan sulod sa samang mount point. Kini labing maayo nga gihulagway sa mga pananglitan. Busa atong tan-awon una ang tagsa-tagsa nga mount point:

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

Dinhi imong makita nga ang server1 ug server2 naggamit ug lain-laing mga mount point. Kung gibahin ang mga agianan, ang pagsumpo ingon niini:

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

Sa kini nga kaso, ang duha nga mga server naggamit sa parehas nga mount point nga "mount_point", apan lainlain nga mga agianan. Kung maghimo ka sa una nga sekreto sa server1 gamit kini nga agianan, ang Vault server awtomatik nga maghimo usa ka "server1" nga direktoryo. Para sa server2 parehas ang tanan. Kung imong tangtangon ang katapusang sekreto sa mount_point/server1 o mount_point/server2, ang Vault server usab magtangtang sa mga direktoryo. Kung mogamit ka ug pagbulag sa agianan, kinahanglan ka maghimo usa ra ka mount point ug usbon ang mga file sa pag-configure aron ang mga server mogamit sa lainlaing mga agianan. Ang usa ka mount point mahimong mabuhat gamit ang HTTP request. Gamit ang CURL mahimo kini sama niini:

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

Tanang field (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) katumbas sa mga parameter sa configuration file. Siyempre, mahimo nimong gamiton ang mga kagamitan sa Vault aron mahimo usab kini. Apan mas sayon ​​ang pag-automate sa paghimo sa usa ka mount point. Nanghinaut ko nga mapuslanon kini nga impormasyon ug magkita ta sa sunod nga mga artikulo niini nga serye.

Pag-encrypt sa MySQL: Keystore

Basaha ang dugang pa:

Source: www.habr.com

Idugang sa usa ka comment