Tvērumi
Ko atslēgai ir atļauts darīt.
Vārdnīca
Slēgta kopa formā resource:action. Pietiekami maza, lai to rādītu cilvēkam kā izvēles rūtiņu sarakstu, un pietiekami stabila, lai saglabāts piešķīrums nozīmētu to pašu arī gadu vēlāk. Tajā pašā vārdnīcā ir rakstīta darbvietas LOMA un tā pati ierobežo MCP rīkus, tāpēc tikai lasīšanas klients pat neredz sūtīšanas rīku. Viens alfabēts, trīs virsmas.
| Tvērums | Piešķir |
|---|---|
| emails:send | Sūtīt e-pastu |
| emails:read | Lasīt nosūtītos ziņojumus un to piegādes statusu |
| drafts:read | Lasīt melnrakstus |
| drafts:write | Veidot un rediģēt melnrakstus |
| threads:read | Lasīt pavedienus un ziņojumus |
| threads:write | Marķēt, lasīt un arhivēt pavedienus |
| labels:read | Lasīt etiķetes |
| labels:write | Veidot un rediģēt etiķetes |
| contacts:read | Lasīt kontaktus |
| contacts:write | Pievienot, rediģēt un noņemt kontaktus |
| audiences:read | Lasīt auditorijas un to sastāvu |
| audiences:write | Veidot un rediģēt auditorijas un mainīt to sastāvu |
| calendar:read | Lasīt kalendāra notikumus un ielūgumus |
| calendar:write | Veidot, mainīt kalendāra notikumus un atbildēt uz tiem |
| templates:read | Lasīt e-pasta veidnes un tās priekšskatīt |
| templates:write | Veidot, rediģēt e-pasta veidnes un sūtīt ar tām |
| domains:read | Lasīt domēnus un to DNS statusu |
| domains:write | Verificēt un konfigurēt domēnus |
| webhooks:read | Lasīt webhook galapunktus un piegādes |
| webhooks:write | Veidot, rediģēt un testēt webhook |
| rules:read | Lasīt pasta noteikumus un tos testēt |
| rules:write | Veidot, rediģēt un pārkārtot pasta noteikumus |
| connections:read | Lasīt, kuras pastkastes ir pievienotas |
| members:read | Redzēt, kas ir darbvietā un kādas tiesības tiem ir |
| members:write | Pievienot un noņemt cilvēkus un mainīt, kam tie var piekļūt |
| roles:read | Lasīt lomas, ko definē šī darbvieta |
| roles:write | Veidot, rediģēt un dzēst lomas |
| settings:read | Lasīt pastkastes iestatījumus, tostarp parakstu |
| settings:write | Mainīt pastkastes iestatījumus un parakstu |
| keys:write | Nomainīt savu noslēpumu, nevienam neatverot konsoli |
Atslēga, kas izveidota bez apdomāta tvērumu saraksta, saņem emails:send un neko citu. Drošais noklusējums akreditācijas datiem ir šaurākais, kas tos padara noderīgus.
Atslēgu ierobežo loma aiz tās
Atslēgu var izdot pret LOMU, un loma ir griesti, nevis otrs piešķīrums. Ko atslēga patiesībā drīkst darīt, ir tās pašas tvērumu ŠĶĒLUMS ar šīs lomas atļaujām (key.scopes ∩ role.permissions), aprēķināts vienreiz uz robežas, katram pieprasījumam, pirms tiek sasniegts kāds galapunkts. Nekas tālāk lejup nezina, ka lomas vispār pastāv: tvērums, kura lomai nav, vienkārši nav sarakstā, ko lasa tvērumu pārbaudes.
Tātad abi saraksti tiek lasīti kopā, un neviens pats par sevi neuzvar. Atslēga ar emails:send zem lomas, kurai tā nav, sūtīt nedrīkst; loma ar emails:send neko nedod atslēgai, kas to nekad nav prasījusi. Atzīmēt tvērumu nozīmē lūgt pilnvaras, un loma izlemj, cik daudz no prasītā jūs saņemat.
Atslēgai BEZ lomas nav griestu, un tāpēc tā ir tik plaša, cik plaša ir darbvieta, pret kuru tā izdota. Tieši tāda ir katra atslēga, kas izveidota pirms lomu ieviešanas, un tādu joprojām iegūst īpašnieks, kas šo lauku neaiztiek, tāpēc tukša loma ir PLAŠĀKAIS stāvoklis, kādā atslēga var būt, nevis šaurākais. Tāpēc arī, dzēšot lomu, jums jāpasaka, kurp lai dodas tās atslēgas: atstāt tās bez lomas klusi paaugstinātu katru no tām.
Šķēlums tiek aprēķināts katram pieprasījumam, nevis iespiests atslēgā izdošanas brīdī. Tāpēc lomas sašaurināšana ir dzīva atsaukšana, kas ir spēkā jau izsaucēja nākamajā izsaukumā, atslēgu nemaz nerotējot, un paplašināšana darbojas tieši tāpat — un tieši šo pusi ir vērts paturēt prātā.
GET /ping un GET /keys/self ziņo scopes līdzās grantedScopes un roleId vienas konkrētas kļūmes dēļ. scopes ir faktiskais saraksts un vienīgais, kas kaut ko autorizē; grantedScopes ir tas, ar ko atslēga tika izdota. Viss, kas ir otrajā un trūkst pirmajā, ir atņemts ar lomu, un šī starpība ir pilnīga atbilde uz jautājumu „manai atslēgai ir emails:send, un es saņemu insufficient_scope“. Risinājums ir lomas maiņa, nevis vēl viena atslēga.
curl "$OE/ping" -H "$AUTH" { "ok": true, "keyId": "4c1b257a66287fd113bd89d0", "mode": "live", "scopes": ["emails:read", "threads:read"], "roleId": "role_c40a95f21cc65d31c2a89e07", "grantedScopes": ["emails:send", "emails:read", "threads:read"], "workspaceId": "10417196-e324-4283-af98-66ec62167c47"}Piecas atļaujas nekad nevar nonākt uz atslēgas: api-keys:read, api-keys:write, billing:read, billing:write un workspace:manage. Tās ir atļaujas, bet nav tvērumi, tāpēc neviena loma, lai cik dāsna, nevar tās uzlikt marķierim: izdot vēl vienu atslēgu, mainīt, ko drīkst cita atslēga, vai mainīt plānu var tikai pieteicies cilvēks. Vienīgais, ko atslēga drīkst darīt pati ar sevi, ir nomainīt savu noslēpumu, un tas ir aiz keys:write tvēruma. GET /roles/permissions šīm piecām norāda scope: false, un tieši tas ļauj vienam komponentam attēlot gan lomu matricu, gan atslēgas izveides izvēles rūtiņu sarakstu.
roles:write faktiski ir visa vārdnīca, un izlikties citādi būtu bīstamāka dokumentācija. Atslēga, kurai tā ir, var ar PATCH mainīt pašu lomu, kas to ierobežo, un iedot sev visu pārējo, un, tā kā griesti tiek aprēķināti katram pieprasījumam, plašākie stājas spēkā jau nākamajā izsaukumā. Tas nav caurums, ko aizlāpīt, jo lomu redaktors, kas nevar rediģēt lomas, nav lomu redaktors. Tas ir iemesls nelikt roles:write uz atslēgas, kurai vajadzēja tikai lasīt dalībnieku sarakstu.
Sūtīšanas tvērums
Atsevišķi no tvērumiem atslēgu var sašaurināt arī tajā, kā vārdā tā drīkst sūtīt. Tā nes divus sarakstus. domainAllowlist satur veselus domēnus, un atslēga, kurai ir domēns, drīkst sūtīt no jebkuras adreses uz tā, arī no adresēm, kas izveidotas pēc atslēgas. addressAllowlist satur atsevišķas adreses. Atstājiet abus tukšus, un atslēga ir tikpat plaša kā darbvieta, nekad plašāka. GET /keys/self rāda abus sarakstus, un GET /addresses ziņo, ko konkrētā atslēga patiešām drīkst lietot, kas ir atbilde uz neizskaidrojamu from_address_forbidden.
Tā pati kopa sašaurina to, ko atslēga lasa. Nosūtītais pasts, izsekošana un kalendārs atbild tikai par adresēm, kuru vārdā atslēga drīkst sūtīt, tāpēc atslēga, kas ierobežota ar vienu domēnu, cita domēna vārdā ne sūta, ne lasa. Vesels domēns turklāt ļauj atslēgai iestatīt šī domēna izsekošanas resursdatoru, ko atslēga, kas ierobežota ar atsevišķām adresēm, nevar.
Tātad ir trīs sašaurinājumi, un tie savienojas, nevis viens otru pārraksta: atslēgas tvērumi, virs tās esošās lomas atļaujas un domēni un adreses, ko tā drīkst likt From galvenē. Sūtīšanai vajadzīgi visi trīs, un atteikums nosauc tikai to pirmo, pret kuru tas atdūrās.