Кілттер мен токендерді ротациялау
1) Не үшін ротация қажет
Кілттер мен токендер сөзсіз «ескіреді»: логтардағы/бэкаптардағы экспозиция, инсайдерлік тәуекелдер, кітапханалардың осалдықтары, серіктестердің ағуы. Ротация «өмір сүру уақытын» төмендетеді және оқыс оқиғалар кезінде басқарушылықты береді. Мақсаты - ротацияның болжамды циклдерін және тоқтаусыз жылдам қайтарып алу тетіктерін құру.
2) Облыс: нені ротациялаймыз
Қолтаңба/шифрлау кілттері: JWT (JWS/JWE), OAuth/OIDC, SAML, вебхактар (HMAC), лицензиялар.
Интеграция құпиялары: API-кілттер, client secret, техникалық парольдер. пайдаланушылар.
TLS/mTLS: серверлік/клиенттік сертификаттар, тамыр/аралық CA.
Деректер кілттері: KEK/CMK в KMS/HSM, DEK (envelope encryption).
Токены: access/refresh, service-to-service (mTLS, HMAC), short-lived session.
3) Сақтау, нұсқалар, белгілер
Шындық көзі ретінде KMS/HSM/Vault. Жеке кілттерді git/ENV/кескін файлдарында сақтауға болмайды.
Нұсқалау: 'key _ id '/' version' + белгілер: 'purpose = jwt-sign', 'env = prod', 'alg = ES256', 'created _ at', 'rotates _ at'.
Қол жеткізу саясаты: ең аз қажетті құқықтар қағидаты (least privilege), міндеттерді бөлу (SoD).
Аудит: кім құрды/оқыды/қол қойды; өзгермейтін журналдар.
4) Ротацияның базалық паттерндері
4. 1 Жабылатын терезелер (graceful rollover)
Жаңа кілт → JWKS жариялаймыз/сертификатты таратамыз.
Жабу терезесі: ескі және жаңа кілттермен валидациялау, қолтаңба - тек жаңа.
grace-кезеңі аяқталғаннан кейін - ескісін сенімді жиыннан жойамыз.
4. 2 Қос шығарылым (dual-run)
Инстанциялардың бір бөлігіне ескі, бір бөлігіне жаңа (ірі флиттер үшін) қол қоятын қысқа кезең.
Қатаң үндестірілген JWKS және 'kid' бойынша валидация үлесінің мониторингін талап етеді.
4. 3 Rotate-on-schedule vs rotate-on-use
Кесте бойынша: N күн/аптада бір рет (қол қою кілті, TLS).
Пайдалану кезінде: refresh-токендер - бір рет пайдаланылатын, әрбір жаңа шығарылымға айырбастау («жылжымалы» ротация).
5) JWT/JWKS: практика
5. 1 Тақырыптар мен идентификаторлар
Тексеру кілтін таңдау үшін JWS тақырыбындағы 'kid' дегенді пайдаланыңыз.
Қысқасы 'exp', ең азы 'aud/iss/nbf'.
json
{ "alg": "ES256", "kid": "jwt-2025-10", "typ": "JWT" }
5. 2 JWKS жариялау
JWKS барлық белсенді тексеру кілттерін (grace терезесінде ескі + жаңа) қамтуы тиіс.
Клиенттерде JWKS кэштеу: қысқа TTL (мысалы, 5-15 мин).
Компромисс кезінде - JWKS-тен компромисске ұшыраған кілтті алып тастау (күрт), кэштің форс-мүгедектігі.
json
{
"keys": [
{ "kty":"EC","crv":"P-256","kid":"jwt-2025-10","use":"sig","alg":"ES256","x":"...","y":"..." },
{ "kty":"EC","crv":"P-256","kid":"jwt-2025-07","use":"sig","alg":"ES256","x":"...","y":"..." }
]
}
5. 3 Каденс және мерзімдері
JWT қолы: әрбір 3-6 ай сайын кілттің ротациясы (немесе жиі high-risk үшін).
'exp' access-токен: 5-30 мин; refresh - 7-30 күн («rotate-on-use» -ден).
Айдап әкету қаупін төмендету үшін PoP/DPoP-мен мәжбүрлі «желімдеу» (§ 8 қараңыз).
6) HMAC ротациясы (вебхактар/қолтаңбалар)
Белсенді және канареялық құпияларды сақтаңыз; екі қолтаңбаны да қабылдаңыз.
Тақырыптар: 'X-Signature' + 'X-Timestamp'; терезені шектеу ± 300с.
Ескісін толық өшіру - жіберуші расталған қосылымнан кейін.
Серіктестер үшін: қайта қосу және тексеру күнін/уақытын жариялаңыз.
7) TLS/mTLS және сенім тізбегі
Ашық серверлік сертификаттар үшін ACME/auto-renew (Let's Encrypt немесе корпоративтік CA).
mTLS: қысқа клиенттік сертификаттар (7-30 күн), арналар бойынша автоматты ротация (SPIFFE/SPIRE/mesh).
Аралық/тамыр CA ротациясы - тек қана жабылатын сенім зәкірлері (trust bundle) және ұзақ canary арқылы.
OCSP/CRL және clock-skew бағдарламаларын қадағалаңыз. Логда - валидациядан бас тарту себептері.
8) PoP/DPoP және токен байламы клиенттің кілті
DPoP (Demonstration of Proof-of-Possession): токен клиенттің public-key байланған; replay тәуекелін төмендетеді.
Клиент кілтін ротациялау = жаңа DPoP-кілтін, токендерді қысқа мерзімге шығару.
Сервис-к-сервис үшін mTLS (құрылғы/воркер HSM/TPM кілтін «алып жүреді») артықшылықты.
9) Refresh-токендер: rotate-on-use
Бір рет қолданылатын refresh-токендер: әрбір алмасу → жаңа refresh + access.
Қайтарылған 'jti '/' sid' тізімін TTL = refresh өмір сүру мерзімімен сақтау.
Қайталап пайдалану (ре-плей): сессияны/құрылғыны дереу қайтарып алу, алерт.
10) Кері қайтару және бұғаттау тізімдері
JWT интроспекциясыз: 'exp' + 'jti' қысқа 'қара тізімдерін' сыни жағдайларға қолданыңыз (жергілікті/Redis, хеш бойынша шардалау).
OAuth introspection: орталықтандырылған мәртебе сервері; TTL қысқасымен «active = false/true» кэшін жасаңыз.
API-кілттері: кілттің хэштерін (парольдер ретінде), иесінің/тенанттың белгілерін, scope, құрылған/соңғы кіру күнін сақтаңыз; кері шақыру - бірден.
11) Деректер кілттері: envelope-шифрлау
CMK/KEK (KMS/HSM) DEK қорғайды; CMK ротациясы деректерді қайта ашусыз болады: DEK қайта-wrap.
әрбір объект/тенант/партия үшін DEK; KDF/HKDF туынды кілттер үшін.
Жою саясаты (crypto-shredding): жою KEK = компромисс кезіндегі деректердің оқылмаушылығы.
12) Инциденттер рәсімдері (компромисс)
1. Тоқтату: бұзылған кілтте токендер шығаруды өшіру, беруді жаңасына ауыстыру.
2. Кері шақыру: 'kid' дегенді JWKS жүйесінен жою, куәліктерді (OCSP/CRL) кері шақыру, тізімдегі API кілттерін бұғаттау.
3. TTL қысқарту: уақытша 'exp' белгілерін азайту, PoP/DPoP тексеруді күшейту.
4. Мәжбүрлі logout: сессияларды мүгедектендіру (revoke 'sid '/' jti').
5. Форензия және есептілік: таймлайндар, қамту, кім/не зардап шекті; ойнатқыштарды жаңарту.
13) Пайплайн және rollout
13. 1 Генерациялау және жариялау
HSM/KMS кілттерін жасаңыз; жеке кілтті экспорттауға тыйым салынады.
JWKS/сертификаттарын тексеру және тестілеу арқылы автоматты түрде жариялау.
Канар релизі: 1-5% клиенттер → 100%.
13. 2 Денсаулықты бақылау
Метрика: 'kid' бойынша валидация үлесі, қолтаңба/сертификат қателері, сағат дрейфі.
Алерталар: 401/403 қолтаңбаға байланысты, OCSP/CRL қол жетімді емес, мерзімі өтіп бара жатқан сертификаттар (T-30/T-7/T-1).
14) Конфиги және мысалдар
14. 1 Vault/KMS саясатының мысалы (жалған)
hcl path "transit/keys/jwt-prod" {
capabilities = ["read," "update," "list"] # signature/rotation
}
path "transit/keys/jwt-prod/rotate" {
capabilities = ["update"]
}
14. 2 JWT ротациялау жоспарының мысалы
T0: create a new version of the key (kid = jwt-2025-10), add to JWKS
T0 + 15m: start signing with a new kid; validate with old and new
T0 + 7d: remove old kid from JWKS
T0 + 30d: delete old private key from KMS (schedule purge)
14. 3 Envoy: JWKS-ті мәжбүрлеп жаңарту (жалған)
yaml jwt_authn:
providers:
oidc:
issuer: https://auth. example. com/
remote_jwks:
http_uri:
uri: https://auth. example. com/.well-known/jwks. json cluster: jwks_cluster timeout: 2s cache_duration: 300s # короткий TTL
15) Бақылау және аудит
Метрики: `jwt_verify_fail_total{reason}`, `jwks_refresh_total`, `jwks_kid_share{kid}`, `token_revoked_total`, `refresh_rotations_total`, `dpop_fail_total`.
Логи: `kid`, `jti`, `sid`, `reason`, `client_id`, `tenant`, `trace_id` (без PII).
Дашбордтар: 'kid' үлестерінің картасы, мерзімі өтіп бара жатқан сертификаттар, кері қайтару жиілігі, өңірлер бойынша салыстырмалы емес қолтаңбалар.
16) Антипаттерндер
Ұзақ өмір сүретін JWT пікірсіз және қысқа 'exp'.
'kid' және 'қолмен' тексеру кілтін таңдау.
Құпияларды KMS және etcd деңгейінде шифрлаусыз ENV/k8s-Secret сақтау.
Отталмайтын refresh-токендер; детекторсыз refresh қайта пайдалану.
Бірыңғай жаһандық API-кілті «барлығына».
JWKS жариялаусыз және мониторингісіз жаңа кілттерді «тыныш» шығару.
Жабынның нөлдік терезелері (бірден ауыстыру) → салмақтық 401/403.
17) iGaming/Қаржы ерекшелігі
Реттеушілер және аудит: ротациялардың/пікірлердің өзгермейтін логтары; уақыт пен акторлардың дәлелденуі.
Серіктестік PSP/KYC: әріптеске/юрисдикцияға жеке кілттер; SLA/қауіпсіздік бұзылыстары кезінде жылдам қайтарып алу.
Көп жалдау: per-tenant scope бар API-кілттер; брендтердің/өңірлердің кілттерін оқшаулау.
Жоғары тәуекел: сыни операциялар үшін PoP/DPoP, қысқа 'exp', ішкі сервистер арасындағы mTLS.
Backoffice: SSO/OIDC, қысқа сессиялар, аппараттық токендер (FIDO2), барлық жерде rotate-on-schedule.
18) Prod-дайындық чек-парағы
- KMS/HSM/Vault бағдарламасындағы барлық жеке кілттер; экспорттауға тыйым салынған.
- JWKS қысқа TTL-мен жарияланады және кэшделеді; JWT айдарында 'kid' бар.
- Жабылатын терезесі және автоматты rollout бар ротациялау жоспары.
- Бір рет қолданылатын refresh-токендер; TTL 'jti' деп қайтарылғандар тізімі.
- HMAC-құпиялар: белсенді + канареялық; екеуін де қабылдау; T-ауысу уақыты жарияланды.
- TLS/mTLS: auto-renew, CA ауысымына арналған T-30/T-7/T-1, trust bundle.
- Envelope-шифрлау: KEK/CMK тоқтаусыз ротацияланады, DEK per-объект/тенант.
- Қол қою бойынша метриктер/алерттар, JWKS, пікірлер; дашбордтар 'kid' -доллар.
- Инциденттердің плейбуки (компромисс) және тұрақты жаттығулар.
- canary тестілері және жаңа кілттері бар валидация репликалары/СА.
19) TL; DR
Кілттерді KMS/HSM-де сақтаңыз, JWT-ге 'kid' -пен қол қойыңыз және JWKS-ті жариялаңыз. Кілттер мен сертификаттарды жабумен ауыстырыңыз, 'kid' бойынша валидация үлестерін қадағалаңыз. Refresh - rotate-on-use және қысқа 'exp'; күрделі операциялар үшін - PoP/DPoP және mTLS. Деректер үшін бос тұрып KEK ротациясы бар envelope-шифрлауды пайдаланыңыз. Инциденттердің метриктерін/алерттерін, плейбуктерін және тұрақты канареялық ротацияларды енгізіңіз.