Hoʻopili i ka MySQL: Keystore

Ma ka pō o ka hoʻomaka ʻana o kahi kākau inoa hou no ka papa "Ka waihona waihona" Ua hoʻomākaukau mākou i kahi unuhi o kahi ʻatikala kūpono no ʻoe.

Hoʻopili i ka MySQL: Keystore

Ua ʻike ʻia ka Transparent Data Encryption (TDE). Percona Server no MySQL a me MySQL no kekahi manawa. Akā ua noʻonoʻo paha ʻoe e pili ana i ka hana ʻana ma lalo o ka puʻupuʻu a pehea ka hopena o TDE i kāu kikowaena? Ma kēia pūʻulu ʻatikala e nānā mākou i ka hana ʻana o TDE i loko. E hoʻomaka kākou me ka mālama ʻana i nā kī, no ka mea, pono kēia no ka hana ʻana o kekahi hoʻopunipuni. A laila e nānā pono mākou i ka hana ʻana o ka hoʻopunipuni ma Percona Server no MySQL/MySQL a me nā hiʻohiʻona hou aʻe o Percona Server no MySQL.

MySQL Keyring

ʻO Keyring nā plugins e hiki ai i ke kikowaena ke nīnau, hana, a holoi i nā kī ma kahi faila kūloko (keyring_file) a i ʻole ma kahi kikowaena mamao (e like me HashiCorp Vault). Hoʻopaʻa mau ʻia nā kī ma ka ʻāina e wikiwiki i kā lākou kiʻi ʻana.

Hiki ke hoʻokaʻawale ʻia nā plugins i ʻelua mau ʻāpana:

  • Waihona kūloko. No ka laʻana, kahi faila kūloko (kapa mākou i kēia ʻano kī kī i ka faila).
  • Waihona mamao. No ka laʻana, Vault Server (kapa mākou i kēia he kī kī kīwī).

He mea koʻikoʻi kēia kaʻawale ʻana no ka mea, ʻokoʻa iki ke ʻano o ka mālama ʻana, ʻaʻole wale i ka wā e mālama a kiʻi i nā kī, akā i ka wā e holo ai.

I ka hoʻohana ʻana i kahi waihona waihona, i ka hoʻomaka ʻana, hoʻouka ʻia nā mea āpau o ka waihona i loko o ka cache: key id, key user, key type, a me ke kī ponoʻī.

I ka hihia o kahi hale kūʻai kikowaena (e like me Vault Server), ʻo ke kī id wale nō a me ka mea hoʻohana kī i hoʻouka ʻia i ka hoʻomaka ʻana, no laila ʻaʻole e lohi ka loaʻa ʻana o nā kī āpau i ka hoʻomaka. Hoʻouka ʻia nā kī me ka palaualelo. ʻO ia hoʻi, hoʻouka ʻia ke kī ponoʻī mai Vault wale nō i ka wā e pono ai. Ke hoʻoiho ʻia, hūnā ʻia ke kī i ka hoʻomanaʻo ʻaʻole pono ke kiʻi ʻia ma o nā pilina TLS i ka Vault Server i ka wā e hiki mai ana. A laila, e nānā kākou i ka ʻike i loaʻa ma ka hale kūʻai kī.

Aia ka ʻike nui i kēia mau mea:

  • kī id — mea hōʻike kī, no ka laʻana:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • ʻano kī — ʻano kī e pili ana i ka algorithm encryption i hoʻohana ʻia, nā waiwai hiki: "AES", "RSA" a i ʻole "DSA".
  • lōʻihi kī — ka lōʻihi kī ma nā paita, AES: 16, 24 a i ʻole 32, RSA 128, 256, 512 a me DSA 128, 256 a i ʻole 384.
  • mea hoʻohana - nona ke kī. Inā ʻo ke kī he ʻōnaehana, no ka laʻana, Master Key, a laila ua nele kēia kahua. Inā hana ʻia kahi kī me ka keyring_udf, a laila ʻike kēia kahua i ka mea nona ke kī.
  • ke kī ponoi

ʻIke ʻokoʻa ke kī e ka pālua: key_id, mea hoʻohana.

Aia kekahi ʻokoʻa i ka mālama ʻana a me ka holoi ʻana i nā kī.

ʻOi aku ka wikiwiki o ka mālama faila. Manaʻo paha ʻoe e kākau wale ana kahi hale kūʻai kī i ke kī i kahi faila i hoʻokahi manawa, akā ʻaʻole, aia nā mea hou aʻe ma aneʻi. Ke hana ʻia kahi hoʻololi mālama waihona, hana mua ʻia kahi kope kope o nā ʻike āpau. E ʻōlelo kākou ua kapa ʻia ka faila me my_biggest_secrets, a laila ʻo ke kope kope ʻo my_biggest_secrets.backup. A laila, hoʻololi ʻia ka cache (hoʻohui ʻia a holoi ʻia paha nā kī) a, inā kūleʻa nā mea āpau, hoʻihoʻi ʻia ka cache i kahi faila. I nā hihia koʻikoʻi, e like me ka hemahema o ka server, ʻike paha ʻoe i kēia faila hoʻihoʻi. Holoi ʻia ka waihona waihona i ka manawa aʻe e hoʻouka ʻia nā kī (maʻamau ma hope o ka hoʻomaka ʻana o ke kikowaena).

I ka mālama ʻana a i ʻole ka holoi ʻana i kahi kī i loko o kahi waihona kikowaena, pono e hoʻopili ka waihona i ka server MySQL me nā kauoha "hoʻouna i ke kī" / "noi kī hoʻopau".

E hoʻi kāua i ka wikiwiki hoʻomaka o ke kikowaena. Ma waho aʻe o ka hopena o ka wikiwiki o ka hoʻomaka ʻana e ka vault ponoʻī, aia nō hoʻi ka pilikia o ka nui o nā kī mai ka vault e pono ke kiʻi ʻia i ka hoʻomaka ʻana. ʻOiaʻiʻo, he mea koʻikoʻi kēia no ka mālama kikowaena. I ka hoʻomaka ʻana, nānā ke kikowaena i ke kī i koi ʻia no nā papa ʻaina / papaʻaina i hoʻopili ʻia a noi i ke kī mai ka waiho ʻana. Ma kahi kikowaena "maʻemaʻe" me Master Key encryption, pono e loaʻa hoʻokahi Master Key, pono e kiʻi ʻia mai ka waiho ʻana. Eia nō naʻe, koi ʻia ka helu nui o nā kī, no ka laʻana, ke hoʻihoʻi ka server backup i kahi waihona mai ke kikowaena mua. Ma ia mau hihia, pono e hāʻawi ʻia ka hoʻololi ʻana o ka Master Key. E uhi ʻia kēia i nā kikoʻī hou aʻe i nā ʻatikala e hiki mai ana, ʻoiai eia wau makemake e hoʻomaopopo he lōʻihi ka lōʻihi o ka hoʻohana ʻana o kahi kikowaena e hoʻohana ana i nā Master Keys nui e hoʻomaka ai, ʻoiai ke hoʻohana ʻana i kahi hale kūʻai kī ʻaoʻao server.

I kēia manawa e kamaʻilio hou kākou e pili ana i keyring_file. I koʻu hoʻomohala ʻana i ka keyring_file, ua hopohopo nō hoʻi au i ka nānā ʻana i nā loli keyring_file i ka wā e holo ana ke kikowaena. Ma 5.7, ua hana ʻia ka nānā ma muli o nā helu helu faila, ʻaʻole ia he hopena kūpono, a ma 8.0 ua hoʻololi ʻia me kahi checksum SHA256.

ʻO ka manawa mua ʻoe e holo ai i keyring_file, helu ʻia nā helu helu a me kahi checksum, i hoʻomanaʻo ʻia e ke kikowaena, a hoʻohana wale ʻia nā loli inā pili lākou. Ke hoʻololi ka faila, hoʻonui ʻia ka checksum.

Ua uhi mākou i nā nīnau he nui e pili ana i nā waihona kī. Eia nō naʻe, aia kekahi kumuhana koʻikoʻi i poina pinepine ʻia a hoʻomaopopo ʻole ʻia: kaʻana like ʻana i nā kī ma waena o nā kikowaena.

He aha kaʻu manaʻo? Pono kēlā me kēia kikowaena (no ka laʻana, Percona Server) i loko o ka pūʻulu he wahi kaʻawale ma ka Vault Server kahi e mālama ai ʻo Percona Server i kāna mau kī. Loaʻa i kēlā me kēia Master Key i mālama ʻia i ka waihona i ka GUID o ka Server Percona i loko o kona ʻike. No ke aha he mea nui? E noʻonoʻo ʻoe hoʻokahi wale nō Vault Server a me nā Server Percona a pau i loko o ka pūʻulu e hoʻohana i kēlā Vault Server hoʻokahi. Ua maopopo ka pilikia. Inā hoʻohana nā Servers Percona a pau i Master Key me ka ʻole o nā mea hōʻike kūʻokoʻa, e like me id = 1, id = 2, etc., a laila e hoʻohana nā kikowaena āpau o ka hui i ka Master Key hoʻokahi. ʻO ka mea a ka GUID e hāʻawi ai ʻo ia ka ʻokoʻa ma waena o nā kikowaena. No ke aha e kamaʻilio ai e pili ana i ke kaʻana ʻana i nā kī ma waena o nā kikowaena inā aia kahi GUID kūʻokoʻa? Aia kekahi plugin - keyring_udf. Me kēia plugin, hiki i kāu mea hoʻohana kikowaena ke mālama i kā lākou mau kī ma ke kikowaena Vault. Hiki ke pilikia ke hana ka mea hoʻohana i kī ma server1, no ka laʻana, a laila hoʻāʻo e hana i kahi kī me ka ID like ma server2, no ka laʻana:

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

E kali. Ke hoʻohana nei nā kikowaena ʻelua i ka Vault Server hoʻokahi, ʻaʻole anei e pau ka hana keyring_key_store ma server2? ʻO ka mea mahalo, inā ʻoe e hoʻāʻo e hana like ma hoʻokahi kikowaena, e loaʻa iā ʻoe kahi hewa:

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

Pololei, ua loaʻa mua ʻo ROB_1.

E kūkākūkā mua kākou i ka laʻana lua. E like me kā mākou i ʻōlelo ai ma mua, ʻo keyring_vault a i ʻole kekahi plugin keyring e hūnā i nā ID kī āpau i ka hoʻomanaʻo. No laila, ma hope o ka hana ʻana i kahi kī hou, ua hoʻohui ʻia ʻo ROB_1 i ka server1, a me ka hoʻouna ʻana i kēia kī iā Vault, ua hoʻohui pū ʻia ke kī i ka cache. I kēia manawa, ke hoʻāʻo nei mākou e hoʻohui i ke kī like i ka lua o ka manawa, ʻike ʻo keyring_vault inā aia ke kī i loko o ka cache a hoʻolei i kahi hewa.

I ka hihia mua, ʻokoʻa ke kūlana. Loaʻa i ka Server1 a me ka server2 nā huna huna. Ma hope o ka hoʻohui ʻana iā ROB_1 i ka hūnā kī ma server1 a me ka server Vault, ʻaʻole i hoʻokō ʻia ke kī huna ma server2. ʻAʻohe kī ROB_2 ma ka huna huna ma server1. No laila, ua kākau ʻia ke kī ROB_1 i ka keyring_key_store a i ke kikowaena Vault, nāna i hoʻololi maoli (!) i ka waiwai mua. I kēia manawa, ʻo ke kī ROB_1 ma ka kikowaena Vault ʻo 543210987654321. ʻO ka mea e mahalo ai, ʻaʻole e ālai ka server Vault i ia mau hana a hoʻololi maʻalahi i ka waiwai kahiko.

I kēia manawa hiki iā mākou ke ʻike i ke kumu he mea nui ka hoʻokaʻawale ʻana o ka server ma Vault - ke hoʻohana nei ʻoe i keyring_udf a makemake ʻoe e mālama i nā kī ma Vault. Pehea e hoʻokō ai i kēia kaʻawale ʻana ma kahi kikowaena Vault?

ʻElua ala e hoʻokaʻawale ai i Vault. Hiki iā ʻoe ke hana i nā wahi mauna like ʻole no kēlā me kēia kikowaena, a i ʻole e hoʻohana i nā ala like ʻole i loko o ka lae mauna hoʻokahi. Hōʻike maikaʻi ʻia kēia me nā laʻana. No laila, e nānā mua kākou i nā wahi mauna.

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

Maanei hiki iā ʻoe ke ʻike e hoʻohana ana ʻo server1 a me server2 i nā wahi mauna like ʻole. I ka wā e hoʻokaʻawale ai i nā ala, e like me kēia ka hoʻonohonoho:

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

I kēia hihia, hoʻohana nā kikowaena ʻelua i ka helu mauna hoʻokahi "mount_point", akā nā ala ʻokoʻa. Ke hana ʻoe i ka mea huna mua ma server1 me ka hoʻohana ʻana i kēia ala, hoʻokumu ʻo Vault server i kahi papa kuhikuhi "server1". No ka server2 ua like nā mea a pau. Ke holoi ʻoe i ka mea huna hope loa ma mount_point/server1 a i ʻole mount_point/server2, hoʻopau pū ka server Vault i kēlā mau papa kuhikuhi. Inā ʻoe e hoʻohana i ka hoʻokaʻawale ala, pono ʻoe e hana i hoʻokahi wale nō wahi mauna a hoʻololi i nā faila hoʻonohonoho i hiki i nā kikowaena ke hoʻohana i nā ala kaʻawale. Hiki ke hana ʻia kahi wahi mauna me ka noi HTTP. Me ka hoʻohana ʻana iā CURL hiki ke hana ʻia e like me kēia:

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

ʻO nā kahua āpau (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) pili i nā ʻāpana o ka faila hoʻonohonoho. ʻOiaʻiʻo, hiki iā ʻoe ke hoʻohana i nā pono Vault e hana like. Akā ʻoi aku ka maʻalahi o ka hana ʻana i kahi wahi mauna. Manaʻo wau e ʻike pono ʻoe i kēia ʻike a e ʻike mākou iā ʻoe ma nā ʻatikala aʻe o kēia pūʻulu.

Hoʻopili i ka MySQL: Keystore

E heluhelu hou:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka