☸️ Проверка подписанных helm чартов |

☸️ Проверка подписанных helm чартов

Мануал

Введение

Это краткое руководство описывает, как проверить подписанные чарты 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 за один шаг:

curl https://keybase.io/hashicorp/pgp_keys.asc | gpg --dearmor > /home/colin/.gnupg/pubring.gpg

curl выводит размещенный ключ, gpg –dearmor преобразует этот вывод в двоичный формат gpg2, который затем сохраняется в домашнем каталоге GnuPG пользователя как pubring.gpg.

В качестве альтернативы, ключ издателя можно импортировать обычным способом, а затем экспортировать в формат .gpg:

Импорт ключа с помощью Curl

curl https://keybase.io/hashicorp/pgp_keys.asc | gpg --import
Импорт ключа с сервера ключей по его фингерпринту
 gpg --keyserver pgp.mit.edu --recv-keys 72D7468F

Импорт ключа с использованием имени пользователя Keybase через приложение Keybase App

keybase pgp pull hashicorp

Шаг 2 – Проверка подписанных Helm чартов

Теперь, когда открытый ключ издателя является частью вашей локальной связки ключей, вы можете использовать Helm или Terraform для проверки чартов.

Проверка подписанных чартов Helm с помощью Helm CLI

Сначала добавьте нужный репозиторий Helm, например, HashiCorp:
helm repo add hashicorp https://helm.releases.hashicorp.com
Затем используйте helm fetch –verify для проверки подписанного чарта:
helm fetch --verify hashicorp/vault --version 0.19.0 --keyring pubring.gpg
Signed by: HashiCorp Security (hashicorp.com/security) <security@hashicorp.com>
Using Key With Fingerprint: C874011F0AB405110D02105534365D9472D7468F
Chart Hash Verified: sha256:fb7a99fc3d29ccb387fcf741a304124ae0c665a1d3a238024b4a54593f1fa464

Если связка ключей, содержащая открытый ключ, связанный с подписанным чартом, находится не в месте по умолчанию, вам может понадобиться указать на нее с помощью команды –keyring PATH3

Если целостность чарта была нарушена каким-либо образом, команда helm verify выдаст ошибку, ссылаясь на несоответствие ожидаемого хэша пакета чарта:

helm fetch --verify hashicorp/vault --version 0.19.0 --keyring pubring.gpg
Error: sha256 sum does not match for vault-0.19.0.tgz:
"sha256:fb7a99fc3d29ccb387fcf741a304124ae0c665a1d3a238024b4a54593f1fa464" !=
"sha256:690fbec58c4b1b5a039594041bd35022aec5a59dc1c0325a88606ee44a80eb71"

Если запрашиваемый чарт не подписан, команда helm fetch выдает ошибку:

Error: Failed to fetch provenance "https://helm.releases.hashicorp.com/vault-0.19.0.tgz.prov"

Проверка подписанных чартов Helm в Terraform

Ресурс helm_release провайдера helm Terraform может проверять чарты перед установкой, установив значение ключа verify в true:
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 различными способами, чтобы обеспечить постоянную проверку чартов перед установкой.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий