---
title: "މާސްޓަރ ކީ އަދި ސޮއި ކީ ރޮޓޭޝަން، ބްރޭކް-ގްލާސް ލިބުން"
description: "ސްޓޯރ ކުރި ކްރެޑެންޝަލްތައް ރައްކާކުރާ މާސްޓަރ ކީ ރޮޓޭޓްކޮށް، ބްރޭކް-ގްލާސް ލިބުން ބޭނުންކުރާށެވެ."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/dv/llms.txt
> Use this file to discover all available pages before exploring further.

# މާސްޓަރ ކީ އަދި ސޮއި ކީ ރޮޓޭޝަން، ބްރޭކް-ގްލާސް ލިބުން

<span id="master-key-and-signing-key-rotation-and-break-glass-access"></span>

އޮޑިޓަރުން ނަންގަނައި އެދޭ 21-compliance.md ގެ 14 ވަނަ ސެކްޝަންގެ ކޮންޓްރޯލްތައް. މި ޞަފްޙާ ޕްރޮސީޖަރެވެ؛ އެއިން އުފައްދާ ރެކޯޑުތައް އެވިޑެންސެވެ.

## ކީތައް <!--quire:the-keys-->

ކޮންމެ ސްޓޯރ ކުރި ކްރެޑެންޝަލެއް އާ ޑޭޓާ އެންކްރިޕްޝަން ކީ (DEK) އަކުން ސީލްކުރެވެއެވެ. DEK މާސްޓަރ ކީ (KEK) އިން ރެޕްކުރެވެއެވެ؛ މާސްޓަރ ކީގެ ރިފަރެންސްވެސް އޭގެ ކައިރީ (`key_ref`، ނުވަތަ packed value ގެ ތެރޭ) ސްޓޯރކުރެވެއެވެ. މާސްޓަރ ކީ ރޮޓޭޓްކުރުމުން DEK ތައް އަލުން ރެޕް ކުރެވެއެވެ؛ ކްރެޑެންޝަލެއް ޑިކްރިޕްޓް ނުވަތަ އަލުން އެންކްރިޕްޓް ނުކުރެއެވެ.

| ސެޓިންގް | މާނަ |
| --- | --- |
| `QUIRE_MASTER_KEY` | މިހާރުގެ މާސްޓަރ ކީ: 32 bytes، base64. އާ ސިކްރެޓްތައް މިކީއަކުން ރެޕްކުރެވެއެވެ |
| `QUIRE_MASTER_KEY_VERSION` | އޭގެ ވަރޝަން ލޭބަލް. ސެޓްނުކުރިޔާ `v1`. ކީ ބަދަލުވާއިރު މިއީ މަތިކުރާށެވެ |
| `QUIRE_MASTER_KEY_RETIRED` | ކުރީގެ ސިކްރެޓް އަދި އެކީ އަކުން ހުރިއްޔާ: `v1=<base64>,v0=<base64>`. ކިޔެވޭނީ، ލިޔެވޭ ނޫނެވެ |

ވެބް ޓިއަރ، worker އަދި `bun run kek:rotate` command އިން މި ތިން ސެޓިންގެއް އެއްވަރަށް ކިޔައެވެ. އެތިން އެއް އަގު ނޫންނަމަ، އެއްކަން އެހެންކަމަކުން ސީލް ކުރި ކަމެއް ހުޅުވޭނެއް ނޫނެވެ.

`QUIRE_MASTER_KEY` ނެތްނަމަ ސިސްޓަމް ކޮންމެ ބަޔަކު `QUIRE_SECRET_KEY` އިން ލިބޭ ކީ ބޭނުންކުރެއެވެ. އެއީ ހިންގައެވެ؛ System health ޞަފްޙާ ބުނައެވެ ތިބާ master key ސެޓް ކުރިޔަސް ކިޔެވޭގޮތް ދެމިތިބެއެވެ؛ ފުރަތަމަ ރޮޓޭޝަނުން ހުރިހާ ތަކެތި އެއިން ނަގާއެވެ. process environment ކިޔަން ހުއްދަވާ ކޮންމެމީހަކު ސްޓޯރ ކުރި ހުރިހާ credential ޑިކްރިޕްޓްކުރެވޭތީ، production installation އަކަށް master key ހުރުން މުހިންމެވެ؛ secret store އެއްގައި ބެހެއްޓި، database ބެކަޕާއެކު އެއްތަނަކު ނުބެހެއްޓާށެވެ.

## ރޮޓޭޓް ކުރުން <!--quire:rotating-->

ކީގެ ޢުމުރު Platform console، Security، Master key ގައި އަދި `quire.secrets.master_key.age` metric (ދުވަސް) ގައި ފެންނަނީ. ދުވަހު ހިންގޭ `platform.key_age` schedule (03:41 UTC) ކީ 365 ދުވަސްވިއިރު platform audit chain އަށް އެންގުމެއް ލިޔެ، ކޮންމެ 30 ދުވަހަކުން ރޮޓޭޓް ނުވާހާ އެ ލިޔެއެވެ. ނޯޓިސް ލިބުމުން ރޮޓޭޓްކޮށް، ކީ ފައްތާފައި ހުރި ޝައްކުވުމުންވެސް ރޮޓޭޓްކުރާށެވެ.

1. އާ ކީ ހަދާށެވެ: `openssl rand -base64 32`.
2. `QUIRE_MASTER_KEY` އެއަށް ސެޓްކޮށް `QUIRE_MASTER_KEY_VERSION` ދެން ޖެހޭ ލޭބަލަށް (`v2`) މަތިކުރާށެވެ. ކުރީގެ ކީ `QUIRE_MASTER_KEY_RETIRED` ގައި `v1=<old base64>` ގޮތަށް ލާށެވެ. ދެ ކީއެއްގެ ކޮޕީވެސް މި host ނޫން ތަނަކުގައި ބެހެއްޓާށެވެ.
3. ވެބް ޓިއަރ އަދި worker އާ ސެޓިންގްއާއެކު deploy ކުރާށެވެ. އާ ސިކްރެޓްތައް `env:QUIRE_MASTER_KEY:v2` ދަށުން ރެޕްކުރެވޭނެއެވެ؛ ކުރީގެ ކީތައް retired key އިން އަދި ހުޅުވޭނެއެވެ.
4. audit trail ގައި އޮތް ސަބަބާއެކު ރޮޓޭޝަން ރިކުއެސްޓްކުރާށެވެ:
   - console ގައި: Security، Master key، Rotate the master key؛ ނުވަތަ
   - އެއް environment ހުރި shell އަކުން: `bun run kek:rotate request --reason "Annual rotation, ticket SEC-114"`.
5. worker އިން ކޮންމެ މިނިޓަކު slice އެއް ރެޕްކޮށް (`platform.key_rotation` schedule) restart ފަހުން ދެމިއެވެ. އެއް ހިންގުމަކު ނިމުމަށް: `bun run kek:rotate run`. `bun run kek:rotate status` އިން ބަލާށެވެ.
6. record ގައި **ބާކީ ނުނިމި އަދި ފޭލްވި ހުސް** ކަމަށް ފެނުމުން `QUIRE_MASTER_KEY_RETIRED` އިން retired key ފޮހެ، redeploy ކުރާށެވެ. އެދެންދެން ބެހެއްޓާށެވެ؛ ނުކުރެވޭފައިވާ value އެއިން ރެޕް ކުރިފައި ހުރެދާނެއެވެ.

### ޖޮބް ކިޔާ ތަކެތި <!--quire:what-the-job-walks-->

ރެޕް ކުރެވޭ DEK ހުރި ހުރިހާ store: `SEALED_STORES` ގައިވާތަކެތި (`apps/worker/src/key-rotation.ts`). Control database store އެއް control database ގައި ކިޔާއެވެ؛ organisation store އެއް row-level security ދަށުން ކޮންމެ އޮގަނައިޒޭޝަނަކުން، އެއޮގަނައިޒޭޝަންގެ database ގައި ކިޔާއެވެ؛ dedicated database އަށް pin ކުރި tenant އެތާގައި ރޮޓޭޓް ވެއެވެ. Schema އަށް wrapped-key column އެއް އިތުރުވިއްޔާ ލިސްޓުގައި ނެތްނަމަ އެއް ޓެސްޓެއް ފޭލްވެ، credential review އިން sealed column އެއް ލިސްޓް ކަމަށް ލިޔެ، ލިސްޓުން ފެއިލް ކުރިޔާ އިތުރު ޓެސްޓެއް ފޭލްވެއެވެ.

### ރެކޯޑް <!--quire:the-record-->

- `ops.key_rotation`: ކޮންމެ ރޮޓޭޝަނަކަށް އެއް row؛ ސަބަބާއި، އެދިމީހާ، ހާލަތު އަދި މުޅި ނަތީޖާ (އަލުން ރެޕް ކުރި، ކުރިން މިހާރުގެ، ނުނިމިހުރި، ފޭލް ވި).
- `ops.key_rotation_progress`: ކިޔި ފަހުން store އަދި scope އަކަށް row؛ ކިޔެވޭ ނުވި key reference އަދި އެއަށް ކިހާ އަގެއް ހުރިތޯ. އަލުން ފެށިޔަސް މިތަކެއްޗެއް ދޫކޮށްލައެވެ.
- Platform audit chain: `platform/key_rotation_request` (ސަބަބާއެކު)، ކޮންމެ store އަކަށް count އާއެކު އެއް `platform/key_rotation_store`، އަދި `platform/key_rotation_complete` ނުވަތަ `platform/key_rotation_fail`; reminder އަށް `platform/key_age_reminder`.
- Metrics: `quire.secrets.master_key.age` އަދި `quire.secrets.rewrap.outstanding` (ފަހު ރޮޓޭޝަނުން ނުރައްކާ ނުވަތަ ނުރެޕް ކުރެވި ފަހުން އޮތް އަގުތައް).

### އަގުތައް ނުނިމުން <!--quire:when-values-are-unresolved-->

ނުނިމި ހުރި value އެއް އިންސްޓޮލޭޝަނުން ނެތް key reference އަކުން wrap ކުރެވިފައި ހުރެދާނެއެވެ، ނުވަތަ އޭގެ column އެދޭ shape ގައި ނެތެވެ. progress record އިން reference ދައްކާނެއެވެ (މިސާލަކަށް `env:QUIRE_MASTER_KEY:v0 (unreadable)`). އެ ކީ އަނބުރާ `QUIRE_MASTER_KEY_RETIRED` ގައި ލައި އަލުން ރޮޓޭޓްކުރާށެވެ؛ ކީ ހިލަވެފައި ނަމަ، އޮގަނައިޒޭޝަންގެ އެޑްމިނިސްޓްރޭޓަރަށް credential އަލުން ލިޔެދޭށެވެ؛ އެއިރު މިހާރުގެ ކީއިން ސީލްކުރެވޭނެއެވެ. ފޭލް ވި ރޮޓޭޝަންގެ އެރަރު ރެކޯޑްގައި ފެންނާނެއެވެ؛ ސަބަބު އިސްލާހުކޮށް އަލުން ރިކުއެސްޓްކުރާށެވެ.

## ސޮއި ކީތައް <!--quire:signing-keys-->

މާސްޓަރ ކީއާ ވަކިން: ކޮންމެ އޮގަނައިޒޭޝަނެއްގެ OpenID Connect token އަދި LTI މެސެޖްތައް އޭގެ RSA key އިން ސޮއިކޮށް، `/.well-known/jwks.json` ގައި ޕަބްލިޝްކުރެއެވެ. މީގެ ކަމަށް އޮޕަރޭޓަރެއް ނުބޭނުންވެއެވެ. ގަޑިއަކުން `platform.signing_keys` schedule ކީ 90 ދުވަހު ނިމުމުގެ 7 ދުވަސް ކުރިން އާ ކީ ޕަބްލިޝްކުރެއެވެ؛ އެ ފަހުން އާ ކީ ސޮއިކުރުން ފަށާ، ކުރީގެ ކީ retiring ވެއެވެ؛ އެ ފަހުން 90 ދުވަސްވުމުން ކުރީގެ ކީ ޑިލީޓްކޮށް key set އިން ނަގައެވެ. ކޮންމެ ފިޔަވަޅެއްވެސް platform audit chain ގައި `platform/signing_key_advance` ކަމަށް ރެކޯޑްވެއެވެ.

އޮގަނައިޒޭޝަނެއްގެ ކީ ގަޑިއިރު ކުރިން ބަދަލުކުރަން، މިސާލަކަށް އެކްސްޕޯޝަރއެއް ފަހުން:

- console ގައި: Security، Master key، Publish a new signing key (`platform/keys_manage` ލާޒިމެވެ)؛ ނުވަތަ
- worker environment ހުރި shell އަކުން: `bun run kek:rotate signing-keys rotate --tenant <slug or id> --reason "Key exposed, INC-3310"`. `bun run kek:rotate signing-keys status` އިން ކޮންމެ އޮގަނައިޒޭޝަނަކުގެ stage ގައި ހުރި ކީ ލިސްޓްކުރެއެވެ.

އާ ކީ އެވަގުތު ޕަބްލިޝްކޮށް، ހަފްތާއެއްފަހުން ސޮއި ކުރަން ފަށާއެވެ؛ އެވަގުތު މިހާރުގެ ކީ retiring ވެއެވެ. ހަފްތާއަކީ ހިސާބުކޮށް ހޮވި ގަޑިއެކެވެ: relying party އިން key set cache ކުރާތީ އޭތައް އަލުން ކިޔަން މުއްދަތު ހުރުން މުހިންމެވެ؛ ކުރު އެވަގުތު ހުރިހާ ޓޫލެއް އެއްފަހަރާ ފޭލްވެދާނެއެވެ. Retiring ކީ ތިބާގެ ކީ set ގައި 90 ދުވަސްދެމިތިބި، އެއިން ސޮއިކުރި token އަދި ވެރިފައިކުރެވޭނެއެވެ؛ އެކްސްޕޯޝަރެއް ވާތީ އަވަހަށް ޓްރަސްޓް ނުކުރާނަމަ، އޭގެ row ފޮހުމަކީ ޗޭންޖް ރެކޯޑަކުގައި އޮޕަރޭޓަރގެ އަމިއްލަ database access އިން ކުރާ ކަމެކެވެ (break-glass access އަކީ read-only)؛ އެ ކީއަކުން ސޮއި ކުރި token ފަހުން ވެރިފައި ނުކުރެވޭނެއެވެ. އެ ފޯސްޑް ރޮޓޭޝަން audit chain ގައި ސަބަބާއެކު `platform/signing_key_rotate` ކަމަށް ހުންނާނެއެވެ. އާ ކީ wrap ކުރަން worker އަށް ވެބް ޓިއަރގެ `QUIRE_MASTER_KEY` settings އެއްގޮތް ލާޒިމެވެ؛ master key އަށް `bun run kek:rotate` ހިންގުމުން signing key ތައްވެސް ރެޕް ކުރެއެވެ (`oauth_signing_key` `SEALED_STORES` ގައިވެއެވެ).

## Production އަށް break-glass އެކްސެސް <!--quire:break-glass-production-access-->

މީހެއްގެ production access ހުޅުވިގޮތަށް ދެމިތިބޭނެ ނޫނެވެ. ކަމެއް ގަޑިނުހިފާނަމަ، owner އަކު break-glass grant އެއް ދެއެވެ: Platform console، Security، Break-glass access.

- Grant އަށް scope އެއް (އެއް އޮގަނައިޒޭޝަން ނުވަތަ platform registry)، 20 އަކުރުން ދިގު incident ނުވަތަ ticket ނަންދޭ ސަބަބެއް، އަދި 5 އިން 240 މިނިޓަށް window އެއް ހުންނާނެއެވެ. އޭނާ އަމިއްލައަށް ނިމޭ: statement ކޮންމެއްގައި ގަޑި ބަލައެވެ.
- އެއް grant އެދި ދޭ owner އަށް ނުވަތަ އެހެން owner އަކަށް (ދެމީހުންގެ ގޮތް) ދެވޭނެއެވެ. ދިން މީހާއަށް އެކަނި ބޭނުންކުރެވެއެވެ. ދިނުމަށް `platform/break_glass_issue` އަދި ބޭނުންކުރުމަށް `platform/break_glass_use` ލާޒިމެވެ؛ ޑިފޯލްޓުން ދެތިން ހުއްދަ owner އަކަށެވެ.
- Statement ތައް database login ގައި ނޫން gateway ގައި ހިންގައެވެ: read-only، އެކްކަކުން އެކަކު، އޮގަނައިޒޭޝަނަށް ނުވަތަ control registry އަށް ބަންދުކޮށް، 5 ސިކުންތުގެ timeout އާއެކު އަދި 500 row އަށް ހަމަކޮށް. Binary value ތައް size އަކުން ދައްކާއެވެ.
- Platform audit chain ގައި ދިނުން (ސަބަބާއެކު)، revocation، ހުރިހާ statement ހިންގާ ކުރިން (`platform/break_glass_statement`، މަނާވި އެއް `denied` ނަތީޖާއާއެކު)، އަދި ނަތީޖާ (`platform/break_glass_result`) ރެކޯޑްކުރެއެވެ. `ops.break_glass_statement` ގައި audit entry ID ތައް ހުރެއެވެ، އެހެންވެ grant އާއި audit entry ތައް ގުޅޭނެއެވެ.
- ލިޔުމަށް އެދޭނެ ގޮތެއް ނެތެވެ. ރިލީޒެއް ދެންދެން ނުހުރޭ ބަދަލެއް އޮޕަރޭޓަރގެ އަމިއްލަ database access އިން، އަމިއްލަ change record ދަށުން، އެއްމެ ކަމުން ބޭރަށް ކުރަންޖެހެއެވެ؛ އެ record ގައި މިތަނުގައި ބޭނުންކުރި incident reference ލިޔާށެވެ.

Database credential ނުދޭނީ ކީއްވެތޯ: Postgres login އެކަން އެދިފައި އޮތް session ފަހުންވެސް ދެމިތިބެއެވެ، އެޕްލިކޭޝަން އަސަސް ކުރާ row-level security ބޭރުކޮށް، އެ ޕްރޮޑަކްޓްގެ audit chain އަށް ލިޔަން ނުކުރެވޭނެއެވެ؛ އެހެންވެ statement ތައް ސާރވަރ log ޝިޕް ކުރާ ހަމައަކަށްވުރެ ވާހަކައެއް ނެތެވެ. Gateway އިން audit trail އެކްސެސްގެ ޚުޞޫޞިއްޔަތަށް ހަދައެވެ، އެކްސެސް ކައިރީގައި ކުރާ ޢަމަލަކަށް ނޫނެވެ.

Audit އެދުމަށް: އެ މުއްދަތުގެ grant ތައް ލިސްޓްކޮށް (Break-glass access)، statement އަދި audit entry ID ތަކަށް grant ގެ history ހުޅުވާ، platform audit chain ގައި އެ entry ތައް ކިޔާށެވެ (`bun run audit:verify --platform` އިން chain ރަނގަޅުކަން ތައިދީކުރެއެވެ).

Source: https://docs.quirelms.com/dv/ops/key-rotation/index.mdx
