ืืงืจืืช ืชืืืืช ืืจืฉืื ืืืฉื ืืงืืจืก
ืืฆืคื ืช ื ืชืื ืื ืฉืงืืคื (TDE) ืืืคืืขื ื
ืืืืืง ืืคืชืืืช MySQL
Keyring ืื ืชืืกืคืื ืืืืคืฉืจืื ืืฉืจืช ืืืฆืข ืฉืืืืชืืช, ืืืฆืืจ ืืืืืืง ืืคืชืืืช ืืงืืืฅ ืืงืืื (keyring_file) ืื ืืฉืจืช ืืจืืืง (ืืืื HashiCorp Vault). ืืคืชืืืช ืชืืื ืืืืืกื ืื ืืืืืื ืืงืืื ืืื ืืืจื ืืช ืฉืืืคืชื.
ื ืืชื ืืืืง ืชืืกืคืื ืืฉืชื ืงืืืืจืืืช:
- ืืืกืื ืืงืืื. ืืืืืื, ืงืืืฅ ืืงืืื (ืื ืื ื ืงืืจืืื ืืื ืืืืืง ืืคืชืืืช ืืืืกืก ืงืืฆืื).
- ืืืกืื ืืจืืืง. ืืืืืื, Vault Server (ืื ืื ื ืงืืจืืื ืืื ืืืืืง ืืคืชืืืช ืืืืกืก ืฉืจืช).
ืืคืจืื ืื ืืฉืืื ืืืืืื ืฉืกืืื ืืืกืื ืฉืื ืื ืืชื ืืืื ืืขื ืฉืื ื, ืื ืจืง ืืขืช ืืืกืื ืืฉืืืคื ืฉื ืืคืชืืืช, ืืื ืื ืืขืช ืืคืขืืชื.
ืืขืช ืฉืืืืฉ ืืืืกืื ืงืืฆืื, ืืขืช ืืืคืขืื, ืื ืชืืื ืืืืกืื ื ืืขื ืืืืืื: ืืืื ืืคืชื, ืืฉืชืืฉ ืืคืชื, ืกืื ืืคืชื ืืืืคืชื ืขืฆืื.
ืืืงืจื ืฉื ืื ืืช ืืฆื ืืฉืจืช (ืืืื Vault Server), ืจืง ืืืื ืืืคืชื ืืืฉืชืืฉ ืืืคืชื ื ืืขื ืื ืืขืช ืืืชืืื, ืื ืฉืงืืืช ืื ืืืคืชืืืช ืืื ื ืืืื ืืช ืืืคืขืื. ืืคืชืืืช ื ืืขื ืื ืืขืฆืืชืืื. ืืืืืจ, ืืืคืชื ืขืฆืื ื ืืขื ื-Vault ืจืง ืืืฉืจ ืืื ื ืืืฅ ืืคืืขื. ืืืืจ ืืืืจืื, ืืืคืชื ื ืฉืืจ ืืืืืจืื ืื ืฉืืื ืฆืืจื ืืืฉืช ืืืื ืืจื ืืืืืจื TLS ืืฉืจืช ืืืกืคืช ืืขืชืื. ืืืืจ ืืื, ืืื ื ืืื ืืืื ืืืืข ืงืืื ืืื ืืช ืืืคืชืืืช.
ืืืืืข ืืืจืืื ืืืื ืืช ืืืืจืื ืืืืื:
- ืืืื ืืคืชื - ืืืื ืืคืชื, ืืืืืื:
INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
- ืกืื ืืคืชื - ืกืื ืืคืชื ืืืืืกืก ืขื ืืืืืจืืชื ืืืฆืคื ื ืืฉืืืืฉ, ืขืจืืื ืืคืฉืจืืื: "AES", "RSA" ืื "DSA".
- ืืืจื ืืืคืชื - ืืืจื ืืคืชื ืืืชืื, AES: 16, 24 ืื 32, RSA 128, 256, 512 ื-DSA 128, 256 ืื 384.
- ืืืฉืชืืฉ - ืืขื ืืืคืชื. ืื ืืืคืชื ืืื ืืขืจืืช, ืืืฉื, ืืคืชื ืจืืฉื, ืื ืฉืื ืื ืจืืง. ืื ืืคืชื ื ืืฆืจ ืืืืฆืขืืช keyring_udf, ืฉืื ืื ืืืื ืืช ืืืขืืื ืฉื ืืืคืชื.
- ืืืคืชื ืขืฆืื
ืืืคืชื ืืืืื ืืืืคื ืืืืืื ืขื ืืื ืืืื: key_id, user.
ืืฉื ื ืื ืืืืืื ืืืืกืื ืืืืืงื ืฉื ืืคืชืืืช.
ืืืกืื ืงืืฆืื ืืืืจ ืืืชืจ. ืืืื ืชืืฉืื ืฉืื ืืช ืืคืชืืืช ืืื ืคืฉืื ืืืชืืช ืืช ืืืคืชื ืืงืืืฅ ืคืขื ืืืช, ืืื ืื, ืืฉ ืืื ืขืื ืืืจืื ืฉืงืืจืื. ืืื ืคืขื ืฉืืชืืฆืข ืฉืื ืื ืืืืกืื ืืงืืฆืื, ืขืืชืง ืืืืื ืฉื ืื ืืชืืื ื ืืฆืจ ืชืืืื. ื ื ืื ืฉืืงืืืฅ ื ืงืจื my_biggest_secrets, ืืื ืขืืชืง ืืืืืื ืืืื my_biggest_secrets.backup. ืืืืจ ืืื, ืืืืืื ืืฉืชื ื (ืืคืชืืืช ืืชืืืกืคืื ืื ื ืืืงืื) ืืื ืืื ืืฆืืื, ืืืืืื ืืืืคืก ืืงืืืฅ. ืืืงืจืื ื ืืืจืื, ืืืื ืืฉื ืืฉืจืช, ืืืชืื ืฉืชืจืื ืืช ืงืืืฅ ืืืืืื ืืื. ืงืืืฅ ืืืืืื ื ืืืง ืืคืขื ืืืื ืฉืืืคืชืืืช ื ืืขื ืื (ืืืจื ืืื ืืืืจ ืืคืขืื ืืืืฉ ืฉื ืืฉืจืช).
ืืขืช ืฉืืืจื ืื ืืืืงื ืฉื ืืคืชื ืืืืกืื ืฉืจืช, ืืืืกืื ืืืื ืืืชืืืจ ืืฉืจืช MySQL ืขื ืืคืงืืืืช "ืฉืื ืืช ืืืคืชื" / "ืืงืฉ ืืืืงืช ืืคืชื".
ืืืื ื ืืืืจ ืืืืืจืืช ืืืคืขืื ืฉื ืืฉืจืช. ืื ืืกืฃ ืืขืืืื ืฉืืืืจืืช ืืืฉืงื ืืืฉืคืขืช ืืืืกืคืช ืขืฆืื, ืืฉื ื ืื ืกืืืื ืฉื ืืื ืืคืชืืืช ืืืืกืคืช ืฆืจืื ืืืืืจ ืืืคืขืื. ืืืืื, ืื ืืฉืื ืืืืืื ืขืืืจ ืืืกืื ืฉืจืช. ืืขืช ืืืคืขืื, ืืฉืจืช ืืืืง ืืืื ืืคืชื ื ืืจืฉ ืืืืืืืช/ืืจืืื ืืืืืืช ืืืฆืคื ืื ืืืืงืฉ ืืช ืืืคืชื ืืืืืกืื. ืืฉืจืช "ื ืงื" ืขื ืืฆืคื ืช ืืคืชื ืจืืฉื, ืืืื ืืืืืช ืืคืชื ืจืืฉื ืืื, ืืืชื ืืฉ ืืืืืจ ืืืืืกืื. ืขื ืืืช, ืืืชืื ืฉืืืืจืฉ ืืกืคืจ ืืืื ืืืชืจ ืฉื ืืคืชืืืช, ืืืืืื, ืืืฉืจ ืฉืจืช ืืืืืื ืืฉืืืจ ืืืืื ืืืฉืจืช ืืจืืฉื. ืืืงืจืื ืืืื, ืืฉ ืืกืคืง ืกืืืื ืฉื ืืืคืชื ืืจืืฉื. ืื ืืืืกื ืืืชืจ ืคืืจืื ืืืืืจืื ืขืชืืืืื, ืื ืื ืืื ืื ื ืจืืฆื ืืฆืืื ืฉืืฉืจืช ืืืฉืชืืฉ ืืืกืคืจ ืืคืชืืืช ืืืกืืจ ืขืฉืื ืืืืืฉื ืืขื ืืืชืจ ืืื ืืืชืืื, ืืืืืื ืืืฉืจ ืืฉืชืืฉืื ืืืืืจ ืืคืชืืืช ืืฆื ืืฉืจืช.
ืขืืฉืื ืืืื ื ืืืจ ืงืฆืช ืืืชืจ ืขื keyring_file. ืืฉืคืืชืืชื keyring_file, ืืืืชื ืืืืื ืื ืืืื ืืื ืืืืืง ืฉืื ืืืื ื-keyring_file ืืืื ืฉืืฉืจืช ืคืืขื. ื-5.7 ืืืืืงื ืืืฆืขื ืขื ืกืื ืกืืืืกืืืงืช ืงืืฆืื, ืื ืฉืื ืืื ืคืชืจืื ืืืืืืื, ืื-8.0 ืืืืืฃ ื-SHA256 checksum.
ืืคืขื ืืจืืฉืื ื ืฉืืชื ืืคืขืื keyring_file, ืืืืฉืืื ืกืืืืกืืืงืช ืงืืฆืื ืืกืืื ืืืืงื, ืืฉืจ ื ืืืจืื ืขื ืืื ืืฉืจืช, ืืืฉืื ืืืื ืืืืืื ืจืง ืื ืื ืชืืืืื. ืืืฉืจ ืืงืืืฅ ืืฉืชื ื, ืกืืื ืืืืืงื ืืชืขืืื.
ืืืจ ืืืกืื ื ืฉืืืืช ืจืืืช ืขื ืืกืคืืช ืืคืชื. ืขื ืืืช, ืืฉื ื ื ืืฉื ืืฉืื ื ืืกืฃ ืฉืืขืืชืื ืงืจืืืืช ื ืฉืื ืื ืื ืืืื: ืฉืืชืืฃ ืืคืชืืืช ืืื ืฉืจืชืื.
ืื ืฉืื ื ืืชืืืื? ืืื ืฉืจืช (ืืืืืื, Percona Server) ืืืฉืืื ืืืื ืืืืืช ืืืงืื ื ืคืจื ื-Vault Server ืฉืื Percona Server ืืืื ืืืืกื ืืช ืืืคืชืืืช ืฉืื. ืื ืืคืชื ืจืืฉื ืฉื ืฉืืจ ืืืืกืื ืืืื ืืช ื-GUID ืฉื ืฉืจืช Percona ืืชืื ืืืืื ืฉืื. ืืื ืื ืืฉืื? ืชืืจ ืืขืฆืื ืฉืืฉ ืื ืจืง ืฉืจืช ืืกืคืช ืืื ืืื ืฉืจืชื Percona ืืืฉืืื ืืฉืชืืฉืื ืืืืชื ืฉืจืช ืืกืคืช ืืืื. ืืืขืื ื ืจืืืช ืืจืืจื. ืื ืื ืฉืจืชื Percona ืืฉืชืืฉื ืืืคืชื ืจืืฉื ืืื ืืืืื ืืืืืืืื, ืืืื id = 1, id = 2 ืืื', ืื ืื ืืฉืจืชืื ืืืฉืืื ืืฉืชืืฉื ืืืืชื ืืคืชื ืจืืฉื. ืื ืฉื-GUID ืืกืคืง ืืื ืืืืื ื ืืื ืฉืจืชืื. ืื ืืื ืืืืจ ืขื ืฉืืชืืฃ ืืคืชืืืช ืืื ืฉืจืชืื ืื ืืืจ ืงืืื GUID ืืืืืื? ืืฉ ืชืืกืฃ ื ืืกืฃ - keyring_udf. ืขื ืชืืกืฃ ืื, ืืฉืชืืฉ ืืฉืจืช ืฉืื ืืืื ืืืืกื ืืช ืืืคืชืืืช ืฉืื ืืฉืจืช ืืืกืคืช. ืืืขืื ืืชืจืืฉืช ืืืฉืจ ืืฉืชืืฉ ืืืฆืจ ืืคืชื ืืฉืจืช1, ืืืฉื, ืืืืืจ ืืื ืื ืกื ืืืฆืืจ ืืคืชื ืขื ืืืชื ืืืื ืืฉืจืช2, ืืืืืื:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 ะทะฝะฐัะธั ััะฟะตัะฝะพะต ะทะฐะฒะตััะตะฝะธะต
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1
ืึทืึฒืืึนืช. ืฉื ื ืืฉืจืชืื ืืฉืชืืฉืื ืืืืชื Vault Server, ืืื ืืคืื ืงืฆืื keyring_key_store ืื ืฆืจืืื ืืืืืฉื ืืฉืจืช2? ืืขื ืืื ืฉืื ืชื ืกื ืืขืฉืืช ืืช ืืืชื ืืืืจ ืืฉืจืช ืืื, ืชืงืื ืฉืืืื:
--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
select keyring_key_store('ROB_1','AES',"543210987654321");
0
ืื ื ืืื, ROB_1 ืืืจ ืงืืื.
ืชืืืื ื ืืื ืืืืืื ืืฉื ืืื. ืืคื ืฉืืืจื ื ืงืืื, keyring_vault ืื ืื ืชืืกืฃ ืืืืืง ืืคืชืืืช ืืืจ ืืืืกื ืืช ืื ืืืื ืืืคืชื ืืืืืจืื. ืืื, ืืืืจ ืืฆืืจืช ืืคืชื ืืืฉ, ROB_1 ืืชืืืกืฃ ืืฉืจืช1, ืืื ืืกืฃ ืืฉืืืืช ืืคืชื ืื ืืืกืคืช, ืืืคืชื ืืชืืืกืฃ ืื ืืืืืื. ืืขืช, ืืืฉืจ ืื ื ืื ืกืื ืืืืกืืฃ ืืช ืืืชื ืืคืชื ืคืขื ืฉื ืืื, keyring_vault ืืืืง ืืื ืืืคืชื ืงืืื ืืืืืื ืืืืจืง ืฉืืืื.
ืืืงืจื ืืจืืฉืื ืืืฆื ืฉืื ื. ืืฉืจืช1 ืืืฉืจืช2 ืืฉ ืืืืื ืื ื ืคืจืืื. ืืืืจ ืืืกืคืช ROB_1 ืืืืืื ืืืคืชืืืช ืืฉืจืช1 ืืืฉืจืช ืืืกืคืช, ืืืืื ืืืคืชืืืช ืืฉืจืช2 ืืื ื ืืกืื ืืจื. ืืื ืืคืชื ROB_2 ืืืืืื ืืฉืจืช1. ืื, ืืคืชื ROB_1 ื ืืชื ื-keyring_key_store ืืืฉืจืช Vault, ืฉืืืขืฉื ืืืืืฃ (!) ืืช ืืขืจื ืืงืืื. ืืขืช ืืืคืชื ROB_1 ืืฉืจืช ืืืกืคืช ืืื 543210987654321. ืืขื ืืื ืืฆืืื ืฉืฉืจืช ืืืกืคืช ืืื ื ืืืกื ืคืขืืืืช ืืืื ืืืืืืฃ ืืงืืืช ืืช ืืขืจื ืืืฉื.
ืืขืช ืื ื ืืืืืื ืืจืืืช ืืืืข ืืืืงืช ืฉืจืช ืืืกืคืช ืืืืื ืืืืืช ืืฉืืื - ืืืฉืจ ืืชื ืืฉืชืืฉ ื-keyring_udf ืืืจืฆืื ื ืืืืกื ืืคืชืืืช ืืืกืคืช. ืืืฆื ืืืฉืื ืืช ืืืคืจืื ืืื ืืฉืจืช Vault?
ืืฉื ื ืฉืชื ืืจืืื ืืืืืงื ืืืกืคืช. ืืชื ืืืื ืืืฆืืจ ื ืงืืืืช ืืจืืื ืฉืื ืืช ืขืืืจ ืื ืฉืจืช, ืื ืืืฉืชืืฉ ืื ืชืืืื ืฉืื ืื ืืชืื ืืืชื ื ืงืืืช ืืจืืื. ืื ืืืืืฉ ืืฆืืจื ืืืืื ืืืืชืจ ืขื ืืืืืืืช. ืื ืืืื ื ืกืชืื ืชืืืื ืขื ื ืงืืืืช ืืืจืืื ืืืืืืืช:
--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 = (...)
ืืื ืืชื ืืืื ืืจืืืช ืฉืฉืจืช1 ืืฉืจืช2 ืืฉืชืืฉืื ืื ืงืืืืช ืืจืืื ืฉืื ืืช. ืืขืช ืคืืฆืื ืื ืชืืืื, ืืชืฆืืจื ืชืืจืื ืื:
--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 = (...)
ืืืงืจื ืื, ืฉื ื ืืฉืจืชืื ืืฉืชืืฉืื ืืืืชื ื ืงืืืช ืืจืืื "mount_point", ืื ืื ืชืืืื ืฉืื ืื. ืืืฉืจ ืืชื ืืืฆืจ ืืช ืืกืื ืืจืืฉืื ืืฉืจืช1 ืืืืฆืขืืช ื ืชืื ืื, ืฉืจืช ืืืกืคืช ืืืฆืจ ืืืืืืืืช ืกืคืจืืืช "server1". ืขืืืจ server2 ืืื ืืืื. ืืืฉืจ ืืชื ืืืืง ืืช ืืกืื ืืืืจืื ื-mount_point/server1 ืื mount_point/server2, ืฉืจืช ืืืกืคืช ืืืืง ืื ืืช ืืกืคืจืืืช ืืืื. ืืืงืจื ืฉืืชื ืืฉืชืืฉ ืืืคืจืืช ื ืชืื, ืขืืื ืืืฆืืจ ืจืง ื ืงืืืช ืืจืืื ืืืช ืืืฉื ืืช ืืช ืงืืฆื ืืชืฆืืจื ืื ืฉืืฉืจืชืื ืืฉืชืืฉื ืื ืชืืืื ื ืคืจืืื. ื ืืชื ืืืฆืืจ ื ืงืืืช ืืจืืื ืืืืฆืขืืช ืืงืฉืช HTTP. ืืืืฆืขืืช CURL ื ืืชื ืืขืฉืืช ืืืช ืื:
curl -L -H "X-Vault-Token: TOKEN" โcacert VAULT_CA
--data '{"type":"generic"}' --request POST VAULT_URL/v1/sys/mounts/SECRET_MOUNT_POINT
ืื ืืฉืืืช (TOKEN, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) ืชืืืืื ืืคืจืืืจืื ืฉื ืงืืืฅ ืืชืฆืืจื. ืืืืื, ืืชื ืืืื ืืืฉืชืืฉ ืืืื ืืฉืืจืืช ืฉื Vault ืืื ืืขืฉืืช ืืช ืืืชื ืืืืจ. ืืื ืงื ืืืชืจ ืืืคืื ืืช ืืฆืืจืช ื ืงืืืช ืืจืืื ืืืืืืืืืช. ืื ื ืืงืืื ืฉืชืืฆื ืืืืข ืื ืฉืืืืฉื ืื ืชืจืื ืืืืืจืื ืืืืื ืืกืืจื ืื.
ืงืจื ืขืื:
ืืงืืจ: www.habr.com