Provenance et intégrité dans Helm
Helm dispose d'outils de provenance qui aident les utilisateurs de charts à vérifier l'intégrité et l'origine d'un package. Basé sur des outils standard de l'industrie comme PKI, GnuPG et des gestionnaires de paquets reconnus, Helm peut générer et vérifier des fichiers de signature.
Vue d'ensemble
L'intégrité est établie en comparant un chart à un enregistrement de provenance.
Ces enregistrements sont stockés dans des fichiers de provenance, conservés aux
côtés du chart packageé. Par exemple, si un chart est nommé myapp-1.2.3.tgz,
son fichier de provenance sera myapp-1.2.3.tgz.prov.
Les fichiers de provenance sont générés lors du packaging (helm package --sign ...)
et peuvent être vérifiés par plusieurs commandes, notamment helm install --verify.
Le flux de travail
Cette section décrit un flux de travail possible pour utiliser efficacement les données de provenance.
Prérequis :
- Une paire de clés PGP valide au format binaire (pas au format ASCII-armored)
- L'outil en ligne de commande
helm - Les outils en ligne de commande GnuPG (optionnel)
- Les outils en ligne de commande Keybase (optionnel)
NOTE : Si votre clé privée PGP possède une phrase de passe, vous serez invité
à la saisir pour toute commande prenant en charge l'option --sign.
La création d'un nouveau chart se fait comme d'habitude :
$ helm create mychart
Creating mychart
Lorsque vous êtes prêt à packager, ajoutez le drapeau --sign à helm package.
Spécifiez également le nom sous lequel la clé de signature est connue ainsi que
le trousseau de clés contenant la clé privée correspondante :
$ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart
Note : La valeur de l'argument --key doit être une sous-chaîne de l'uid
de la clé souhaitée (tel qu'affiché par gpg --list-keys), par exemple le nom ou
l'email. L'empreinte ne peut pas être utilisée.
ASTUCE : Pour les utilisateurs de GnuPG, votre trousseau de clés secrètes se
trouve dans ~/.gnupg/secring.gpg. Utilisez gpg --list-secret-keys pour lister
vos clés disponibles.
Attention : GnuPG v2 stocke votre trousseau de clés secrètes dans un nouveau
format kbx à l'emplacement par défaut ~/.gnupg/pubring.kbx. Utilisez la
commande suivante pour convertir votre trousseau au format gpg historique :
$ gpg --export >~/.gnupg/pubring.gpg
$ gpg --export-secret-keys >~/.gnupg/secring.gpg
À ce stade, vous devriez voir à la fois mychart-0.1.0.tgz et
mychart-0.1.0.tgz.prov. Ces deux fichiers doivent ensuite être téléversés vers
votre dépôt de charts.
Vous pouvez vérifier un chart avec helm verify :
$ helm verify mychart-0.1.0.tgz
Une vérification échouée ressemble à ceci :
$ helm verify topchart-0.1.0.tgz
Error: sha256 sum does not match for topchart-0.1.0.tgz: "sha256:1939fbf7c1023d2f6b865d137bbb600e0c42061c3235528b1e8c82f4450c12a7" != "sha256:5a391a90de56778dd3274e47d789a2c84e0e106e1a37ef8cfa51fd60ac9e623a"
Pour vérifier lors d'une installation, utilisez le drapeau --verify.
$ helm install --generate-name --verify mychart-0.1.0.tgz
Si le trousseau de clés contenant la clé publique associée au chart signé n'est
pas à l'emplacement par défaut, vous devrez peut-être indiquer le trousseau avec
--keyring PATH comme dans l'exemple helm package.
Si la vérification échoue, l'installation sera annulée avant même que le chart ne soit rendu.
Utiliser les identifiants Keybase.io
Le service Keybase.io facilite l'établissement d'une chaîne de confiance pour une identité cryptographique. Les identifiants Keybase peuvent être utilisés pour signer des charts.
Prérequis :
- Un compte Keybase.io configuré
- GnuPG installé localement
- La CLI
keybaseinstallée localement
Signer des packages
La première étape consiste à importer vos clés Keybase dans votre trousseau GnuPG local :
$ keybase pgp export -s | gpg --import
Cela convertira votre clé Keybase au format OpenPGP, puis l'importera localement
dans votre fichier ~/.gnupg/secring.gpg.
Vous pouvez vérifier en exécutant 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
Notez que votre clé secrète possède une chaîne d'identification :
technosophos (keybase.io/technosophos) <technosophos@keybase.io>
C'est le nom complet de votre clé.
Ensuite, vous pouvez packager et signer un chart avec helm package. Assurez-vous
d'utiliser au moins une partie de cette chaîne de nom dans --key.
$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart
En résultat, la commande package produira à la fois un fichier .tgz et un
fichier .tgz.prov.
Vérifier des packages
Vous pouvez également utiliser une technique similaire pour vérifier un chart
signé avec la clé Keybase d'une autre personne. Supposons que vous souhaitiez
vérifier un package signé par keybase.io/technosophos. Utilisez l'outil
keybase :
$ keybase follow technosophos
$ keybase pgp pull
La première commande suit l'utilisateur technosophos. Ensuite, keybase pgp pull
télécharge les clés OpenPGP de tous les comptes que vous suivez et les place dans
votre trousseau GnuPG (~/.gnupg/pubring.gpg).
À ce stade, vous pouvez utiliser helm verify ou n'importe quelle commande avec
le drapeau --verify :
$ helm verify somechart-1.2.3.tgz
Raisons pour lesquelles un chart peut ne pas être vérifié
Voici les raisons courantes d'échec.
- Le fichier
.provest manquant ou corrompu. Cela indique que quelque chose est mal configuré ou que le mainteneur original n'a pas créé de fichier de provenance. - La clé utilisée pour signer le fichier n'est pas dans votre trousseau. Cela indique que l'entité qui a signé le chart n'est pas quelqu'un en qui vous avez déjà indiqué avoir confiance.
- La vérification du fichier
.prova échoué. Cela indique un problème avec le chart ou les données de provenance. - Les hachages de fichiers dans le fichier de provenance ne correspondent pas au hachage du fichier d'archive. Cela indique que l'archive a été altérée.
Si une vérification échoue, il convient de se méfier du package.
Le fichier de provenance
Le fichier de provenance contient le fichier YAML du chart ainsi que plusieurs informations de vérification. Les fichiers de provenance sont conçus pour être générés automatiquement.
Les données de provenance suivantes sont ajoutées :
- Le fichier du chart (
Chart.yaml) est inclus pour donner aux humains et aux outils une vue claire du contenu du chart. - La signature (SHA256, comme Docker) du package du chart (le fichier
.tgz) est incluse et peut être utilisée pour vérifier l'intégrité du package. - L'ensemble du corps est signé avec l'algorithme utilisé par OpenPGP (voir Keybase.io pour une méthode émergente de signature et de vérification cryptographiques simplifiées).
Cette combinaison donne aux utilisateurs les assurances suivantes :
- Le package lui-même n'a pas été altéré (somme de contrôle du package
.tgz). - L'entité qui a publié ce package est connue (via la signature GnuPG/PGP).
Le format du fichier ressemble à ceci :
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-----
Notez que la section YAML contient deux documents (séparés par ...\n). Le
premier est le contenu de Chart.yaml. Le second contient les sommes de
contrôle : une correspondance entre les noms de fichiers et les condensés SHA-256
du contenu de chaque fichier au moment du packaging.
Le bloc de signature est une signature PGP standard, qui fournit une résistance à l'altération.
Dépôts de charts
Les dépôts de charts constituent une collection centralisée de charts Helm.
Les dépôts de charts doivent permettre de servir les fichiers de provenance via HTTP par une requête spécifique, et doivent les rendre disponibles au même chemin URI que le chart.
Par exemple, si l'URL de base d'un package est
https://example.com/charts/mychart-1.2.3.tgz, le fichier de provenance, s'il
existe, DOIT être accessible à
https://example.com/charts/mychart-1.2.3.tgz.prov.
Du point de vue de l'utilisateur final, helm install --verify myrepo/mychart-1.2.3
doit entraîner le téléchargement du chart et du fichier de provenance sans
configuration ni action supplémentaire de l'utilisateur.
Signatures dans les registres basés sur OCI
Lors de la publication de charts vers un registre basé sur OCI,
le plugin helm-sigstore peut être
utilisé pour publier la provenance sur sigstore. Comme
décrit dans la documentation,
le processus de création de provenance et de signature avec une clé GPG est
commun, mais la commande helm sigstore upload peut être utilisée pour publier
la provenance vers un journal de transparence immuable.
Établir l'autorité et l'authenticité
Dans les systèmes basés sur une chaîne de confiance, il est important de pouvoir établir l'autorité d'un signataire. Autrement dit, le système ci-dessus repose sur le fait que vous faites confiance à la personne qui a signé le chart. Ce qui implique que vous devez faire confiance à la clé publique du signataire.
L'une des décisions de conception de Helm a été de ne pas s'insérer dans la chaîne de confiance en tant que partie nécessaire. Nous ne voulons pas être « l'autorité de certification » pour tous les signataires de charts. Nous privilégions un modèle décentralisé, ce qui explique notre choix d'OpenPGP comme technologie de base. Concernant l'établissement de l'autorité, nous avons laissé cette étape relativement indéfinie dans Helm 2 (décision reprise dans Helm 3).
Cependant, voici quelques conseils et recommandations pour ceux qui souhaitent utiliser le système de provenance :
- La plateforme Keybase fournit un dépôt public centralisé
pour les informations de confiance.
- Vous pouvez utiliser Keybase pour stocker vos clés ou obtenir les clés publiques d'autres personnes.
- Keybase dispose également d'une excellente documentation.
- Bien que nous ne l'ayons pas testé, la fonctionnalité « site web sécurisé » de Keybase pourrait être utilisée pour servir des charts Helm.
- L'idée de base est qu'un « réviseur de charts » officiel signe les charts avec sa clé, et le fichier de provenance résultant est ensuite téléversé vers le dépôt de charts.
- Des travaux ont été menés sur l'idée qu'une liste de clés de signature
valides pourrait être incluse dans le fichier
index.yamld'un dépôt.