Izo ya ezo na MySQL: Keystore

Na atụmanya mmalite nke ndebanye aha ọhụrụ maka usoro ahụ "Ebe nchekwa data" Anyị akwadola ntụgharị asụsụ akụkọ bara uru maka gị.

Izo ya ezo na MySQL: Keystore

Transparent Data Encryption (TDE) pụtara na Percona Server maka MySQL na MySQL maka obere oge. Mana ọ dịtụla mgbe ị chere maka otu o si arụ ọrụ n'okpuru mkpuchi yana mmetụta TDE nwere ike inwe na sava gị? N'usoro isiokwu a, anyị ga-eleba anya ka TDE si arụ ọrụ n'ime. Ka anyị jiri nchekwa isi bido, ebe ọ bụ na achọrọ nke a maka nzuzo ọ bụla ka ọ rụọ ọrụ. Mgbe ahụ, anyị ga-elebakwu anya ka izo ya ezo si arụ ọrụ na Percona Server maka MySQL/MySQL yana ihe ndị ọzọ Percona Server maka MySQL nwere.

MySQL igodo

Keyring bụ plugins na-enye ihe nkesa ohere ịjụ ajụjụ, mepụta na hichapụ igodo na faịlụ mpaghara (keyring_file) ma ọ bụ na sava dịpụrụ adịpụ (dị ka HashiCorp Vault). A na-echekwa igodo mgbe niile na mpaghara iji mee ka iweghachi ha dị ngwa.

Enwere ike kewaa plugins ụzọ abụọ:

  • Nchekwa mpaghara. Dịka ọmụmaatụ, faịlụ mpaghara (anyị na-akpọ nke a igodo dabere na faịlụ).
  • Ebe nchekwa dị anya. Dịka ọmụmaatụ, Vault Server (anyị na-akpọ nke a igodo dabere na sava).

Nkewa a dị mkpa n'ihi na ụdị nchekwa dị iche iche na-akpa àgwà dịtụ iche, ọ bụghị naanị mgbe ị na-echekwa ma na-eweghachi igodo, kamakwa mgbe ị na-agba ọsọ.

Mgbe ị na-eji nchekwa faịlụ, na mmalite, a na-etinye ihe niile dị na nchekwa ahụ n'ime cache: id igodo, onye ọrụ igodo, ụdị igodo, yana igodo n'onwe ya.

N'ihe banyere ụlọ ahịa dị n'akụkụ ihe nkesa (dị ka Vault Server), ọ bụ naanị igodo id na onye ọrụ igodo ka a na-ebu na mmalite, yabụ ịnweta igodo niile anaghị ebelata mmalite. A na-ebukwa igodo dị umengwụ. Ya bụ, igodo n'onwe ya na-ebu site na Vault naanị mgbe achọrọ ya n'ezie. Ozugbo ebudatara ya, a na-echekwa igodo ahụ na ebe nchekwa ka ọ ghara ịdị mkpa ịnweta ya site na njikọ TLS na sava Vault n'ọdịnihu. Ọzọ, ka anyị lelee ozi dị na ụlọ ahịa igodo.

Ozi isi nwere ihe ndị a:

  • igodo id - ihe nchọpụta igodo, dịka ọmụmaatụ:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • ụdị igodo - ụdị igodo dabere na algọridim nzuzo ejiri mee ihe, ụkpụrụ enwere ike: "AES", "RSA" ma ọ bụ "DSA".
  • ogologo isi - ogologo igodo na bytes, AES: 16, 24 ma ọ bụ 32, RSA 128, 256, 512 na DSA 128, 256 ma ọ bụ 384.
  • onye ọrụ - onye nwe igodo. Ọ bụrụ na igodo ahụ bụ sistemu, dịka ọmụmaatụ, Master Key, yabụ ubi a tọgbọ chakoo. Ọ bụrụ na ejiri keyring_udf mepụta igodo, yabụ ubi a na-achọpụta onye nwe igodo ahụ.
  • igodo n'onwe ya

A na-amata igodo ahụ pụrụ iche site na ụzọ abụọ: key_id, onye ọrụ.

E nwekwara ndịiche dị na ichekwa na ihichapụ igodo.

Nchekwa faịlụ na-agba ọsọ ọsọ. Ị nwere ike iche na ụlọ ahịa igodo na-ede naanị igodo faịlụ otu ugboro, mana mba, ọ na-eme ebe a. Mgbe ọ bụla emere mgbanwe nchekwa faịlụ, a na-ebu ụzọ mepụta nnomi ndabere nke ọdịnaya niile. Ka anyị kwuo na a na-akpọ faịlụ ahụ my_biggest_secrets, mgbe ahụ, ndabere ndabere ga-abụ my_biggest_secrets.backup. Na-esote, a na-agbanwe cache (a na-agbakwunye ma ọ bụ ehichapụ igodo) na, ọ bụrụ na ihe niile na-aga nke ọma, a na-edozi cache na faịlụ. N'ọnọdụ ndị a na-adịghị ahụkebe, dị ka ọdịda nkesa, ị nwere ike ịhụ faịlụ ndabere a. A na-ehichapụ faịlụ nkwado ndabere na mpaghara oge ọzọ a na-ebuba igodo (na-emekarị ka ihe nkesa maliteghachiri).

Mgbe ị na-echekwa ma ọ bụ na-ehichapụ igodo na nchekwa ihe nkesa, nchekwa ahụ ga-ejikọta na ihe nkesa MySQL na iwu "zipụ igodo" / " rịọ ihichapụ igodo ".

Ka anyị laghachi na ọsọ mmalite ihe nkesa. Na mgbakwunye na eziokwu ahụ na-emetụta ngwa ngwa mmalite nke vault n'onwe ya, enwerekwa okwu nke igodo ole si na vault chọrọ ka eweghachite na mmalite. N'ezie, nke a dị mkpa karịsịa maka nchekwa ihe nkesa. Na mmalite, ihe nkesa ahụ na-enyocha igodo nke achọrọ maka tebụl / tebụl ezoro ezo wee rịọ igodo site na nchekwa ahụ. Na ihe nkesa “dị ọcha” nwere izo ya ezo Master Key, a ga-enwerịrị otu igodo Master, nke a ga-ewepụtarịrị na nchekwa. Agbanyeghị, enwere ike ịchọ ọnụọgụ igodo buru ibu, dịka ọmụmaatụ, mgbe ihe nkesa ndabere na-eweghachi ndabere site na sava mbụ. N'ọnọdụ ndị dị otú ahụ, ekwesịrị inye ntụgharị nke igodo Master. A ga-ekpuchi nke a n'ụzọ zuru ezu na isiokwu ndị ga-eme n'ọdịnihu, ọ bụ ezie na ebe a ka m ga-achọ ịmata na ihe nkesa na-eji ọtụtụ igodo Master nwere ike iwepụta ntakịrị oge ịmalite, karịsịa mgbe ị na-eji ụlọ ahịa igodo n'akụkụ ihe nkesa.

Ugbu a, ka anyị kwuo ntakịrị gbasara keyring_file. Mgbe m na-emepe emepe keyring_file, enwere m nchegbu maka otu esi elele mgbanwe keyring_file mgbe ihe nkesa na-agba ọsọ. Na 5.7, a na-eme nlele ahụ dabere na ọnụ ọgụgụ faịlụ, nke na-abụghị ezigbo ngwọta, na 8.0, e jiri SHA256 checksum dochie ya.

Oge mbụ ị na-agba keyring_file, a na-agbakọ ndekọ ndekọ faịlụ na checksum, nke ihe nkesa na-echeta, a na-etinyekwa mgbanwe naanị ma ọ bụrụ na ha dabara. Mgbe faịlụ gbanwere, a na-emelite checksum.

Anyị ekpuchilarị ọtụtụ ajụjụ gbasara ebe nchekwa isi. Otú ọ dị, e nwere isiokwu ọzọ dị mkpa nke a na-echefukarị ma ọ bụ na-aghọtahie: ịkekọrịta igodo n'ofe sava.

Gịnị ka m pụtara? Ihe nkesa ọ bụla (dịka ọmụmaatụ, Percona Server) na ụyọkọ ga-enwerịrị ọnọdụ dị iche na nkesa Vault nke Percona Server ga-echekwa igodo ya. Igodo Master ọ bụla echekwara na nchekwa nwere GUID nke Percona Server n'ime njirimara ya. Gịnị mere o ji dị mkpa? Were ya na ị nwere naanị otu sava Vault yana sava Percona niile dị na ụyọkọ ahụ na-eji otu ihe nkesa Vault ahụ. Nsogbu dị ka ihe doro anya. Ọ bụrụ na sava Percona niile jiri igodo Master na-enweghị ihe nchọpụta pụrụ iche, dị ka id = 1, id = 2, wdg, mgbe ahụ sava niile dị na ụyọkọ ga-eji otu igodo Master ahụ. Ihe GUID na-enye bụ ọdịiche dị n'etiti sava. Kedu ihe kpatara na-ekwu maka ịkekọrịta igodo n'etiti sava ma ọ bụrụ na GUID pụrụ iche adịlarị? Enwere ngwa mgbakwunye ọzọ - keyring_udf. Site na ngwa mgbakwunye a, onye ọrụ nkesa gị nwere ike chekwaa igodo ha na sava Vault. Nsogbu a na-eme mgbe onye ọrụ mepụtara igodo na server1, dịka ọmụmaatụ, wee gbalịa ịmepụta igodo nwere otu ID na server2, dịka ọmụmaatụ:

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

Chere. Sava abụọ a na-eji otu ihe nkesa Vault, ọ bụ na ọrụ keyring_key_store ekwesịghị ịda na server2? N'ụzọ na-akpali mmasị, ọ bụrụ na ị na-agbalị ime otu ihe ahụ na otu nkesa, ị ga-enweta njehie:

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

Nke ahụ ziri ezi, ROB_1 adịlarị.

Ka anyị buru ụzọ tụlee ihe atụ nke abụọ. Dị ka anyị kwuru na mbụ, keyring_vault ma ọ bụ ngwa mgbakwunye igodo ọ bụla na-echekwa ID igodo niile na ebe nchekwa. Yabụ, ka emechara igodo ọhụrụ, a na-agbakwunye ROB_1 na sava1, na mgbakwunye na izipu igodo a na Vault, a na-agbakwunye igodo ahụ na cache. Ugbu a, mgbe anyị nwara itinye otu igodo ahụ ugboro abụọ, keyring_vault na-enyocha ma igodo ọ dị na cache wee tụfuo njehie.

Na nke mbụ, ọnọdụ dị iche. Server1 na server2 nwere cache dị iche iche. Ka ịgbakwunye ROB_1 na cache igodo dị na server1 yana ihe nkesa Vault, cache igodo dị na server2 enweghị mmekọrịta. Enweghị igodo ROB_2 dị na cache na server1. Ya mere, a na-ede igodo ROB_1 na keyring_key_store na sava Vault, nke na-edegharị (!) uru gara aga. Ugbu a igodo ROB_1 dị na sava Vault bụ 543210987654321. N'ụzọ na-akpali mmasị, ihe nkesa Vault anaghị egbochi omume ndị dị otú ahụ ma na-edegharị uru ochie n'ụzọ dị mfe.

Ugbu a, anyị nwere ike ịhụ ihe kpatara nkewa nkesa na Vault nwere ike ịdị mkpa - mgbe ị na-eji keyring_udf ma chọọ ịchekwa igodo na Vault. Otu esi enweta nkewa a na sava Vault?

Enwere ụzọ abụọ iji kewaa n'ime Vault. Ị nwere ike ịmepụta ebe ugwu dị iche iche maka nkesa ọ bụla, ma ọ bụ jiri ụzọ dị iche iche n'ime otu ebe ugwu. E ji ihe atụ gosi nke ọma nke a. Ya mere, ka anyị buru ụzọ leba anya n'ihe nrịgo elu onye ọ bụla:

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

N'ebe a, ị ga-ahụ na server1 na server2 na-eji ebe ugwu dị iche iche. Mgbe ị na-ekewa ụzọ, nhazi ahụ ga-adị ka nke a:

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

N'okwu a, sava abụọ ahụ na-eji otu ebe ugwu "mount_point", mana ụzọ dị iche iche. Mgbe ị mepụtara nzuzo mbụ na server1 na-eji ụzọ a, ihe nkesa Vault na-emepụta ndekọ "server1" na-akpaghị aka. Maka server2 ihe niile yiri ya. Mgbe ihichapụ ihe nzuzo ikpeazụ na mount_point/server1 ma ọ bụ mount_point/server2, ihe nkesa Vault na-ehichapụkwa akwụkwọ ndekọ aha ndị ahụ. Ọ bụrụ na ị na-eji nkewa ụzọ, ị ga-emerịrị naanị otu ebe ugwu wee gbanwee faịlụ nhazi ka ndị sava jiri ụzọ dị iche iche. Enwere ike ịmepụta ebe mgbago site na iji arịrịọ HTTP. Iji CURL, enwere ike ime nke a:

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

Ogige niile (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) kwekọrọ na paramita nke faịlụ nhazi ahụ. N'ezie, ị nwere ike iji Vault utilities mee otu ihe ahụ. Mana ọ dị mfe ịmegharị ihe okike nke ebe ugwu. Enwere m olileanya na ozi a bara uru na anyị ga-ahụ gị n'isiokwu na-esote n'usoro isiokwu a.

Izo ya ezo na MySQL: Keystore

GỤKWUO:

isi: www.habr.com

Tinye a comment