Введение
Это краткое руководство описывает, как проверить подписанные чарты Helm по их файлу происхождения (*.prov) с помощью команды Helm CLI или Terraform.
Подписанные чарты Helm обычно размещаются вместе с автоматически сгенерированным файлом prov.
С помощью команды Helm helm verify (или Terraform) целостность и происхождение чарта можно проверить по открытому PGP-ключу издателя.
Содержимое типичного файла происхождения состоит из:
- содержимое файла Chart.yaml чарта Helm
- SHA256-хэш пакета чарта
- Блок подписи PGP.
См. пример ниже:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
apiVersion: v2
appVersion: 1.16.0
description: A Helm chart for Kubernetes
name: mychart
type: application
version: 0.1.0
...
files:
mychart-0.1.0.tgz: sha256:690fbec58c4b1b5a039594041bd35022aec5a59dc1c0325a88606ee44a80eb71
-----BEGIN PGP SIGNATURE-----
wsFcBAEBCgAQBQJh8wouCRBtNFtJj6zhpgAA8YAQAJGaj2pVqCGjZzspVC7vdqIQ
f0P/ZkA4MnFRltzh5+vUo7F7Hk2b4j+dIK1Jlq6pIiyQ39I8UMATUIG5f+JKyA2G
HBt8X5E61MbXtLen1hsiqKiTkemXqZAuYrTMQNXY/+mpTnj0lqMg77JD/m9YwZkY
UP8Omzdvv6rAOAKRhcXADatj3Zl3IoRN+n4+RoGZJ8SYGeVyWJurmoOqZYtqBlkS
tah/ZJKE4SqCNtk9SSboDpyeq0LpPRvguKqxiUT8dGjs0rujaYFAXRquIN4+I2ev
XotQxHsa4bOKhgXC3GYc6pMMX8EZPGsHgGehkAD8C5S6npQw5w+pvpfBV3rXmEn9
KzlLEWUuDGpEtUqdTNE3yypJxP+B60V8rw0lBUiQbuVqRmwsMNEgZVjAO2aue55+
kVijkT3QsV5MudopTf9OMJy69Y12iR6u2sqYpbu7Co45zSWhBm+ExOHwGfifV6AQ
EOImJgmEPd0E1pRgDNVfrTz/Aq8UtToAj04WLPiOTDrPsVh5QbhuXk64INBWhFAJ
5AlQT+OIdW07WDHjUuEH2J4H42NkjPNV5ODpCWosquczZiQWdXXM/oGgPZ7U5a37
9g9qKuJsM4R+eJm0d3J6VV3zLJ5RTr5DL48lHaDFqmnn1s7B0HUyaamglyhvL5JG
HdATzoPnf9+J0pLXy117
=iqso
-----END PGP SIGNATURE-----
Шаг 1 – Импорт открытого PGP-ключа издателя
Прежде чем подписанный чарт будет проверен, открытый ключ издателя/подписанта должен присутствовать в локальной связке ключей.
По умолчанию GnuPG версии 2 или выше хранит связки ключей в формате keybox1 (.kbx), который в настоящее время не поддерживается Helm при проверке подписанных чартов.
Поэтому необходимо конвертировать/экспортировать брелок в старый формат GnuPG .gpg, например, pubring.gpg.
Поскольку большинство открытых ключей хранятся в формате OpenPGP ASCII armor (*.asc), следующая команда может быть использована для загрузки и преобразования такого открытого ключа в формат .gpg за один шаг:
Импорт ключа с использованием имени пользователя Keybase через приложение Keybase App
Проверка подписанных чартов Helm с помощью Helm CLI
Если связка ключей, содержащая открытый ключ, связанный с подписанным чартом, находится не в месте по умолчанию, вам может понадобиться указать на нее с помощью команды –keyring PATH3
Если целостность чарта была нарушена каким-либо образом, команда helm verify выдаст ошибку, ссылаясь на несоответствие ожидаемого хэша пакета чарта:
Если запрашиваемый чарт не подписан, команда helm fetch выдает ошибку:
resource "helm_release" "vault" {
name = "vault"
namespace = "vault"
create_namespace = true
repository = "https://helm.releases.hashicorp.com"
chart = "vault"
version = "0.19.0"
verify = true
keyring = "hashicorp_pubring.gpg"
}
Если при запуске terraform apply чарт успешно верифицирован, он будет установлен без происшествий.
Однако если чарт был каким-либо образом изменен, вы получите ошибку, и установка чарта завершится неудачно:
helm_release.vault: Creating...
╷
│ Error: openpgp: invalid signature: RSA verification failure
│
│ with helm_release.vault,
│ on main.tf line 16, in resource "helm_release" "vault":
│ 16: resource "helm_release" "vault" {
│
╵
Заключение
Теперь вы можете проверять чарты с помощью helm verify или Terraform.
Эти методы могут быть интегрированы в рабочие процессы GitOps различными способами, чтобы обеспечить постоянную проверку чартов перед установкой.
см. также: