Skip to main content
Version: 3.19.0

Προέλευση και Ακεραιότητα Helm

Το Helm διαθέτει εργαλεία προέλευσης που βοηθούν τους χρήστες chart να επαληθεύσουν την ακεραιότητα και την προέλευση ενός πακέτου. Χρησιμοποιώντας εργαλεία βασισμένα σε βιομηχανικά πρότυπα, σε PKI, GnuPG και σεβαστούς διαχειριστές πακέτων, το Helm μπορεί να δημιουργήσει και να επαληθεύσει αρχεία υπογραφής.

Επισκόπηση

Η ακεραιότητα καθορίζεται συγκρίνοντας ένα chart με μια εγγραφή προέλευσης. Οι εγγραφές προέλευσης αποθηκεύονται σε αρχεία προέλευσης, τα οποία αποθηκεύονται μαζί με το πακεταρισμένο chart. Για παράδειγμα, αν ένα chart ονομάζεται myapp-1.2.3.tgz, το αρχείο προέλευσής του θα είναι myapp-1.2.3.tgz.prov.

Τα αρχεία προέλευσης δημιουργούνται κατά τη διαδικασία πακεταρίσματος (helm package --sign ...) και μπορούν να ελεγχθούν από πολλές εντολές, κυρίως την helm install --verify.

Η Ροή Εργασίας

Αυτή η ενότητα περιγράφει μια πιθανή ροή εργασίας για την αποτελεσματική χρήση δεδομένων προέλευσης.

Προαπαιτούμενα:

  • Ένα έγκυρο ζεύγος κλειδιών PGP σε δυαδική μορφή (όχι ASCII-armored)
  • Το εργαλείο γραμμής εντολών helm
  • Εργαλεία γραμμής εντολών GnuPG (προαιρετικά)
  • Εργαλεία γραμμής εντολών Keybase (προαιρετικά)

ΣΗΜΕΙΩΣΗ: Αν το ιδιωτικό κλειδί PGP σας έχει κωδικό πρόσβασης, θα σας ζητηθεί να τον εισάγετε για οποιαδήποτε εντολή υποστηρίζει την επιλογή --sign.

Η δημιουργία ενός νέου chart είναι ίδια με πριν:

$ helm create mychart
Creating mychart

Όταν είστε έτοιμοι για πακετάρισμα, προσθέστε τη σημαία --sign στην εντολή helm package. Επίσης, καθορίστε το όνομα με το οποίο είναι γνωστό το κλειδί υπογραφής και το keyring που περιέχει το αντίστοιχο ιδιωτικό κλειδί:

$ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart

Σημείωση: Η τιμή του ορίσματος --key πρέπει να είναι ένα υποσύνολο του uid του επιθυμητού κλειδιού (στην έξοδο της gpg --list-keys), για παράδειγμα το όνομα ή το email. Το αποτύπωμα δεν μπορεί να χρησιμοποιηθεί.

ΣΥΜΒΟΥΛΗ: Για χρήστες GnuPG, το μυστικό keyring σας βρίσκεται στο ~/.gnupg/secring.gpg. Μπορείτε να χρησιμοποιήσετε την εντολή gpg --list-secret-keys για να δείτε τα κλειδιά που διαθέτετε.

Προειδοποίηση: Το GnuPG v2 αποθηκεύει το μυστικό keyring σας χρησιμοποιώντας τη νέα μορφή kbx στην προεπιλεγμένη τοποθεσία ~/.gnupg/pubring.kbx. Χρησιμοποιήστε την ακόλουθη εντολή για να μετατρέψετε το keyring σας στην παλαιότερη μορφή gpg:

$ gpg --export >~/.gnupg/pubring.gpg
$ gpg --export-secret-keys >~/.gnupg/secring.gpg

Τώρα θα πρέπει να βλέπετε και τα δύο αρχεία mychart-0.1.0.tgz και mychart-0.1.0.tgz.prov. Και τα δύο αρχεία θα πρέπει τελικά να μεταφορτωθούν στο επιθυμητό αποθετήριο chart.

Μπορείτε να επαληθεύσετε ένα chart χρησιμοποιώντας helm verify:

$ helm verify mychart-0.1.0.tgz

Μια αποτυχημένη επαλήθευση έχει την εξής μορφή:

$ helm verify topchart-0.1.0.tgz
Error: sha256 sum does not match for topchart-0.1.0.tgz: "sha256:1939fbf7c1023d2f6b865d137bbb600e0c42061c3235528b1e8c82f4450c12a7" != "sha256:5a391a90de56778dd3274e47d789a2c84e0e106e1a37ef8cfa51fd60ac9e623a"

Για να επαληθεύσετε κατά την εγκατάσταση, χρησιμοποιήστε τη σημαία --verify.

$ helm install --generate-name --verify mychart-0.1.0.tgz

Αν το keyring που περιέχει το δημόσιο κλειδί σχετιζόμενο με το υπογεγραμμένο chart δεν βρίσκεται στην προεπιλεγμένη τοποθεσία, ίσως χρειαστεί να υποδείξετε το keyring με --keyring PATH όπως στο παράδειγμα της helm package.

Αν η επαλήθευση αποτύχει, η εγκατάσταση θα ακυρωθεί πριν καν αποδοθεί το chart.

Χρήση διαπιστευτηρίων Keybase.io

Η υπηρεσία Keybase.io διευκολύνει τη δημιουργία μιας αλυσίδας εμπιστοσύνης για μια κρυπτογραφική ταυτότητα. Τα διαπιστευτήρια Keybase μπορούν να χρησιμοποιηθούν για την υπογραφή charts.

Προαπαιτούμενα:

  • Ένας διαμορφωμένος λογαριασμός Keybase.io
  • Εγκατεστημένο τοπικά το GnuPG
  • Εγκατεστημένο τοπικά το keybase CLI

Υπογραφή πακέτων

Το πρώτο βήμα είναι να εισάγετε τα κλειδιά Keybase στο τοπικό σας GnuPG keyring:

$ keybase pgp export -s | gpg --import

Αυτό θα μετατρέψει το κλειδί Keybase σας σε μορφή OpenPGP και στη συνέχεια θα το εισάγει τοπικά στο αρχείο ~/.gnupg/secring.gpg.

Μπορείτε να επαληθεύσετε εκτελώντας gpg --list-secret-keys.

$ gpg --list-secret-keys
/Users/mattbutcher/.gnupg/secring.gpg
-------------------------------------
sec 2048R/1FC18762 2016-07-25
uid technosophos (keybase.io/technosophos) <technosophos@keybase.io>
ssb 2048R/D125E546 2016-07-25

Σημειώστε ότι το μυστικό κλειδί σας θα έχει μια συμβολοσειρά αναγνώρισης:

technosophos (keybase.io/technosophos) <technosophos@keybase.io>

Αυτό είναι το πλήρες όνομα του κλειδιού σας.

Στη συνέχεια, μπορείτε να πακετάρετε και να υπογράψετε ένα chart με helm package. Βεβαιωθείτε ότι χρησιμοποιείτε τουλάχιστον μέρος αυτής της συμβολοσειράς ονόματος στο --key.

$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart

Ως αποτέλεσμα, η εντολή package θα παράγει και ένα αρχείο .tgz και ένα αρχείο .tgz.prov.

Επαλήθευση πακέτων

Μπορείτε επίσης να χρησιμοποιήσετε παρόμοια τεχνική για να επαληθεύσετε ένα chart που έχει υπογραφεί από το κλειδί Keybase κάποιου άλλου. Ας πούμε ότι θέλετε να επαληθεύσετε ένα πακέτο υπογεγραμμένο από τον keybase.io/technosophos. Για να το κάνετε αυτό, χρησιμοποιήστε το εργαλείο keybase:

$ keybase follow technosophos
$ keybase pgp pull

Η πρώτη εντολή παραπάνω ακολουθεί τον χρήστη technosophos. Στη συνέχεια, η keybase pgp pull κατεβάζει τα κλειδιά OpenPGP όλων των λογαριασμών που ακολουθείτε, τοποθετώντας τα στο GnuPG keyring σας (~/.gnupg/pubring.gpg).

Τώρα μπορείτε να χρησιμοποιήσετε helm verify ή οποιαδήποτε εντολή με τη σημαία --verify:

$ helm verify somechart-1.2.3.tgz

Λόγοι που ένα chart μπορεί να μην επαληθευτεί

Αυτοί είναι συνήθεις λόγοι αποτυχίας.

  • Το αρχείο .prov λείπει ή είναι κατεστραμμένο. Αυτό υποδηλώνει ότι κάτι έχει ρυθμιστεί λανθασμένα ή ότι ο αρχικός συντηρητής δεν δημιούργησε αρχείο προέλευσης.
  • Το κλειδί που χρησιμοποιήθηκε για την υπογραφή του αρχείου δεν βρίσκεται στο keyring σας. Αυτό υποδηλώνει ότι η οντότητα που υπέγραψε το chart δεν είναι κάποιος που έχετε ήδη υποδείξει ότι εμπιστεύεστε.
  • Η επαλήθευση του αρχείου .prov απέτυχε. Αυτό υποδηλώνει ότι κάτι δεν πάει καλά είτε με το chart είτε με τα δεδομένα προέλευσης.
  • Τα hash αρχείων στο αρχείο προέλευσης δεν ταιριάζουν με το hash του αρχείου αρχειοθήκης. Αυτό υποδηλώνει ότι η αρχειοθήκη έχει παραποιηθεί.

Αν μια επαλήθευση αποτύχει, υπάρχει λόγος να μην εμπιστεύεστε το πακέτο.

Το Αρχείο Προέλευσης

Το αρχείο προέλευσης περιέχει το αρχείο YAML του chart μαζί με αρκετές πληροφορίες επαλήθευσης. Τα αρχεία προέλευσης είναι σχεδιασμένα να δημιουργούνται αυτόματα.

Προστίθενται τα ακόλουθα δεδομένα προέλευσης:

  • Το αρχείο chart (Chart.yaml) περιλαμβάνεται για να δώσει τόσο στους ανθρώπους όσο και στα εργαλεία μια εύκολη προβολή στα περιεχόμενα του chart.
  • Η υπογραφή (SHA256, όπως στο Docker) του πακέτου chart (το αρχείο .tgz) περιλαμβάνεται και μπορεί να χρησιμοποιηθεί για την επαλήθευση της ακεραιότητας του πακέτου chart.
  • Ολόκληρο το σώμα υπογράφεται χρησιμοποιώντας τον αλγόριθμο που χρησιμοποιεί το OpenPGP (δείτε το Keybase.io για έναν αναδυόμενο τρόπο που κάνει την κρυπτογραφική υπογραφή και επαλήθευση εύκολη).

Ο συνδυασμός αυτών δίνει στους χρήστες τις ακόλουθες εγγυήσεις:

  • Το ίδιο το πακέτο δεν έχει παραποιηθεί (checksum πακέτου .tgz).
  • Η οντότητα που κυκλοφόρησε αυτό το πακέτο είναι γνωστή (μέσω της υπογραφής GnuPG/PGP).

Η μορφή του αρχείου είναι η ακόλουθη:

Hash: SHA512

apiVersion: v2
appVersion: "1.16.0"
description: Sample chart
name: mychart
type: application
version: 0.1.0

...
files:
mychart-0.1.0.tgz: sha256:d31d2f08b885ec696c37c7f7ef106709aaf5e8575b6d3dc5d52112ed29a9cb92
-----BEGIN PGP SIGNATURE-----

wsBcBAEBCgAQBQJdy0ReCRCEO7+YH8GHYgAAfhUIADx3pHHLLINv0MFkiEYpX/Kd
nvHFBNps7hXqSocsg0a9Fi1LRAc3OpVh3knjPfHNGOy8+xOdhbqpdnB+5ty8YopI
mYMWp6cP/Mwpkt7/gP1ecWFMevicbaFH5AmJCBihBaKJE4R1IX49/wTIaLKiWkv2
cR64bmZruQPSW83UTNULtdD7kuTZXeAdTMjAK0NECsCz9/eK5AFggP4CDf7r2zNi
hZsNrzloIlBZlGGns6mUOTO42J/+JojnOLIhI3Psd0HBD2bTlsm/rSfty4yZUs7D
qtgooNdohoyGSzR5oapd7fEvauRQswJxOA0m0V+u9/eyLR0+JcYB8Udi1prnWf8=
=aHfz
-----END PGP SIGNATURE-----

Σημειώστε ότι η ενότητα YAML περιέχει δύο έγγραφα (χωρισμένα με ...\n). Το πρώτο αρχείο είναι το περιεχόμενο του Chart.yaml. Το δεύτερο είναι τα checksums, μια αντιστοίχιση ονομάτων αρχείων σε SHA-256 digests του περιεχομένου κάθε αρχείου κατά τη στιγμή του πακεταρίσματος.

Το μπλοκ υπογραφής είναι μια τυπική υπογραφή PGP, η οποία παρέχει αντίσταση σε παραποίηση.

Αποθετήρια Chart

Τα αποθετήρια chart λειτουργούν ως κεντρική συλλογή Helm charts.

Τα αποθετήρια chart πρέπει να μπορούν να εξυπηρετούν αρχεία προέλευσης μέσω HTTP με συγκεκριμένο αίτημα, και πρέπει να τα καθιστούν διαθέσιμα στην ίδια διαδρομή URI με το chart.

Για παράδειγμα, αν η βασική διεύθυνση URL για ένα πακέτο είναι https://example.com/charts/mychart-1.2.3.tgz, το αρχείο προέλευσης, αν υπάρχει, ΠΡΕΠΕΙ να είναι προσβάσιμο στη διεύθυνση https://example.com/charts/mychart-1.2.3.tgz.prov.

Από την πλευρά του τελικού χρήστη, η εντολή helm install --verify myrepo/mychart-1.2.3 θα πρέπει να κατεβάζει τόσο το chart όσο και το αρχείο προέλευσης χωρίς επιπλέον διαμόρφωση ή ενέργεια από τον χρήστη.

Υπογραφές σε αποθετήρια βασισμένα σε OCI

Κατά τη δημοσίευση charts σε ένα αποθετήριο βασισμένο σε OCI, το plugin helm-sigstore μπορεί να χρησιμοποιηθεί για τη δημοσίευση προέλευσης στο sigstore. Όπως περιγράφεται στην τεκμηρίωση, η διαδικασία δημιουργίας προέλευσης και υπογραφής με κλειδί GPG είναι κοινές, αλλά η εντολή helm sigstore upload μπορεί να χρησιμοποιηθεί για τη δημοσίευση της προέλευσης σε ένα αμετάβλητο αρχείο καταγραφής διαφάνειας.

Καθιέρωση Αρχής και Αυθεντικότητας

Όταν ασχολούμαστε με συστήματα αλυσίδας εμπιστοσύνης, είναι σημαντικό να μπορούμε να καθιερώσουμε την αρχή ενός υπογράφοντα. Ή, για να το θέσουμε απλά, το παραπάνω σύστημα βασίζεται στο γεγονός ότι εμπιστεύεστε το άτομο που υπέγραψε το chart. Αυτό, με τη σειρά του, σημαίνει ότι πρέπει να εμπιστεύεστε το δημόσιο κλειδί του υπογράφοντα.

Μία από τις σχεδιαστικές αποφάσεις του Helm ήταν να μην εισαχθεί το ίδιο το Helm project στην αλυσίδα εμπιστοσύνης ως απαραίτητο μέρος. Δεν θέλουμε να είμαστε "η αρχή πιστοποίησης" για όλους τους υπογράφοντες chart. Αντίθετα, προτιμούμε έντονα ένα αποκεντρωμένο μοντέλο, που είναι μέρος του λόγου που επιλέξαμε το OpenPGP ως θεμελιώδη τεχνολογία μας. Έτσι, όσον αφορά την καθιέρωση αρχής, αφήσαμε αυτό το βήμα ως ανοικτό ζήτημα στο Helm 2 (μια απόφαση που συνεχίστηκε στο Helm 3).

Ωστόσο, έχουμε μερικές υποδείξεις και συστάσεις για όσους ενδιαφέρονται να χρησιμοποιήσουν το σύστημα προέλευσης:

  • Η πλατφόρμα Keybase παρέχει ένα δημόσιο κεντρικό αποθετήριο για πληροφορίες εμπιστοσύνης.
    • Μπορείτε να χρησιμοποιήσετε το Keybase για να αποθηκεύσετε τα κλειδιά σας ή να λάβετε τα δημόσια κλειδιά άλλων.
    • Το Keybase διαθέτει επίσης εξαιρετική τεκμηρίωση
    • Αν και δεν το έχουμε δοκιμάσει, η λειτουργία "secure website" του Keybase θα μπορούσε να χρησιμοποιηθεί για την εξυπηρέτηση Helm charts.
    • Η βασική ιδέα είναι ότι ένας επίσημος "αξιολογητής chart" υπογράφει charts με το κλειδί του/της, και το αρχείο προέλευσης που προκύπτει μεταφορτώνεται στη συνέχεια στο αποθετήριο chart.
    • Έχει γίνει κάποια δουλειά στην ιδέα ότι μια λίστα έγκυρων κλειδιών υπογραφής μπορεί να συμπεριληφθεί στο αρχείο index.yaml ενός αποθετηρίου.