21-compliance.md документинин 14-бөлүмүндөгү контролдор, аларды аудитор аты менен сурайт. Бул бет — процедура; ал түзгөн жазуулар — далил.
Килттер
Ар бир сакталган купуялык маалымат жаңы маалыматтык шифрлөө килити (DEK)
менен мөөрлөнөт. DEK негизги килит (KEK) менен ороп, негизги килиттин
референси анын жанында сакталат (key_ref, же түйүлгөн маалыматтын ичиндеги
референс). Негизги килитти алмаштыруу DEK’терди кайра оройт. Ал эч качан
купуялык маалыматты шифрлөөдөн чыгарбайт же кайра шифрлөбөйт.
| Setting | Meaning |
|---|---|
QUIRE_MASTER_KEY |
Азыркы негизги килит: 32 байт, base64. Ар бир жаңы сыр анын астында оролот |
QUIRE_MASTER_KEY_VERSION |
Анын версия белгиси. Орнотулбаса v1. Килитти өзгөрткөн сайын жогорулатыңыз |
QUIRE_MASTER_KEY_RETIRED |
Сырларды сактаган мурунку килттер астында калышы мүмкүн, v1=<base64>,v0=<base64> түрүндө. Окулат, эч качан жазылбайт |
Веб катмары, жумушчу жана bun run kek:rotate буйругу ошол эле үч
жөндөөнү окуйт. Алардын баарында бирдей мааны болушу керек, болбосо
алардын бири башкысы мөөрлөгөндү ача албайт.
QUIRE_MASTER_KEY болбосо ар бир подсистема QUIRE_SECRET_KEY’ден
алган килитин сактап калат. Бул иштейт, System health бети аны кемиген деп көрсөтөт, жана негизги
килитти койгондон кийин да ал окулууну улантат — биринчи алмаштыруу
баарын андан алып кеткенде дал ушундай болот. Процесстин чөйрөсүн окуй алган каалаган адам ар бир сакталган
купуялык маалыматты шифрлөөдөн чыгара алат, ошондуктан өндүрүш орнотуусунда
негизги килит болушу керек, аны сыр кампасында сактайт жана маалымат
базасы менен бирдей камдык көчүрмөдө эмес.
Алмаштыруу
Килиттин жашы 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>түрүндө жылдырыңыз. Экөөнүн көчүрмөсүн ушул хосттон тышкары бир жерде кармаңыз. - Веб катмарын жана жумушчуну жаңы жөндөөлөр менен жайгаштырыңыз. Жаңы
сырлар эми
env:QUIRE_MASTER_KEY:v2астында оролот; эскилери дагы эле кетирилген килит аркылуу ачылат. - Аудит изинде калган себеби менен алмаштырууну сураныңыз:
- консольдо: Security, Master key, Rotate the master key; же
- ошол эле чөйрөдөгү терминалда:
bun run kek:rotate request --reason "Annual rotation, ticket SEC-114".
- Жумушчу мүнөтүнө бир тилке кайра оройт (кезектеөөчүнүн
platform.key_rotationжумушу) жана кайра иштеткенде улантат. Аны бир отурумда бүтүрүү үчүн:bun run kek:rotate run. Аныbun run kek:rotate statusменен көзөмөлдөңүз. - Жазуу алмаштыруу нөл чечилбеген жана нөл ийгиликсиз менен
аяктаганын көрсөткөндө,
QUIRE_MASTER_KEY_RETIRED’тен кетирилген килитти чыгарып, кайра жайгаштырыңыз. Ошого чейин аны кармаңыз: ал жылдыра албаган мааны мурунку килиттин астында оролуп турат.
Жумуш эмнөөрдү кыдырат
Оролгон DEK бардык кампа: SEALED_STORES’тагылар
(apps/worker/src/key-rotation.ts). Башкы маалымат базасы кампалары
башкы маалымат базасында кыдырылат; уюм кампалары бир уюмдан маалымат
базасында, сап деңгээлинде коргоо астында кыдырылат, анткени айырмаланган
маалымат базасына бекитилген tenant ошол маалымат базасында алмаштырылат.
Тест тизмеде аталбаган оролгон килит колонкасы пайда болгондо ийгиликсиз
болот, жана купуялык кароосу тизмеден калган мөөрлөнгөн колонканы
классификациялабаса дагы бири ийгиликсиз болот.
Жазуу
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’ке калыбына келтирип, дагы бир алмаштырууну
иштетиңиз, же килит түбөлүккө жоголгон болсо, уюмдун администратору
купуялык маалыматты кайра киргизсин: анда ал азыркы килиттин астында
мөөрлөнөт. Ийгиликсиз алмаштыруулар жазууда катасын көрсөтөт; себебин
түзөтүп, кайра сураныңыз.
Кол коюу килиттери
Негизги килиттен айрыма: ар бир уюм өзүнүн OpenID Connect токендерин жана
LTI каттарын өзүнүн RSA килити менен кол коёт, ал /.well-known/jwks.json
жеринде жарыяланат. Бул жерде оператор керек эмес. Саатына бир жолу
platform.signing_keys жумушу азыркы килиттин токсон күнү бүтөөрүнө
жети мурун мураскор жарыялайт, бир жумадан кийин мураскор кол коюуну
баштайт жана эски килит кетирилүүгө өтөт, андан токсон кийин эски килит
өчүрүлүп, килит тобунан чыгат. Ар бир адым платформа аудит чынжырындагы
platform/signing_key_advance жазуусу.
Уюмдун килитин мурдараак алмаштыруу үчүн, мисалы ачылгандан кийин:
- консольдо: Security, Master key, Publish a new signing key
(
platform/keys_manageталап кылат); же - жумушчунун чөйрөсүндөгү терминалда:
bun run kek:rotate signing-keys rotate --tenant <slug or id> --reason "Key exposed, INC-3310".bun run kek:rotate signing-keys statusар бир уюмдун килиттерин баскычы боюнча тизмелейт.
Жаңы килит дароо жарыяланат жана жети кийинки күнү кол коюуну баштайт,
ал учурда азыркы килит кетет. Бир жума ойлонулган: ишенүүчү тараптар килит
топтомун кэштейт, ал эми кыскараак өбөлгө бардык куралды бир учурда
ийгиликсиз кылат. Кетирилип жаткан килит дагы токсон күн килит тобунда
калат, ошондо аны мурун кол койгон токендер текшериле берет; ачылуу аны
эртерээк ишенбөөгө тийиштирип жаткан болсо, анын сабын өчүрүү — өзгөртүү
жазуусунун астында оператордун өзүнүн маалымат базасына кирүүсү менен
жасалган өзгөрүү (бузуу айнеги менен кирүү окуу гана), андан кийин аны менен
кол коюлган токендер текшерүүдөн өтпөйт. Мажбурлап алмаштыруу чынжырдагы
platform/signing_key_rotate, себеби менен. Жумушчу жаңы килитти ороп
алуу үчүн веб катмары менен бирдей QUIRE_MASTER_KEY жөндөөлөрүн талап
кылат; негизги килит үчүн bun run kek:rotate кол коюу килиттерин башка
баары менен чогуу кайра оройт (oauth_signing_key SEALED_STORES’та).
Өндүрүшкө бузуу айнеги менен кирүү
Эч ким өндүрүшкө туруктуу ууксатка ээ эмес. Бир нерсе күтө албаганда, ээ бузуу айнеги укугун чыгарат: Platform console, Security, Break-glass access.
- Укуктун чөйрөсү бар (бир уюм же платформа реестри), кеминде 20 аркыдан турган жана окуя же тикетти атаган себеби жана 5тен 240 мүнөткө чейин терезеси бар. Ал өзү өчөт: ар бир билдирүү саатка каршы текшерилет.
- Ал өзү чыгарган ээге же башка ээге чыгарылышы мүмкүн (экөөлөк
формасы). Ага чыгарылган адам гана колдоно алат. Чыгаруу үчүн
platform/break_glass_issue, колдонуу үчүнplatform/break_glass_useкерек; экөөсү тең демилгелик түрдө гана ээ. - Билдирүүлөр шлюз аркылуу өтөт, маалымат базасынын кириши менен эмес: окуу гана, бир учурда бирөө, уюм же башкы реестр менен чектелген, беш секунддук таймаут жана көп болгондо 500 сап менен. Бинардык маанылар өлчөмү менен көрсөтүлөт.
- Платформа аудит чынжыры чыгарууну (себеби менен), жокко чыгарууну, аны
иштөөдөн мурун ар бир билдирүүнү (
platform/break_glass_statement, четке кагылгандарыdeniedнатыйжасы менен) жана ар бир натыйжаны (platform/break_glass_result) каттайт.ops.break_glass_statementаудит жазууларынын id’лерин сактайт, ошондо чыгаруу жазуусу анын аудит жазууларына кошулот. - Жазуулар сунушталбайт. Релизди күтө албаган өзгөрүү бул продуктунун тышында, өз өзгөртүү жазуусунун астында оператордун өзүнүн маалымат базасына кирүүсүн колдонот, жана жазуу бул жерде колдонулган окуя референсине шилтеме бериши керек.
Эмне үчүн маалымат базасынын купуялык маалыматтарын чыгарбайт: Postgres кириши аны сураган сессиядан узак жашайт, колдонмо ишенген сап деңгээлинде коргонууну айланып өтөт жана бул продукттун аудит чынжырына жаза албайт, ошондуктан анын билдирүүлөрү бирөө сервер журналын жеткиргенге чейин гана аудиттенет. Шлюз аудит изин анын айланасындагы амил эмес, кирүүнүн өзүнүн касиети кылат.
Аудит сурамына жооп берүү үчүн: мезгил ичиндеги укуктарды тизмелениңиз
(Break-glass access), укуктун тарыхын билдирүүлөрү жана аудит жазууларынын
id’лери үчүн ачыңыз, жана ошол жазууларды платформа аудит чынжырынан
окуңуз (bun run audit:verify --platform чынжыр бүтүн экенин далилдейт).