Kontrolės iš 21-compliance.md 14 skyriaus, apie kurias auditorius klausia pavadinimu. Šis puslapis yra procedūra; jo sukuriami įrašai yra įrodymai.
Raktai
Kiekvieni išsaugoti prisijungimo duomenys užkabinami šviežiu duomenų
šifravimo raktu (DEK). DEK suvyniojamas pagrindinio rakto (KEK), o pagrindinio
rakto nuoroda saugoma šalia (key_ref arba nuoroda supakuotoje reikšmėje).
Pasukus pagrindinį raktą, DEK suvyniojami iš naujo. Prisijungimo duomenų
niekada neiššifruojama ir iš naujo neužšifruojama.
| Nustatymas | Reikšmė |
|---|---|
QUIRE_MASTER_KEY |
Dabartinis pagrindinis raktas: 32 baitai, base64. Kiekviena nauja paslaptis suvyniojama po juo |
QUIRE_MASTER_KEY_VERSION |
Jo versijos žyma. Kai nenustatyta – v1. Pakelkite ją kiekvieną kartą, kai keičiate raktą |
QUIRE_MASTER_KEY_RETIRED |
Ankstesni raktai, po kurių gali slėpti paslaptys, kaip v1=<base64>,v0=<base64>. Skaitoma, niekada neįrašoma |
Tinklo sluoksnis, darbininkas ir komanda bun run kek:rotate skaito tuos pačius
tris nustatymus. Jie visi turi turėti vienodas reikšmes, arba vienas jų negalės
atidaryti to, ką užkabinęs kitas.
Be QUIRE_MASTER_KEY kiekviena posistema išlaiko raktą, kurį išveda iš
QUIRE_SECRET_KEY. Tai veikia, Sistemos sveikatos puslapyje tai rodoma kaip
pablogęs, ir jis lieka skaitomas, kai nustatote pagrindinį raktą – būtent taip
pirmasis rotavimas viską nuo jo perkelia. Kas gali perskaityti proceso aplinką,
gali iššifruoti kiekvienus išsaugotus prisijungimo duomenis, todėl gamybinis
diegimas turėtų turėti pagrindinį raktą, saugomą paslapčių saugykloje, o ne
toje pačioje atsarginėje kopijoje kaip duomenų bazė.
Rotavimas
Rakto amžius rodomas platformos konsolėje, Security, Master key, ir kaip
matuoklis quire.secrets.master_key.age (dienos). Kasdienė platform.key_age
tvarkaraštis (03:41 UTC) įrašo priminimo eilutę į platformos audito grandinę,
kai raktas pasiekia 365 dienas, ir dar kartą kas 30 dienų, kol jis nepasuotas.
Rotuokite pagal priminimą ir kiekvieną kartą, kai raktas galėjo būti atskleistas.
- Sugeneruokite naują raktą:
openssl rand -base64 32. - Nustatykite
QUIRE_MASTER_KEYį jį irQUIRE_MASTER_KEY_VERSIONį kitą žymą (v2). Seną raktą perkelkite įQUIRE_MASTER_KEY_RETIREDkaipv1=<old base64>. Abiejų kopijas laikykite kur kitur, ne šioje sistemoje. - Paleiskite tinklo sluoksnį ir darbininką su naujais nustatymais. Naujos
paslaptys dabar suvyniojamos po
env:QUIRE_MASTER_KEY:v2; senos vis tiek atidaromos atsargos raktu. - Paprašykite rotavimo su priežastimi, kuri liks audito pėdsake:
- konsolėje: Security, Master key, Rotate the master key; arba
- komandų eilutėje su ta pačia aplinka:
bun run kek:rotate request --reason "Annual rotation, ticket SEC-114".
- Darbininkas per minute suvynioja vieną riekelę (tvarkytuvo
platform.key_rotationtvarkaraštis) ir po paleidimo iš naujo tęsia. Kad baigtumėte vienu prisėdimu:bun run kek:rotate run. Stebėkite subun run kek:rotate status. - Kai įraše rotavimas parodomas baigtas su zero unresolved and zero
failed, pašalinkite atsargos raktą iš
QUIRE_MASTER_KEY_RETIREDir paleiskite diegimą iš naujo. Iki tol jį laikykite: reikšmės, kurios nepavyko perkelti, vis tiek suvyniojamos po seno rakto.
Ką užduotis peržiūri
Kiekvieną saugyklą, laikančią suvyniotą DEK: tas, kurios yra SEALED_STORES
(apps/worker/src/key-rotation.ts). Valdymo duomenų bazės saugyklos
peržiūrimos valdymo duomenų bazėje; organizacijų saugyklos peržiūrimos po
vieną organizaciją su eilučių lygio apsauga, toje duomenų bazėje, kurioje yra
organizacija, todėl nuomininkas, pririštas prie atskiros duomenų bazės,
rotuojamas toje duomenų bazėje. Testas nepavyksta, kai schemoje atsiranda
suvynioto rakto stulpelio, kurio sąraše nėra, ir kitas, kai prisijungimo
duomenų peržiūra priskiria užkabintą stulpelį, kurio sąrašas nepastebi.
Įrašas
ops.key_rotation: viena eilutė rotavimui, su jo priežastimi, kas jį prašė, būsena ir jo sumomis (suvyniota iš naujo, jau teisinga, neišspręsta, nepavyko).ops.key_rotation_progress: viena eilutė kiekvienai saugyklai ir apimčiai kartą peržiūrėjus, su rakto nuorodomis, kurių nepavyko perskaityti, ir kiek reikšmių buvo po kiekviena. Tęsiamas rotavimas jas praleidžia.- Platformos audito grandinė:
platform/key_rotation_request(su priežastimi), po vienąplatform/key_rotation_storekiekvienai saugyklai su jos skaičiais irplatform/key_rotation_completearbaplatform/key_rotation_fail;platform/key_age_reminderpriminimui. - Matuokliai:
quire.secrets.master_key.ageirquire.secrets.rewrap.outstanding(reikšmės, kurių paskutinis rotavimas neperkėlė).
Kai reikšmės neišspręstos
Neišspręsta reikšmė suvyniojama po rakto nuorodos, kurios šis diegimas neturi,
arba ji neatitinka tos formos, kurią žada jos stulpelis. Eigos įraše įvardijama
nuoroda (pavyzdžiui env:QUIRE_MASTER_KEY:v0 (unreadable)). Atkurkite tą raktą
į QUIRE_MASTER_KEY_RETIRED ir paleiskite kitą rotavimą, arba, jei raktas
dingo visam laikui, leiskite organizacijos administratoriui įvesti prisijungimo
duomenis iš naujo: tada jie bus užkabinti po dabartinio rakto. Nepavykę
rotavimai rodo savo klaidą įraše; pataisykite priežastį ir paprašykite iš naujo.
Pasirašymo raktai
Atskirai nuo pagrindinio rakto: kiekviena organizacija pasirašo savo OpenID
Connect žetonus ir LTI žinutes savu RSA raktu, paskelbtu adresu
/.well-known/jwks.json. Tam nereikia jokio operatoriaus. Kasdienis
platform.signing_keys tvarkaraštis paskelbia įpėdinį septynias dienas
prieš pasibaigiant dabartinio rakto devyniasdešimčiai, po savaitės įpėdinis
pradeda pasirašyti, o senas raktas tampa atsargos, o po to devyniasdešimties
dienų senas raktas ištrinamas ir palieka raktų rinkinį. Kiekvienas žingsnis
yra platform/signing_key_advance įrašas platformos audito grandinėje.
Kad ankščiau pakeistumėte organizacijos raktą, pavyzdžiui, po atskleidimo:
- konsolėje: Security, Master key, Publish a new signing key (reikia
platform/keys_manage); arba - komandų eilutėje su darbininko aplinka:
bun run kek:rotate signing-keys rotate --tenant <slug or id> --reason "Key exposed, INC-3310".bun run kek:rotate signing-keys statusišvardija kiekvienos organizacijos raktus pagal stadiją.
Naujas raktas paskelbiamas iš karto ir pradeda pasirašyti po septynių dienų,
kai dabartinis raktas atsitraukia. Savaitė yra numatyta sąmoningai: raktų
rinkinį talpina pasitikinčios šalys, ir trumpesnis persidengimas iš karto
sugadintų kiekvieną įrankį. Atsargos raktas lieka raktų rinkinyje dar
devyniasdešimt dienų, kad jau jo pasirašyti žetonai ir toliau tikrintųsi; jei
atskleidimas reiškia, kad jam reikia anksčiau nustoti būti patikimu, jo eilutės
ištrynimas yra pakeitimas, atliekamas operatoriaus paties duomenų bazės
prieiga pagal pakeitimų įrašą (avarinė prieiga yra tik skaitymui), ir tada
juo pasirašyti žetonai nepereina patikros. Priverstinis rotavimas yra
platform/signing_key_rotate audito grandinėje, su priežastimi. Darbininkui
reikia tų pačių QUIRE_MASTER_KEY nustatymų, kaip tinklo sluoksniui, kad
suvyniotų naują raktą; bun run kek:rotate pagrindiniam raktui suvynioja ir
pasirašymo raktus su visu kitu (oauth_signing_key yra SEALED_STORES).
Avarinė gamybinė prieiga
Niekas neturi nuolatinės prieigos prie gamybos. Kai kažkas negali laukti, savininkas išduoda avarinės prieigos suteikimą: Platform console, Security, Break-glass access.
- Suteikimas turi apimtį (vieną organizaciją arba platformos registrą), priežastį nuo 20 simbolių, įvardijančią incidentą arba bilietą, ir langą nuo 5 iki 240 minučių. Jis pasibaigia pats: tikrinamas pagal laikrodį kiekvienai teiginiui.
- Jį galima išduoti tam savininkui, kuris jį išduoda, arba kitam savininkui
(dvi žmonių forma). Naudotis gali tik tas žmogus, kuriam jis išduotas.
Išdavimui reikia
platform/break_glass_issue, o naudojimui –platform/break_glass_use; abu pagal nutylėjimą tik savininkams. - Teiginiai vykdomi per vartų paslaugą, ne prisijungus prie duomenų bazės: tik skaitymui, po vieną, apriboti organizacijos arba valdymo registro, su penkių sekundžių laiko limitu ir daugiausia 500 eilučių. Dvinarės reikšmės rodomos pagal dydį.
- Platformos audito grandinė registruoja išdavimą (su priežastimi), atšaukimą,
kiekvieną teiginį prieš jam veikiant (
platform/break_glass_statement, atmesti su rezultatudenied) ir kiekvieną rezultatą (platform/break_glass_result).ops.break_glass_statementsaugo audito įrašų id, todėl išdavimo įrašas susiejamas su savo audito įrašais. - Rašymai nesiūlami. Pakeitimas, kuris negali laukti versijos, naudoja paties operatoriaus duomenų bazės prieigą su savo pakeitimų įrašu, už šio produkto ribų, ir įraše turėtų būti nurodytas incidento numeris, naudojamas čia.
Kodėl neišduodami duomenų bazės prisijungimo duomenų: Postgres prisijungimas gyvena ilgiau už seansą, kuris jo paprašė, apėina eilučių lygio apsaugą, kuria remiasi programa, ir negali įrašyti į šio produkto audito grandinę, todėl jo teiginiai būtų audituojami tik tiek, kiek kas nors būtų išsiuntęs serverio žurnalą. Vartų paslauga daro audito pėdsaką prieigos savybe, o ne praktika aplink ją.
Kad atsakytumėte į audito prašymą: išvardykite suteikimus laikotarpiu
(Break-glass access), atidarykite suteikimo istoriją jo teiginiams ir audito
įrašų id ir perskaitykite tuos įrašus platformos audito grandinėje
(bun run audit:verify --platform įrodo, kad grandinė sveika).