MySQL இல் குறியாக்கம்: கீஸ்டோர்

படிப்புக்கான புதிய சேர்க்கை தொடங்கும் என்ற எதிர்பார்ப்பில் "தரவுத்தளம்" உங்களுக்கான பயனுள்ள கட்டுரையின் மொழிபெயர்ப்பை நாங்கள் தயார் செய்துள்ளோம்.

MySQL இல் குறியாக்கம்: கீஸ்டோர்

வெளிப்படையான தரவு குறியாக்கம் (TDE) தோன்றியது MySQL க்கான பெர்கோனா சர்வர் மற்றும் MySQL சிறிது நேரம். ஆனால் இது எப்படி வேலை செய்கிறது மற்றும் TDE உங்கள் சர்வரில் என்ன தாக்கத்தை ஏற்படுத்தும் என்று நீங்கள் எப்போதாவது யோசித்திருக்கிறீர்களா? இந்தக் கட்டுரைத் தொடரில், TDE உள்நாட்டில் எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம். எந்த குறியாக்கமும் வேலை செய்ய இது தேவை என்பதால், முக்கிய சேமிப்பகத்துடன் ஆரம்பிக்கலாம். MySQL/MySQLக்கான Percona சர்வரில் எப்படி என்க்ரிப்ஷன் வேலை செய்கிறது மற்றும் MySQLக்கான பெர்கோனா சர்வர் என்ன கூடுதல் அம்சங்களைக் கொண்டுள்ளது என்பதை நாம் கூர்ந்து கவனிப்போம்.

MySQL கீரிங்

கீரிங் என்பது லோக்கல் கோப்பில் (keyring_file) அல்லது ரிமோட் சர்வரில் (ஹாஷிகார்ப் வால்ட் போன்றவை) விசைகளை வினவ, உருவாக்க மற்றும் நீக்க சர்வரை அனுமதிக்கும் செருகுநிரல்கள் ஆகும். விசைகள் அவற்றின் மீட்டெடுப்பை விரைவுபடுத்த எப்போதும் உள்ளூரில் தற்காலிகமாக சேமிக்கப்படும்.

செருகுநிரல்களை இரண்டு வகைகளாகப் பிரிக்கலாம்:

  • உள்ளூர் சேமிப்பு. எடுத்துக்காட்டாக, ஒரு உள்ளூர் கோப்பு (இதை கோப்பு அடிப்படையிலான கீரிங் என்று அழைக்கிறோம்).
  • தொலை சேமிப்பு. எடுத்துக்காட்டாக, வால்ட் சர்வர் (இதை சர்வர் அடிப்படையிலான கீரிங் என்கிறோம்).

இந்த பிரிப்பு முக்கியமானது, ஏனெனில் பல்வேறு வகையான சேமிப்பகங்கள் விசைகளை சேமிக்கும் மற்றும் மீட்டெடுக்கும் போது மட்டுமின்றி, அவற்றை இயக்கும் போதும் சற்று வித்தியாசமாக செயல்படுகின்றன.

கோப்பு சேமிப்பகத்தைப் பயன்படுத்தும் போது, ​​தொடக்கத்தில், சேமிப்பகத்தின் முழு உள்ளடக்கங்களும் தற்காலிக சேமிப்பில் ஏற்றப்படும்: முக்கிய ஐடி, முக்கிய பயனர், முக்கிய வகை மற்றும் விசையே.

சர்வர் பக்க ஸ்டோரில் (வால்ட் சர்வர் போன்றவை), தொடக்கத்தில் முக்கிய ஐடி மற்றும் முக்கிய பயனர் மட்டுமே ஏற்றப்படும், எனவே அனைத்து விசைகளையும் பெறுவது தொடக்கத்தை மெதுவாக்காது. சாவிகள் சோம்பேறித்தனமாக ஏற்றப்படுகின்றன. அதாவது, விசை உண்மையில் தேவைப்படும்போது மட்டுமே வால்ட்டிலிருந்து ஏற்றப்படுகிறது. பதிவிறக்கம் செய்தவுடன், விசை நினைவகத்தில் தற்காலிகமாக சேமிக்கப்படுகிறது, இதனால் எதிர்காலத்தில் வால்ட் சேவையகத்திற்கான 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, பயனர்.

விசைகளை சேமிப்பதிலும் நீக்குவதிலும் வேறுபாடுகள் உள்ளன.

கோப்பு சேமிப்பு வேகமானது. ஒரு முக்கிய அங்காடியானது ஒரு கோப்பின் விசையை ஒருமுறை எழுதுகிறது என்று நீங்கள் நினைக்கலாம், ஆனால் இல்லை, இங்கே இன்னும் நிறைய நடக்கிறது. கோப்பு சேமிப்பக மாற்றம் செய்யப்படும் போதெல்லாம், எல்லா உள்ளடக்கத்தின் காப்பு பிரதியும் முதலில் உருவாக்கப்படும். கோப்பு my_biggest_secrets என்று அழைக்கப்படுகிறது, பிறகு காப்பு பிரதி my_biggest_secrets.backup ஆக இருக்கும். அடுத்து, கேச் மாற்றப்பட்டது (விசைகள் சேர்க்கப்படும் அல்லது நீக்கப்படும்) மற்றும், எல்லாம் வெற்றிகரமாக இருந்தால், கேச் ஒரு கோப்பில் மீட்டமைக்கப்படும். சேவையக செயலிழப்பு போன்ற அரிதான சந்தர்ப்பங்களில், இந்த காப்பு கோப்பை நீங்கள் பார்க்கலாம். அடுத்த முறை விசைகள் ஏற்றப்படும் போது காப்பு கோப்பு நீக்கப்படும் (பொதுவாக சர்வர் மறுதொடக்கம் செய்யப்பட்ட பிறகு).

சேவையக சேமிப்பகத்தில் ஒரு விசையைச் சேமிக்கும்போது அல்லது நீக்கும்போது, ​​சேமிப்பகம் MySQL சேவையகத்துடன் “விசையை அனுப்பு” / “கோரிக்கை விசையை நீக்குதல்” கட்டளைகளுடன் இணைக்க வேண்டும்.

சேவையக தொடக்க வேகத்திற்கு திரும்புவோம். வால்ட் மூலம் ஏவுதலின் வேகம் பாதிக்கப்படுவதுடன், தொடக்கத்தில் பெட்டகத்திலிருந்து எத்தனை விசைகளை மீட்டெடுக்க வேண்டும் என்ற சிக்கலும் உள்ளது. நிச்சயமாக, இது சேவையக சேமிப்பகத்திற்கு மிகவும் முக்கியமானது. தொடக்கத்தில், மறைகுறியாக்கப்பட்ட அட்டவணைகள்/டேபிள்ஸ்பேஸ்களுக்கு எந்த விசை தேவை என்பதை சர்வர் சரிபார்த்து, சேமிப்பகத்திலிருந்து விசையைக் கோருகிறது. முதன்மை விசை குறியாக்கத்துடன் கூடிய "சுத்தமான" சர்வரில், ஒரு முதன்மை விசை இருக்க வேண்டும், இது சேமிப்பகத்திலிருந்து மீட்டெடுக்கப்பட வேண்டும். இருப்பினும், அதிக எண்ணிக்கையிலான விசைகள் தேவைப்படலாம், உதாரணமாக, காப்புப்பிரதி சேவையகம் முதன்மை சேவையகத்திலிருந்து காப்புப்பிரதியை மீட்டெடுக்கும் போது. இதுபோன்ற சந்தர்ப்பங்களில், முதன்மை விசையின் சுழற்சியை வழங்க வேண்டும். இது எதிர்கால கட்டுரைகளில் விரிவாக விவரிக்கப்படும், இருப்பினும் பல முதன்மை விசைகளைப் பயன்படுத்தும் சேவையகம் தொடங்குவதற்கு சிறிது நேரம் ஆகலாம் என்பதை இங்கே நான் கவனிக்க விரும்புகிறேன், குறிப்பாக சர்வர் பக்க கீ ஸ்டோரைப் பயன்படுத்தும் போது.

இப்போது keyring_file பற்றி இன்னும் கொஞ்சம் பேசலாம். நான் keyring_file ஐ உருவாக்கும் போது, ​​சர்வர் இயங்கும் போது keyring_file மாற்றங்களை எவ்வாறு சரிபார்க்கலாம் என்பது குறித்தும் நான் கவலைப்பட்டேன். 5.7 இல், கோப்பு புள்ளிவிவரங்களின் அடிப்படையில் சரிபார்ப்பு செய்யப்பட்டது, இது ஒரு சிறந்த தீர்வு அல்ல, மேலும் 8.0 இல் அது SHA256 செக்சம் மூலம் மாற்றப்பட்டது.

நீங்கள் முதல் முறையாக keyring_file ஐ இயக்கும் போது, ​​கோப்பு புள்ளிவிவரங்கள் மற்றும் செக்சம் கணக்கிடப்படும், அவை சர்வரால் நினைவில் இருக்கும், மேலும் மாற்றங்கள் பொருந்தினால் மட்டுமே பயன்படுத்தப்படும். கோப்பு மாறும்போது, ​​செக்சம் புதுப்பிக்கப்படும்.

முக்கிய பெட்டகங்களைப் பற்றிய பல கேள்விகளை நாங்கள் ஏற்கனவே உள்ளடக்கியுள்ளோம். இருப்பினும், அடிக்கடி மறக்கப்படும் அல்லது தவறாகப் புரிந்துகொள்ளப்படும் மற்றொரு முக்கியமான தலைப்பு உள்ளது: சர்வர்கள் முழுவதும் விசைகளைப் பகிர்தல்.

நான் என்ன சொல்ல வருகிறேனென்றால்? கிளஸ்டரில் உள்ள ஒவ்வொரு சேவையகமும் (எடுத்துக்காட்டாக, பெர்கோனா சேவையகம்) வால்ட் சேவையகத்தில் ஒரு தனி இருப்பிடத்தைக் கொண்டிருக்க வேண்டும், அதில் பெர்கோனா சேவையகம் அதன் விசைகளைச் சேமிக்க வேண்டும். சேமிப்பகத்தில் சேமிக்கப்பட்ட ஒவ்வொரு முதன்மை விசையும் அதன் அடையாளங்காட்டியில் பெர்கோனா சேவையகத்தின் GUID ஐக் கொண்டுள்ளது. அது ஏன் முக்கியம்? உங்களிடம் ஒரே ஒரு வால்ட் சர்வர் மட்டுமே உள்ளது மற்றும் கிளஸ்டரில் உள்ள அனைத்து பெர்கோனா சர்வர்களும் அந்த ஒற்றை வால்ட் சேவையகத்தைப் பயன்படுத்துகின்றன என்று கற்பனை செய்து பாருங்கள். பிரச்சனை வெளிப்படையாகத் தெரிகிறது. ஐடி = 1, ஐடி = 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

காத்திரு. இரண்டு சேவையகங்களும் ஒரே வால்ட் சேவையகத்தைப் பயன்படுத்துகின்றன, சர்வர்2 இல் keyring_key_store செயல்பாடு தோல்வியடைய வேண்டாமா? சுவாரஸ்யமாக, நீங்கள் ஒரு சேவையகத்தில் இதைச் செய்ய முயற்சித்தால், நீங்கள் ஒரு பிழையைப் பெறுவீர்கள்:

--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 இல் சேர்க்கப்பட்டது, மேலும் இந்த விசையை வால்ட்டுக்கு அனுப்புவதுடன், விசையும் தற்காலிக சேமிப்பில் சேர்க்கப்படும். இப்போது, ​​அதே விசையை நாம் இரண்டாவது முறையாகச் சேர்க்க முயலும்போது, ​​கீரிங்_வால்ட், கேச் சேமிப்பில் உள்ளதா என்பதைச் சரிபார்த்து, பிழையை ஏற்படுத்துகிறது.

முதல் வழக்கில், நிலைமை வேறுபட்டது. சர்வர்1 மற்றும் சர்வர்2 தனித்தனி கேச்களைக் கொண்டுள்ளன. சர்வர்1 மற்றும் வால்ட் சர்வரில் உள்ள முக்கிய தற்காலிக சேமிப்பில் ROB_1 ஐச் சேர்த்த பிறகு, சர்வர்2 இல் உள்ள முக்கிய கேச் ஒத்திசைவில் இல்லை. சர்வர்2 இல் உள்ள தற்காலிக சேமிப்பில் ROB_1 விசை இல்லை. எனவே, ROB_1 விசை keyring_key_store மற்றும் Vault சேவையகத்திற்கு எழுதப்படுகிறது, இது உண்மையில் முந்தைய மதிப்பை மேலெழுதுகிறது (!). இப்போது வால்ட் சர்வரில் உள்ள ROB_1 விசை 543210987654321 ஆகும். சுவாரஸ்யமாக, வால்ட் சர்வர் இதுபோன்ற செயல்களைத் தடுக்காது மற்றும் பழைய மதிப்பை எளிதாக மேலெழுதும்.

நீங்கள் keyring_udf ஐப் பயன்படுத்தும்போது மற்றும் வால்ட்டில் விசைகளைச் சேமிக்க விரும்பும்போது - வால்ட்டில் சர்வர் பகிர்வு ஏன் முக்கியமானது என்பதை இப்போது பார்க்கலாம். வால்ட் சர்வரில் இந்த பிரிவினை எவ்வாறு அடைவது?

வால்ட் பிரிக்க இரண்டு வழிகள் உள்ளன. ஒவ்வொரு சேவையகத்திற்கும் வெவ்வேறு மவுண்ட் பாயிண்ட்களை நீங்கள் உருவாக்கலாம் அல்லது ஒரே மவுண்ட் பாயிண்டிற்குள் வெவ்வேறு பாதைகளைப் பயன்படுத்தலாம். இது சிறந்த எடுத்துக்காட்டுகளுடன் விளக்கப்பட்டுள்ளது. எனவே முதலில் தனிப்பட்ட மவுண்ட் புள்ளிகளைப் பார்ப்போம்:

--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 இல் முதல் ரகசியத்தை உருவாக்கும்போது, ​​வால்ட் சர்வர் தானாகவே “சர்வர்1” கோப்பகத்தை உருவாக்குகிறது. சர்வர் 2 க்கு எல்லாம் ஒத்திருக்கிறது. நீங்கள் mount_point/server1 அல்லது mount_point/server2 இல் உள்ள கடைசி ரகசியத்தை நீக்கும் போது, ​​Vault சர்வர் அந்த கோப்பகங்களையும் நீக்குகிறது. நீங்கள் பாதை பிரிப்பைப் பயன்படுத்தினால், நீங்கள் ஒரே ஒரு மவுண்ட் பாயிண்ட்டை உருவாக்க வேண்டும் மற்றும் உள்ளமைவு கோப்புகளை மாற்ற வேண்டும், இதனால் சேவையகங்கள் தனி பாதைகளைப் பயன்படுத்துகின்றன. 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) உள்ளமைவு கோப்பின் அளவுருக்களுக்கு ஒத்திருக்கும். நிச்சயமாக, நீங்கள் அதைச் செய்ய வால்ட் பயன்பாடுகளைப் பயன்படுத்தலாம். ஆனால் மவுண்ட் பாயின்டை உருவாக்குவதை தானியக்கமாக்குவது எளிது. இந்தத் தகவல் உங்களுக்கு பயனுள்ளதாக இருக்கும் என்று நம்புகிறேன், இந்தத் தொடரின் அடுத்த கட்டுரைகளில் உங்களைப் பார்ப்போம்.

MySQL இல் குறியாக்கம்: கீஸ்டோர்

மேலும் படிக்க:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்