Juhtimiseeskirjas 21-compliance.md jaotises 14 on need kontrollid nimetatud viisil, mida audiitor küsib. See leht kirjeldab toimingut; selle tulemusel tekkivad kirjed on tõendid.
Võtmed
Iga salvestatud mandaat pitseeritakse uue andmekrüptovõtmega (DEK). DEK
pakitakse peavõtmega (KEK) ning peavõtme viide säilitatakse selle kõrval
(key_ref või pakitud väärtuse sees olev viide). Peavõtme vahetamisel pakitakse
DEK-id uuesti. Mandaati ei dekrüptita ega krüptita uuesti.
| Seade | Tähendus |
|---|---|
QUIRE_MASTER_KEY |
Praegune peavõti: 32 baiti, base64-vormingus. Iga uus saladus pakitakse sellega |
QUIRE_MASTER_KEY_VERSION |
Selle versioonimärgend. Vaikimisi v1. Tõsta seda võtme vahetamisel |
QUIRE_MASTER_KEY_RETIRED |
Varasemad võtmed, mille all võivad saladused olla, kujul v1=<base64>,v0=<base64>. Loetakse, ei kirjutata |
Veebikiht, töötleja ja käsk bun run kek:rotate loevad kõiki kolme seadistust.
Väärtused peavad kõikjal ühtima, muidu ei saa üks neist avada teise pitseeritud
väärtusi.
Kui QUIRE_MASTER_KEY puudub, kasutab iga alamsüsteem võtit, mille tuletab
QUIRE_SECRET_KEY-st. See töötab, kuid süsteemi tervise leht kuvab halvenenud
olekut; seadistatud peavõtme lisamisel jäävad andmed loetavaks, nii et esimese
vahetusega saab kõik sellelt võtmele üle viia. Igaüks, kes saab lugeda protsessi
keskkonnamuutujaid, võib dekrüptida kõik salvestatud mandaadid. Seetõttu peab
tootmispaigaldisel olema saladuste hoidlas talletatud peavõti, mida ei hoita
andmebaasi varukoopiaga samas kohas.
Võtme vahetamine
Võtme vanus kuvatakse jaotises Platform console, Security, Master key ning
mõõdikuna quire.secrets.master_key.age (päevades). Igapäevane ajastatud töö
platform.key_age (03:41 UTC) lisab platvormi auditi ahelasse meeldetuletuse,
kui võti saab 365 päeva vanaks, seejärel iga 30 päeva järel kuni vahetamiseni.
Vaheta võti meeldetuletuse saamisel ja alati, kui see võis lekkida.
- Genereeri uus võti:
openssl rand -base64 32. - Määra
QUIRE_MASTER_KEYsellele jaQUIRE_MASTER_KEY_VERSIONjärgmisele versioonimärgisele (v2). Lisa vana võtiQUIRE_MASTER_KEY_RETIREDväärtusenav1=<old base64>. Hoia mõlemat koopiat mujal kui selles hostis. - Juuruta veebikiht ja töötleja uute seadetega. Uued saladused pakitakse nüüd
env:QUIRE_MASTER_KEY:v2alla; vanu saab endiselt avada pensionile jäetud võtmega. - Küsi võtmevahetust, lisades auditi jäljele põhjuse:
- konsoolis: Security, Master key, Rotate the master key; või
- sama keskkonnaga käsureal:
bun run kek:rotate request --reason "Annual rotation, ticket SEC-114".
- Töötleja pakib minutis ühe osa ümber (ajastaja
platform.key_rotation) ja jätkab pärast taaskäivitamist. Kõigi korraga lõpetamiseks käivitabun run kek:rotate run. Jälgi edenemist käsugabun run kek:rotate status. - Kui kirjes on vahetus lõpetatud ning lahendamata ja nurjunud väärtusi on
null, eemalda
QUIRE_MASTER_KEY_RETIRED-ist pensionile jäetud võti ja juuruta uus seadistus. Seni hoia vana võtit alles: mõni väärtus, mida ei õnnestunud teisaldada, võib olla endiselt selle all pakitud.
Milliseid kirjeid töö läbib
Kõiki mälukohti, mis sisaldavad pakitud DEK-i: loendis SEALED_STORES
(apps/worker/src/key-rotation.ts) nimetatuid. Juhtandmebaasi kirjed käiakse
läbi juhtandmebaasis; organisatsiooni kirjed läbivad reale-põhise turbe all ühe
organisatsiooni kaupa ja selles andmebaasis, kus see asub. Seega vahetatakse
eriandmebaasi seotud rentniku võti vastavas andmebaasis. Test nurjub, kui skeemi
lisandub pakitud võtme veerg, mida loendis pole, samuti siis, kui mandaatide
ülevaates liigitatakse pitseeritud veerg, mis loendist puudub.
Kirje
ops.key_rotation: iga vahetuse rida koos põhjuse, taotleja, oleku ja loenduritega (uuesti pakitud, juba ajakohased, lahendamata, nurjunud).ops.key_rotation_progress: iga läbitud hoidla ja ulatuse rida koos loetamatute võtmeviidete ja nende all olnud väärtuste arvuga. Jätkatud töö jätab need vahele.- Platvormi auditi ahel:
platform/key_rotation_request(koos põhjusega), iga hoidla kohtaplatform/key_rotation_storekoos loenduritega ningplatform/key_rotation_completevõiplatform/key_rotation_fail; meeldetuletus lisatakse kirjenaplatform/key_age_reminder. - Mõõdikud:
quire.secrets.master_key.agejaquire.secrets.rewrap.outstanding(eelmise vahetusega teisaldamata väärtused).
Kui väärtused jäävad lahendamata
Lahendamata väärtus on pakitud võtmeviitega, mida paigaldis ei tunne, või selle
kuju ei vasta veeru määratlusele. Edenemiskirjes nimetatakse viide, näiteks
env:QUIRE_MASTER_KEY:v0 (unreadable). Taasta see võti muutujasse
QUIRE_MASTER_KEY_RETIRED ja käivita uus vahetus või palu organisatsiooni
halduril mandaati uuesti sisestada, kui võti on jäädavalt kadunud; see pitseeritakse
siis praeguse võtmega. Nurjunud vahetuse veateade kuvatakse kirjes; paranda põhjus
ja esita uus taotlus.
Allkirjastamisvõtmed
Peavõtmest eraldi allkirjastab iga organisatsioon OpenID Connecti märgid ja LTI
sõnumid enda RSA-võtmega, mis avaldatakse aadressil /.well-known/jwks.json.
Operaator ei pea midagi tegema. Iga tunni järel käivituv platform.signing_keys
avaldab järglasvõtme seitse päeva enne praeguse 90-päevase kehtivusaja lõppu;
nädala pärast hakkab uus võti allkirjastama ning vana muutub pensionile jäävaks;
90 päeva pärast kustutatakse vana võti võtmekogumist. Iga sammu kohta lisatakse
platvormi auditi ahelasse kirje platform/signing_key_advance.
Organisatsiooni võtme enneaegseks vahetamiseks, näiteks lekke järel:
- konsoolis: Security, Master key, Publish a new signing key (vajab
õigust
platform/keys_manage); või - töötleja keskkonnaga shellis:
bun run kek:rotate signing-keys rotate --tenant <slug or id> --reason "Key exposed, INC-3310".bun run kek:rotate signing-keys statusloetleb kõikide organisatsioonide võtmed oleku järgi.
Uus võti avaldatakse kohe ning hakkab allkirjastama seitsme päeva pärast, kui
praegune võti pensionile läheb. Nädalane kattuvusaeg on tahtlik: võtmekogumit
vahemällu salvestavad osapooled vajavad seda, muidu katkeks korraga kõigi
tööriistade ühendus. Pensionile jääv võti püsib veel 90 päeva võtmekogumis, et
juba allkirjastatud märgid oleksid kontrollitavad. Kui lekke tõttu tuleb see
varem usaldusest eemaldada, kustutatakse selle rida operaatori enda
andmebaasiõigusega muudatuse jälje alusel (hädaolukorra juurdepääs on
kirjutuskaitstud); seejärel nurjub selle võtmega allkirjastatud märkide kontroll.
Jõuga tehtud vahetus kantakse põhjusega platvormi auditi ahelasse kirjena
platform/signing_key_rotate. Uue võtme pakkimiseks vajab töötleja samu
QUIRE_MASTER_KEY seadeid mis veebikiht; peavõtme jaoks käivitatav
bun run kek:rotate pakib koos teiste väärtustega ümber ka allkirjastamisvõtmed
(oauth_signing_key asub loendis SEALED_STORES).
Hädaolukorra juurdepääs tootmisele
Kellelgi pole tootmiskeskkonnale püsivat juurdepääsu. Kui probleem ei saa oodata, annab omanik hädaolukorra loa: Platform console, Security, Break-glass access.
- Loal on ulatus (üks organisatsioon või platvormi register), vähemalt 20 märgi pikkune intsidenti või piletit nimetav põhjus ning 5–240 minuti pikkune kehtivusaeg. Luba aegub ise; selle kehtivust kontrollitakse iga lause puhul kella järgi.
- Luba võib anda loa taotlevale omanikule või teisele omanikule (kahe inimese
kord). Kasutada saab seda ainult saaja. Andmine vajab õigust
platform/break_glass_issue, kasutamine aga õigustplatform/break_glass_use; mõlemad on vaikimisi ainult omanikele. - Laused käitatakse andmebaasi sisselogimise asemel lüüsi kaudu: ainult lugemine, ükshaaval, piiratud organisatsiooni või juhtregistriga, viiesekundilise ajalimiidi ja kuni 500 reaga. Binaarväärtusi näidatakse suuruse järgi.
- Platvormi auditi ahel talletab loa andmise (põhjusega), tühistamise, iga lause
enne selle käivitamist (
platform/break_glass_statement; keelatud toimingute tulemus ondenied) ja iga tulemuse (platform/break_glass_result). Tabelops.break_glass_statementsisaldab auditikirjete ID-sid, nii et loakirje seostub vastavate auditisündmustega. - Kirjutamist ei võimaldata. Enne väljalaset tehtav vältimatu muudatus kasutab operaatori enda andmebaasiõigust ja eraldi muudatuse jälge, väljaspool seda toodet; kirjes tuleks viidata siin kasutatud intsidendile.
Miks mitte väljastada andmebaasi mandaati? Postgresi sisselogimine kestab kauem kui taotletud seanss, möödub rakenduse kasutatavast reale-põhisest turbest ega saa kirjutada selle toote auditi ahelasse; seega auditeeritaks päringuid ainult serverilogide väljasaatmise ulatuses. Lüüsi puhul on auditijälg juurdepääsu omadus, mitte sellega seotud töökorraldus.
Audiitori päringule vastamiseks loetle ajavahemiku load (Break-glass access),
ava loa ajalugu, et näha selle lauseid ja auditisündmuste ID-sid, ning loe need
platvormi auditi ahelast (bun run audit:verify --platform kinnitab ahela terviklust).