Suplanuota užduotis ar žmogaus prisijungimas: kokią tapatybę turi matyti API?
Cron užduotis ir žmogus prie prisijungimo raginimo yra skirtingi subjektai. Palyginkite tinklo kelią, programos tapatybę ir pavedimą prieš automatizuodami.
Suplanuota užduotis ir žmogus prie prisijungimo raginimo kviečia tą pačią API su skirtingais kredencialais, skirtinga gyvavimo trukme ir skirtingais savininkais. Užduočiai reikia tinklo kelio, programos tapatybės ir leidimų rinkinio; žmogui reikia prisijungimo, antrojo veiksnio ir sesijos. Sumaišius abu, gaunama automatizacija, kuri lūžta kiekvieną kartą pasikeitus žmogaus slaptažodžiui, arba daugiaveiksnė politika, susilpninta tiek, kad cron užduotis liktų gyva.
Trys vartai, kurie atrodo kaip vieni
Šaltinio adreso taisyklė klausia, iš kur atėjo užklausa. Autentifikavimas klausia, kas skambina ir kokie įrodymai buvo pateikti. Autorizacija klausia, ar šis subjektas gali atlikti šią operaciją. VPN keičia tik pirmąjį iš trijų ir keičia jį kiekvienam procesui hoste, o ne vien užduočiai, todėl incidento įraše tris stebėjimus laikykite atskirai.
Štai kodėl išėjimo mazgo pakeitimas gali ištaisyti atmetimą dėl šaltinio adreso ir palikti negaliojantį žetoną nepaliestą. Štai kodėl galiojantis API žetonas nepadaro privataus galinio taško pasiekiamo iš užduoties, kuri neturi į jį maršruto.
Interaktyvus kelias yra blogas automatizacijos šablonas
Žmogaus prisijungimo skriptavimas vilioja, nes jis veikia vieną kartą. Skriptas išsaugo slaptažodį, galbūt vienkartinio slaptažodžio sėklą, ir tada priklauso nuo iššūkio, sukurto reikalauti žmogaus. Dabartinė geriausia OAuth saugumo praktika, RFC 9700, draudžia resource-owner-password-credentials suteikimą ir paaiškina, kodėl jis blogai tinka dviejų veiksnių ir kelių žingsnių autentifikavimui.
Palaikoma alternatyva paprastai yra konfidencialaus kliento srautas, kuriame autorizacijos serveris autentifikuoja programą ir išduoda žetoną. RFC 6749 4.4 skyriaus client-credentials suteikimas yra vienas pavyzdys. Jo egzistavimas nereiškia, kad kiekviena API jį priima, ar kad naudotojo deleguotą užduotį galima juo pakeisti, nes tai klausimai paslaugos savininkui. Paklauskite, kokį be priežiūros modelį palaiko paslauga, prieš rašydami kodą.
Kur VPN vis dar tinka
VPN gali suteikti tinklo kelią, kurio reikia privačiai API, ir tai yra teisėtas vaidmuo. Jis neautentifikuoja užduoties programai ir neapibrėžia, ką užduotis gali daryti. Bendras išėjimo adresas taip pat identifikuoja hostą, o ne užduotį, todėl leidžiamųjų sąrašo įrašas tam adresui įleidžia kiekvieną jame veikiantį procesą.
Jei užduotis veikia bendrame runneryje, šis skirtumas svarbesnis, o ne mažiau svarbus. Kitas darbo srautas tame pačiame hoste paveldi maršrutą ir adresą, ir API negali jų atskirti. Tai ta pati silpnybė kaip bendras slaptažodis, perkelta vienu sluoksniu žemiau. Padėkite apribojimą ten, kur programa gali jį įgyvendinti, ir izoliuokite runnerį, jei negalite labiau susiaurinti leidžiamųjų sąrašo.
Palyginkite abu sprendimus sąžiningai
Žmogaus prisijungimas duoda tikrą žmogų, tikrą antrąjį veiksnį ir audituojamą sesiją, ir jis negali veikti be priežiūros. Programos tapatybė duoda vykdymą be priežiūros, peržiūrimą apimtį ir kredencialus, kuriuos galite keisti, ir ji negali veikti už naudotoją, kuris nieko nepavedė. Nė vienas nėra silpnesnė kito versija; jie atsako į skirtingus klausimus. Rinkitės klausdami, ar užduotis turi veikti be niekieno, ir ar operacija turi būti priskirta konkrečiam naudotojui.
Jei abu atsakymai yra taip, sprendimui reikia pavedimo modelio, o ne pasiskolinto slaptažodžio. Užrašykite šį sprendimą ten, kur jį ras kitas prižiūrėtojas.
Ką patikrinti prieš perdavimą
Atlikite vieną leidžiamą operaciją ir vieną privalomą atmetimą iš tikrojo darbininko, ir išsaugokite abu rezultatus. Tada išbandykite pasibaigusius kredencialus ir elgesį, kai tinklo kelias nepasiekiamas, nes tai du gedimai, kurie naktį pažadina ką nors.
curl -sS -o /dev/null -w '%{http_code}\n' \
-H "Authorization: Bearer TOKEN" https://api.example.com/v1/records
Užrašykite subjektą, apimtį, rotacijos savininką ir vykdymo aplinką šalia to rezultato. Būtent šis įrašas paverčia kitą rotaciją rutina, o ne incidentu. Tai taip pat dalis, kurios prašo auditorius.