Μετάβαση στο περιεχόμενο

Εξουσιοδότηση — ποιος μπορεί να κάνει τι και πώς το αποδεικνύετε

Το Control Center απαντά σε δύο ερωτήματα εξουσιοδότησης, και είναι πραγματικά διαφορετικά μεταξύ τους. Το «Μπορεί αυτό το άτομο να καλέσει αυτή τη λειτουργία;» αφορά ανθρώπους, ρόλους και αποθετήρια. Το «Μπορεί αυτός ο πράκτορας να προκαλέσει αυτό το αποτέλεσμα;» αφορά ενέργειες, ορίσματα και έκταση επιπτώσεων — αυτό το ερώτημα το καλύπτουν οι Περιορισμοί.

Αυτή η σελίδα καλύπτει το πρώτο ερώτημα, καθώς και το αρχείο που αφήνουν πίσω τους και τα δύο.

Κάθε απόφαση εξουσιοδότησης στην πλευρά του ανθρώπου επιλύεται μέσω μίας και μοναδικής συνάρτησης:

can(principal, permission, resource) → allow | deny + why

Ένα δικαίωμα έχει τη μορφή <domain>:<tier> — tickets:write, members:administer, repos:read. Ο κατάλογος είναι παράγωγος, δεν έχει γραφτεί στο χέρι: υπολογίζεται από την ίδια την επιφάνεια λειτουργιών (το πρόθεμα του ονόματος της λειτουργίας δίνει τον τομέα, το κατώφλι ρόλου που ήδη επιβάλλει δίνει τη βαθμίδα), οπότε και οι ~550 λειτουργίες φέρουν δικαίωμα χωρίς να το έχει πληκτρολογήσει κανείς.

Αυτή η παραγωγή είναι η ιδιότητα που αξίζει να προστατευτεί. Σημαίνει ότι μια ΝΕΑ λειτουργία ελέγχεται εξ ορισμού — ο τρόπος αποτυχίας ενός χειροκίνητα σχολιασμένου μοντέλου είναι ότι κάποιος ξεχνά, και αυτό που ξεχνά είναι η πύλη ελέγχου. Ένα τεστ-καστάνια καθηλώνει το σύνολο των τομέων που προκύπτει, ώστε η προσθήκη μιας λειτουργίας κάτω από ένα νέο πρόθεμα να είναι απόφαση ονοματοδοσίας που παίρνει ο άνθρωπος και όχι ατύχημα.

Οι τέσσερις βαθμίδες αντιστοιχούν ακριβώς στους ενσωματωμένους ρόλους:

Βαθμίδα Κατώφλι ρόλου Παράδειγμα
read Επισκέπτης tickets:read
write Μέλος tickets:write
administer Διαχειριστής members:administer
own Ιδιοκτήτης workspace:own

Πέντε ενσωματωμένοι ρόλοι — Ιδιοκτήτης, Διαχειριστής, Μέλος, Θεατής, Επισκέπτης — είναι προκαθορισμένα σύνολα πάνω σε αυτόν τον κατάλογο. Η ιδιοκτησία είναι μία και μόνη θέση ανά χώρο εργασίας και μεταβιβάζεται ρητά με τη Μεταβίβαση ιδιοκτησίας (ένας ιδιοκτήτης που αποχωρεί είναι κατά τα άλλα μη αφαιρέσιμος: η αφαίρεση χρηστών μέσω SCIM αρνείται οποιονδήποτε ιδιοκτήτη χώρου εργασίας — πρώτα μεταβιβάστε την ιδιοκτησία).

Οι προσαρμοσμένοι ρόλοι είναι αφαιρετικοί. Ένας προσαρμοσμένος ρόλος ορίζει ένα βασικό προκαθορισμένο σύνολο (admin, member, viewer ή guest — ποτέ owner) και ένα σύνολο δικαιωμάτων που ΑΦΑΙΡΟΥΝΤΑΙ από αυτό — «Διαχειριστής, αλλά χωρίς διαχείριση μελών». Δεν μπορεί ποτέ να παραχωρήσει περισσότερα από τη βάση του, κι αυτό ακριβώς τους κάνει ασφαλείς για εισαγωγή σε μια υπάρχουσα εγκατάσταση: κάθε υπάρχων έλεγχος παραμένει έγκυρο άνω όριο. Τα μέλη τους κατέχουν ως custom:<id>, και ένας πελάτης πολύ παλιός για να καταλάβει αυτή την τιμή υποβαθμίζεται στον ρόλο Επισκέπτη αντί να μαντέψει.

Κάτω από τους ρόλους βρίσκονται οι χορηγήσεις ανά αποθετήριο (none / read / review / write): η ιδιότητα μέλους ενός χώρου εργασίας δεν ξεπερνά ποτέ σιωπηλά τα προνόμια του κεντρικού υπολογιστή κώδικα. Κάθε επιφάνεια που εκθέτει κώδικα τις ελέγχει — μαζί και όσες φτάνουν στον κώδικα πλαγίως, όπως ένα τερματικό ή μια συνεδρία επεξεργαστή που ανοίγει στο worktree ενός χώρου.

Ορισμένες λειτουργίες δεν αφορούν καθόλου έναν χώρο εργασίας: ρυθμίσεις σε επίπεδο εγκατάστασης, διαμόρφωση SSO, διαπιστευτήρια παρόχων, διαχείριση μοντέλων, αντίγραφα ασφαλείας ολόκληρης της εγκατάστασης. Αυτές δηλώνουν δικαιοδοσία διακομιστή και απορρίπτονται για όλους εκτός από τον χειριστή της εγκατάστασης (τον καταγεγραμμένο ιδιοκτήτη του διακομιστή). Υπάρχει σκόπιμα μία ταυτότητα χειριστή και ένας μόνο ορισμός της.

Κάθε απόφαση εξουσιοδότησης — χορήγηση και άρνηση — προσαρτάται σε ένα ίχνος ελέγχου ανά χώρο εργασίας, με αλυσίδα κατακερματισμού.

Ένα αρχείο μόνο αρνήσεων απαντά στο «τι μπλοκάραμε;» αλλά όχι στο «τι έκανε στην πραγματικότητα αυτός ο πράκτορας και ποιος το εξουσιοδότησε;», που είναι το ερώτημα από το οποίο ξεκινά η ανασκόπηση ενός περιστατικού. Έτσι, κάθε καταχώριση καταγράφει ολόκληρη την αλυσίδα απόδοσης: το υποκείμενο που ενεργεί, τον άνθρωπο για λογαριασμό του οποίου ενήργησε, την ανάθεση μέσω της οποίας έφτασε, την ενέργεια και τα ορίσματά της (ως σύνοψη), την απόφαση και τον κανόνα που αποφάσισε.

Οι καταχωρίσεις είναι αλυσιδωμένες: ο κατακερματισμός της καθεμιάς καλύπτει τον προηγούμενο, οπότε η επεξεργασία, η διαγραφή ή η αναδιάταξη οποιασδήποτε γραμμής σπάει κάθε κατακερματισμό μετά από αυτήν. Η Επαλήθευση αλυσίδας επανυπολογίζει τα πάντα από την αρχή και ονομάζει τον πρώτο κρίκο που δεν στέκει. Ένα αρχείο καταγραφής ελέγχου που δεν μπορείτε να ελέγξετε είναι απλώς ένα αρχείο· ένα που μπορείτε να επανυπολογίσετε είναι αποδεικτικό στοιχείο.

Δύο συνέπειες που αξίζει να γνωρίζετε:

  • Ο πίνακας ελέγχου εξαιρείται από τον καθαρισμό βάσει ηλικίας. Μια αλυσίδα κατακερματισμού δεν μπορεί να κοπεί από τη μέση. Η διατήρηση γίνεται με εξαγωγή και κατόπιν περικοπή, και η περικοπή αφήνει ένα σημείο ελέγχου που φέρει τον τελικό κατακερματισμό του τμήματος που αφαιρέθηκε, ώστε ό,τι επιβιώνει να επαληθεύεται ακόμη από την αρχή.
  • Βρίσκεται δίπλα στο χρονολόγιο δραστηριότητας, όχι πάνω από αυτό. Το χρονολόγιο δείχνει τι έκαναν οι άνθρωποι· αυτό δείχνει τι εγκρίθηκε και τι απορρίφθηκε. Ένα κοινό αναγνωριστικό συσχέτισης διαβάζει μία κλήση και στα δύο.

Εξάγεται ως JSON οριοθετημένο με αλλαγές γραμμής και μπορεί να μεταδοθεί σε ένα SIEM (Splunk, Elastic, Sentinel — ένα τελικό σημείο HTTP με bearer token). Η μετάδοση είναι εκ προθέσεως βέλτιστης προσπάθειας: ένα SIEM που βρίσκεται εκτός λειτουργίας δεν πρέπει ποτέ να μπλοκάρει την κλήση εργαλείου ενός πράκτορα, και το ανθεκτικό, επαληθεύσιμο αντίγραφο βρίσκεται ούτως ή άλλως στον δίσκο.

Μια εγκατάσταση μπορεί να ορίσει μέγιστη διάρκεια συνεδρίας και χρονικό όριο αδράνειας. Και τα δύο επιβάλλονται στον έλεγχο διαπιστευτηρίων συσκευής από τον οποίο περνούν όλες οι πιστοποιημένες διαδρομές — μια συνεδρία που ένας πελάτης θα μπορούσε να αγνοήσει απαντά σε ένα ερωτηματολόγιο, όχι σε έναν επιτιθέμενο. Μια εγκατάσταση μπορεί επίσης να απαιτεί SSO, το οποίο απενεργοποιεί τη χειροκίνητη σύζευξη για νέες συσκευές (με δικλίδα κατά του εγκλωβισμού: αρνείται όσο δεν υπάρχει λειτουργική σύνδεση SSO).

  • Όχι ACL ανά αντικείμενο. Δεν υπάρχει δικαίωμα ανά εισιτήριο ή ανά μήνυμα, σκόπιμα. Ο διαχωρισμός σε επίπεδο αποθετηρίου είναι αυτό που ζητούν στην πραγματικότητα οι ομάδες και υπάρχει· η κοινή χρήση ανά αντικείμενο είναι μια συνδυαστική επιφάνεια χωρίς αποδεδειγμένη ζήτηση εδώ.
  • Όχι μηχανή πολιτικών που τη ρυθμίζετε σε DSL. Το λεξιλόγιο είναι κλειστό επίτηδες, ώστε ολόκληρη η πολιτική να μπορεί να αναπαρασταθεί, να εξηγηθεί και να απαριθμηθεί.
  • Δεν επιβάλλεται πουθενά αλλού παρά μόνο στον διακομιστή. Οι έλεγχοι στην πλευρά του πελάτη υπάρχουν μόνο για να μην προσφέρεται ένα στοιχείο ελέγχου που θα απορριφθεί. Η δεσμευτική απόφαση είναι πάντα του διακομιστή.