ការគ្រប់គ្រងក្នុង 21-compliance.md ផ្នែក 14 ដែលអ្នកសវនកម្មសុំតាមឈ្មោះ។ ទំព័រនេះជាដំណើរការ។ កំណត់ត្រាដែលវាផលិតជាភស្តុតាង។
សោទាំងនេះ
លិខិតសម្គាល់ដែលបានរក្សាទុកនីមួយៗត្រូវបានបិទភ្ជិតជាមួយសោអ៊ីនគ្រីបទិន្នន័យថ្មី (DEK)។ DEK ត្រូវបានរុំដោយសោ master (KEK) ហើយយោងនៃសោ master ត្រូវបានរក្សាទុកនៅជាប់វា (key_ref ឬយោងខាងក្នុងតម្លៃដែលបានផ្គរ)។ ការបង្វិលសោ master រុំ DEK ឡើងវិញ។ វាមិនដែលឌិគ្រីប ឬអ៊ីនគ្រីបលិខិតសម្គាល់ឡើងវិញទេ។
| ការកំណត់ | អត្ថន័យ |
|---|---|
QUIRE_MASTER_KEY |
សោ master បច្ចុប្បន្ន៖ 32 បៃ base64។ សំណង់ថ្មីនីមួយៗត្រូវបានរុំក្រោមវា |
QUIRE_MASTER_KEY_VERSION |
ស្លាកកំណែរបស់វា។ v1 នៅពេលមិនបានកំណត់។ បង្កើនវារាល់ពេលអ្នកផ្លាស់ប្តូរសោ |
QUIRE_MASTER_KEY_RETIRED |
សោមុនៗដែលបានរក្សាសំណង់អាចនៅតែស្ថិតក្រោម ជា v1=<base64>,v0=<base64>។ អាន មិនដែលសរសេរទេ |
ស្រទាប់ web worker និងពាក្យបញ្ជា bun run kek:rotate អានការកំណត់ទាំងបីដដែល។ ពួកគេត្រូវតែមានតម្លៃដដែលទាំងអស់ ឬមួយក្នុងចំណោមពួកគេមិនអាចបើកអ្វីដែលមួយផ្សេងបានបិទភ្ជិត។
គ្មាន QUIRE_MASTER_KEY ប្រព័ន្ធផ្សេងៗនីមួយៗរក្សាសោដែលវាបង្កើតពី QUIRE_SECRET_KEY។ នេះដំណើរការ។ ទំព័រសុខភាពប្រព័ន្ធបង្ហាញវាជាថយចុះ ហើយវានៅតែអាចអានបានបន្ទាប់ពីអ្នកកំណត់សោ master ដែលជារបៀបដែលការបង្វិលដំបូងផ្លាស់ប្តូរអ្វីៗចេញពីវា។ អ្នកណាដែលអាចអានបរិស្ថានដំណើរការអាចឌិគ្រីបលិខិតសម្គាល់ដែលបានរក្សាទុកទាំងអស់ ដូច្នេះការដំឡើងផលិតគួរតែមានសោ master ដែលរក្សាក្នុងហាងសំណង់ ហើយមិននៅក្នុងការបម្រុងទុកដដែលជាមួយមូលដ្ឋានទិន្នន័យ។
ការបង្វិល
អាយុសោបង្ហាញលើ Platform console, Security, Master key ហើយជាម៉ែត្រ quire.secrets.master_key.age (ថ្ងៃ)។ កាលវិភាគប្រចាំថ្ងៃ platform.key_age (03:41 UTC) សរសេរធាតុរំលឹកទៅខ្សែសវនកម្មប្រព័ន្ធនៅពេលសោឈានដល់ 365 ថ្ងៃ ហើយម្តងទៀតរៀងរាល់ 30 ថ្ងៃរហូតដល់វាត្រូវបានបង្វិល។ បង្វិលនៅពេលរំលឹក ហើយរាល់ពេលសោអាចត្រូវបានប៉ះពាល់។
- បង្កើតសោថ្មី៖
openssl rand -base64 32។ - កំណត់
QUIRE_MASTER_KEYទៅវា ហើយQUIRE_MASTER_KEY_VERSIONទៅស្លាកបន្ទាប់ (v2)។ ផ្លាស់ទីសោចាស់ទៅQUIRE_MASTER_KEY_RETIREDជាv1=<old base64>។ រក្សាច្បាប់ចម្លងនៃទាំងពីរនៅកន្លែងផ្សេងក្រៅពីម៉ាស៊ីននេះ។ - ដាក់ស្តារស្រទាប់ web និង worker ជាមួយការកំណត់ថ្មី។ សំណង់ថ្មីឥឡូវនេះត្រូវបានរុំក្រោម
env:QUIRE_MASTER_KEY:v2។ ចាស់ៗនៅតែបើកតាមសោដែលបានដក។ - សុំការបង្វិល ជាមួយមូលហេតុដែលនឹងស្ថិតក្នុងផ្លូវសវនកម្ម៖
- ក្នុងកុងសូល៖ Security, Master key, Rotate the master key។ ឬ
- លើ shell ជាមួយបរិស្ថានដដែល៖
bun run kek:rotate request --reason "Annual rotation, ticket SEC-114"។
- worker រុំចំណុំមួយក្នុងមួយនាទី (កាលវិភាគ
platform.key_rotationរបស់ scheduler) ហើយបន្តបន្ទាប់ពីការចាប់ផ្តើមឡើងវិញ។ ដើម្បីបញ្ចប់វាក្នុងអង្គឯងមួយ៖bun run kek:rotate run។ តាមដានវាជាមួយbun run kek:rotate status។ - នៅពេលកំណត់ត្រាបង្ហាញថាការបង្វិលបានបញ្ចប់ជាមួយ zero unresolved និង zero failed យកសោដែលបានដកចេញពី
QUIRE_MASTER_KEY_RETIREDហើយដាក់ស្តារឡើងវិញ។ រហូតដល់ពេលនោះរក្សាវា៖ តម្លៃដែលវាមិនអាចផ្លាស់ទីបាននៅតែរុំក្រោមសោចាស់។
អ្វីដែលការងារដើរ
ឃ្លាំងទាំងអស់ដែលកាន់ DEK ដែលបានរុំ៖ ទាំងនោះក្នុង SEALED_STORES (apps/worker/src/key-rotation.ts)។ ឃ្លាំងមូលដ្ឋានទិន្នន័យត្រួតពិនិត្យដើរលើមូលដ្ឋានទិន្នន័យត្រួតពិនិត្យ។ ឃ្លាំងអង្គការដើរមួយអង្គការម្តងក្រោមសុវត្ថិភាពជួរដេក ក្នុងមូលដ្ឋានទិន្នន័យណាដែលកាន់អង្គការនោះ ដូច្នេះ tenant ដែលខ្ទាស់ទៅមូលដ្ឋានទិន្នន័យលាក់ត្រូវបានបង្វិលក្នុងមូលដ្ឋានទិន្នន័យនោះ។ ការសាកល្បងបរាជ័យនៅពេល schema ទទួលជួរសោដែលបានរុំដែលបញ្ជីមិនដាក់ឈ្មោះ ហើយមួយទៀតនៅពេលការត្រួតពិនិត្យលិខិតសម្គាល់ចាត់ថ្នាក់ជួរដែលបានបិទភ្ជិតដែលបញ្ជីខក។
កំណត់ត្រា
ops.key_rotation៖ ជួរមួយក្នុងមួយការបង្វិល ជាមួយមូលហេតុរបស់វា អ្នកណាបានសុំ សភាពរបស់វា និងចំនួនសរុបរបស់វា (បានរុំឡើងវិញ បានចុងក្រោយរួចហើយ មិនដោះស្រាយ បរាជ័យ)។ops.key_rotation_progress៖ ជួរមួយក្នុងមួយឃ្លាំង និងវិស័យនៅពេលបានដើរ ជាមួយយោងសោដែលវាមិនអាចអានបាន និងប៉ុន្មានតម្លៃស្ថិតក្រោមនីមួយៗ។ ការបង្វិលដែលបានបន្តរំលងទាំងនេះ។- ខ្សែសវនកម្មប្រព័ន្ធ៖
platform/key_rotation_request(ជាមួយមូលហេតុ)platform/key_rotation_storeមួយក្នុងមួយឃ្លាំងជាមួយចំនួនរបស់វា ហើយplatform/key_rotation_completeឬplatform/key_rotation_fail។platform/key_age_reminderសម្រាប់ការរំលឹក។ - ម៉ែត្រ៖
quire.secrets.master_key.ageនិងquire.secrets.rewrap.outstanding(តម្លៃដែលការបង្វិលចុងក្រោយមិនអាចផ្លាស់ទីបាន)។
នៅពេលតម្លៃមិនដោះស្រាយ
តម្លៃដែលមិនដោះស្រាយត្រូវបានរុំក្រោមយោងសោដែលការដំឡើងនេះមិនកាន់ ឬមិនស្ថិតក្នុងទម្រង់ដែលជួររបស់វាសន្យា។ កំណត់វឌ្ឍនភាពដាក់ឈ្មោះយោង (ឧទាហរណ៍ env:QUIRE_MASTER_KEY:v0 (unreadable))។ ស្តារសោនោះចូល QUIRE_MASTER_KEY_RETIRED ហើយដំណើរការការបង្វិលមួយទៀត ឬបើសោបាត់ជានិច្ច ឱ្យអ្នកគ្រប់គ្រងនៃអង្គការនោះបញ្ចូលលិខិតសម្គាល់ម្តងទៀត៖ វាត្រូវបានបិទភ្ជិតក្រោមសោបច្ចុប្បន្ន។ ការបង្វិលដែលបរាជ័យបង្ហាញកំហុសរបស់ពួកវាលើកំណត់ត្រា។ កែមូលហេតុ ហើយសុំម្តងទៀត។
សោហត្ថលេខា
ដាច់ពីសោ master៖ អង្គការនីមួយៗហត្ថលេខាថូខេន OpenID Connect និងសារ LTI របស់វាជាមួយសោ RSA ផ្ទាល់ ដែលបានផ្សាយនៅ /.well-known/jwks.json។ គ្មានអ្វីនៅទីនេះត្រូវការអ្នកប្រតិបត្តិករទេ។ កាលវិភាគរាល់ម៉ោង platform.signing_keys ផ្សាយអ្នកបន្តបួនថ្ងៃមុននឹងសោបច្ចុប្បន្ន 90 ថ្ងៃរបស់វាអស់។ មួយសប្តាហ៍ក្រោយមកអ្នកបន្តចាប់ផ្តើមហត្ថលេខា ហើយសោចាស់ក្លាយជាកំពុងដក។ 90 ថ្ងៃបន្ទាប់មកសោចាស់ត្រូវបានលុប ហើយចេញពីបញ្ជីសោ។ ជំហាននីមួយៗជាធាតុ platform/signing_key_advance លើខ្សែសវនកម្មប្រព័ន្ធ។
ដើម្បីជំនួសសោរបស់អង្គការមួយមុនពេល ឧទាហរណ៍បន្ទាប់ពីការប៉ះពាល់៖
- ក្នុងកុងសូល៖ Security, Master key, Publish a new signing key (ត្រូវការ
platform/keys_manage)។ ឬ - លើ shell ជាមួយបរិស្ថានរបស់ worker៖
bun run kek:rotate signing-keys rotate --tenant <slug or id> --reason "Key exposed, INC-3310"។bun run kek:rotate signing-keys statusរាយសោរបស់អង្គការនីមួយៗតាមដំណាក់ការ។
សោថ្មីត្រូវបានផ្សាយភ្លាមៗ ហើយចាប់ផ្តើមហត្ថលេខាបន្ទាប់ពីបួនថ្ងៃ នៅពេលសោបច្ចុប្បន្នដក។ សប្តាហ៍នេះត្រូវបានគិតពិចារណា៖ ភាគីដែលពឹងផ្អែកផ្ទុកបញ្ជីសោ ហើយគម្លាតខ្លីជាងបរាជ័យឧបករណ៍ទាំងអស់ក្នុងពេលតែមួយ។ សោដែលកំពុងដកនៅតែស្ថិតក្នុងបញ្ជីសោ 90 ថ្ងៃបន្ថែមទៀត ដូច្នេះថូខេនដែលវាបានហត្ថលេខារួចនៅតែផ្ទៀងផ្ទាត់បាន។ បើការប៉ះពាល់មានន័យថាវាត្រូវឈប់ទទួលទុកចិត្តមុនពេល ការលុបជួររបស់វាជាការផ្លាស់ប្តូរដែលបានធ្វើជាមួយការចូលដំណើរការមូលដ្ឋានទិន្នន័យផ្ទាល់របស់អ្នកប្រតិបត្តិករក្រោមកំណត់ត្រាផ្លាស់ប្តូរ (ការចូលប្រើបំពេញអាសន្នតែអាន) ហើយថូខេនដែលបានហត្ថលេខាជាមួយវាបន្ទាប់មកបរាជ័យការផ្ទៀងផ្ទាត់។ ការបង្វិលដែលត្រូវបានបង្ខំជា platform/signing_key_rotate ក្នុងខ្សែសវនកម្ម ជាមួយមូលហេតុ។ worker ត្រូវការការកំណត់ QUIRE_MASTER_KEY ដដែលជាមួយស្រទាប់ web ដើម្បីរុំសោថ្មី។ bun run kek:rotate សម្រាប់សោ master រុំសោហត្ថលេខាឡើងវិញជាមួយអ្វីៗផ្សេងទាំងអស់ (oauth_signing_key ស្ថិតក្នុង SEALED_STORES)។
ការចូលផលិតបំពេញអាសន្ន
គ្មានអ្នកណាកាន់ការចូលអចិន្រ្តៃយ៍ទៅកាន់ផលិតទេ។ នៅពេលមានអ្វីមិនអាចរង់ចាំបាន ម្ចាស់មួយរូបចេញការអនុញ្ញាតបំពេញអាសន្ន៖ Platform console, Security, Break-glass access។
- ការអនុញ្ញាតមានវិស័យ (អង្គការមួយ ឬបញ្ជីប្រព័ន្ធ) មូលហេតុយ៉ាងតិច 20 តួអក្សរដែលដាក់ឈ្មោះហេតុការណ៍ ឬសំណើ និងបង្អួចពី 5 ដល់ 240 នាទី។ វាផុតកំណត់ដោយខ្លួនឯង៖ វាត្រូវបានពិនិត្យប្រឆាំងនឹងនាឡិកាលើសេចក្តីថ្លែងនីមួយៗ។
- វាអាចត្រូវបានចេញឱ្យម្ចាស់ដែលចេញវា ឬឱ្យម្ចាស់ផ្សេង (ទម្រង់ពីរនាក់)។ តែមនុស្សដែលវាត្រូវបានចេញឱ្យប៉ុណ្ណោះអាចប្រើវា។ ការចេញត្រូវការ
platform/break_glass_issueហើយការប្រើត្រូវការplatform/break_glass_use។ ទាំងពីរជាម្ចាស់តែប៉ុណ្ណោះតាមលំនាំដើម។ - សេចក្តីថ្លែងដំណើរការតាម gateway មិនមែនលើការចូលមូលដ្ឋានទិន្នន័យទេ៖ តែអាន មួយក្នុងពេលតែមួយ កំណត់ទៅអង្គការ ឬបញ្ជីត្រួតពិនិត្យ ជាមួយការផុតកំណត់ប្រាំវិនាទី និងយ៉ាងច្រើន 500 ជួរ។ តម្លៃ Binary ត្រូវបានបង្ហាញតាមទំហំ។
- ខ្សែសវនកម្មប្រព័ន្ធកត់ត្រាការចេញ (ជាមួយមូលហេតុ) ការដក សេចក្តីថ្លែងនីមួយៗមុនវាដំណើរការ (
platform/break_glass_statementដែលបដិសេធជាមួយលទ្ធផលdenied) និងលទ្ធផលនីមួយៗ (platform/break_glass_result)។ops.break_glass_statementកាន់ id ធាតុសវនកម្ម ដូច្នេះកំណត់ត្រាការចេញភ្ជាប់ទៅធាតុសវនកម្មរបស់វា។ - ការសរសេរមិនត្រូវបានផ្តល់ទេ។ ការផ្លាស់ប្តូរដែលមិនអាចរង់ចាំកំណែប្រើការចូលមូលដ្ឋានទិន្នន័យផ្ទាល់របស់អ្នកប្រតិបត្តិករក្រោមកំណត់ត្រាផ្លាស់ប្តូរផ្ទាល់របស់វា ក្រៅផលិតផលនេះ ហើយកំណត់ត្រាគួរតែយោងលេខសំគាល់ហេតុការណ៍ដែលបានប្រើនៅទីនេះ។
ហេតុអ្វីមិនចេញលិខិតសម្គាល់មូលដ្ឋានទិន្ន័យ៖ ការចូល Postgres នៅសល់អាយុជាង session ដែលសុំវា កំណត់ផ្លូវសុវត្ថិភាពជួរដេកដែលកម្មវិធីពឹងផ្អែក ហើយមិនអាចសរសេរទៅខ្សែសវនកម្មនៃផលិតផលនេះបានទេ ដូច្នេះសេចក្តីថ្លែងរបស់វានឹងត្រូវបានសវនកម្មតែដល់អ្នកណាបានផ្ញើកំណត់ត្រាម៉ាស៊ីនបម្រើប៉ុណ្ណោះ។ gateway ធ្វើឱ្យផ្លូវសវនកម្មជាគុណសមត្ថិភាពនៃការចូល ជំនួសការអនុវត្តជុំវិញវា។
ដើម្បីឆ្លើយសំណើសវនកម្ម៖ រាយការអនុញ្ញាតក្នុងរយៈពេល (Break-glass access) បើកប្រវត្តិនៃការអនុញ្ញាតមួយសម្រាប់សេចក្តីថ្លែង និង id ធាតុសវនកម្ម ហើយអានធាតុទាំងនោះលើខ្សែសវនកម្មប្រព័ន្ធ (bun run audit:verify --platform បញ្ជាក់ថាខ្សែនៅតែគង់វង់)។