Procedencia e Integridad de Helm
Helm tiene herramientas de procedencia que ayudan a los usuarios de charts a verificar la integridad y el origen de un paquete. Utilizando herramientas estándar de la industria basadas en PKI, GnuPG y administradores de paquetes muy respetados, Helm puede generar y verificar archivos de firmas.
Descripción General
La integridad se establece comparando un chart con un registro de procedencia.
Los registros de procedencia se almacenan en archivos de procedencia, que se
almacenan junto con un chart empaquetado. Por ejemplo, si un chart se llama
myapp-1.2.3.tgz
, su archivo de procedencia será myapp-1.2.3.tgz.prov
.
Los archivos de procedencia se generan en el momento del empaquetado
(helm package --sign ...
) y se pueden verificar mediante varios comandos,
en particular helm install --verify
.
El Flujo de Trabajo
Esta sección describe un flujo de trabajo potencial para utilizar los datos de procedencia de manera eficaz.
Requisitos previos:
- Un par de claves PGP válido en formato binario (no blindado ASCII)
- La herramienta de línea de comandos
helm
- Herramientas de línea de comandos de GnuPG (opcional)
- Herramientas de línea de comando de base de claves (opcional)
NOTA: Si su clave privada PGP tiene una frase de contraseña, se le pedirá que
ingrese esa frase de contraseña para cualquier comando que admita la opción --sign
.
Crear un nuevo chart es el mismo que antes:
$ helm create mychart
Creating mychart
Una vez que esté listo para empaquetar, agregue la marca --sign
a helm package
.
Además, especifique el nombre con el que se conoce la clave de firma y el anillo
de claves que contiene la clave privada correspondiente:
$ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart
Nota: El valor del argumento --key
debe ser una subcadena del uid
de la
clave deseada (en la salida de gpg --list-keys
), por ejemplo, el nombre o el
correo electrónico. La huella no se puede utilizar.
SUGERENCIA: para los usuarios de GnuPG, su anillo de claves secreto está en
~ /.gnupg /secring.gpg
. Puede usar gpg --list-secret-keys
para enumerar las
claves que tiene.
Advertencia: GnuPG v2 almacena su llavero secreto usando un nuevo formato
kbx
en la ubicación predeterminada ~/.gnupg/pubring.kbx
. Utilice el siguiente
comando para convertir su llavero al formato gpg heredado:
$ gpg --export-secret-keys >~/.gnupg/secring.gpg
En este punto, debería ver tanto mychart-0.1.0.tgz
como mychart-0.1.0.tgz.prov
.
Finalmente, ambos archivos deberían cargarse en el repositorio de charts que desee.
Puede verificar un chart usando helm verify
:
$ helm verify mychart-0.1.0.tgz
Una verificación fallida se ve así:
$ helm verify topchart-0.1.0.tgz
Error: sha256 sum does not match for topchart-0.1.0.tgz: "sha256:1939fbf7c1023d2f6b865d137bbb600e0c42061c3235528b1e8c82f4450c12a7" != "sha256:5a391a90de56778dd3274e47d789a2c84e0e106e1a37ef8cfa51fd60ac9e623a"
Para verificar durante una instalación, use la bandera --verify
.
$ helm install --generate-name --verify mychart-0.1.0.tgz
Si el llavero que contiene la clave pública asociada con el chart firmado no se
encuentra en la ubicación predeterminada, es posible que deba señalar el llavero
con --keyring PATH
como en el ejemplo de helm package
.
Si la verificación falla, la instalación se cancelará antes de que el chart sea renderizado.
Usando las credenciales de Keybase.io
El servicio Keybase.io facilita el establecimiento de una cadena de confianza para una identidad criptográfica. Las credenciales de la base de claves se pueden utilizar para firmar charts.
Requisitos previos:
- Una cuenta Keybase.io configurada
- GnuPG instalado localmente
- La CLI
keybase
instalada localmente
Firma de paquetes
El primer paso es importar las claves de la base de claves a su anillo de claves GnuPG local:
$ keybase pgp export -s | gpg --import
Esto convertirá su clave de Keybase al formato OpenPGP, y luego la importará
localmente en su archivo ~/.gnupg/secring.gpg
.
Puede comprobarlo ejecutando 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
Tenga en cuenta que su clave secreta tendrá una cadena de identificación:
technosophos (keybase.io/technosophos) <technosophos@keybase.io>
Ese es el nombre completo de su clave.
A continuación, puede empaquetar y firmar un chart con helm package
. Asegúrese
de utilizar al menos parte de esa cadena de nombre en --key
.
$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart
Como resultado, el comando package
debería producir tanto un archivo
.tgz
como un archivo .tgz.prov
.
Verificación de paquetes
También puede utilizar una técnica similar para verificar un chart firmado por
la clave de Keybase de otra persona. Supongamos que desea verificar un paquete
firmado por keybase.io/technosophos
. Para hacer esto, use la herramienta keybase
:
$ keybase follow technosophos
$ keybase pgp pull
El primer comando de arriba rastrea al usuario technosophos
. A continuación,
keybase pgp pull
descarga las claves OpenPGP de todas las cuentas que sigue,
colocándolas en su anillo de claves GnuPG (~/.gnupg/pubring.gpg
).
En este punto, ahora puede usar helm verify
o cualquiera de los comandos con
una marca --verify
:
$ helm verify somechart-1.2.3.tgz
Razones por las que un chart no puede verificar
Éstas son razones comunes de falla.
- Falta el archivo
.prov
o está dañado. Esto indica que algo está mal configurado o que el responsable de mantenimiento original no creó un archivo de procedencia. - La clave utilizada para firmar el archivo no está en su llavero. Esto indica que la entidad que firmó el chart no es alguien a quien ya haya señalado que confía.
- Falló la verificación del archivo
.prov
. Esto indica que algo anda mal con el chart o con los datos de procedencia. - Los hash de archivo en el archivo de procedencia no coinciden con el hash del archivo de almacenamiento. Esto indica que el archivo ha sido manipulado.
Si una verificación falla, hay motivos para desconfiar del paquete.
El Archivo de Procedencia
El archivo de procedencia contiene un archivo YAML de un chart más varios datos de verificación. Los archivos de procedencia están diseñados para generarse automáticamente.
Se agregan los siguientes datos de procedencia:
- El archivo de chart (
Chart.yaml
) se incluye para que tanto los humanos como las herramientas puedan ver fácilmente el contenido del chart. - La firma (SHA256, al igual que Docker) del paquete de charts (el archivo
.tgz
) está incluida y puede usarse para verificar la integridad del paquete de charts. - Todo el cuerpo está firmado utilizando el algoritmo utilizado por OpenPGP (consulte Keybase.io para conocer una forma emergente de facilitar la firma y verificación de cifrado).
La combinación de esto brinda a los usuarios las siguientes garantías:
- El paquete en sí no ha sido manipulado (suma de comprobación del paquete
.tgz
). - Se conoce la entidad que liberó este paquete (a través de la firma GnuPG/PGP).
El formato del archivo se parece a esto:
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-----
Tenga en cuenta que la sección YAML contiene dos documentos (separados por ...\n
).
El primer archivo es el contenido de Chart.yaml
. El segundo son las sumas de
comprobación, un mapa de nombres de archivo a resúmenes SHA-256 del contenido de
ese archivo en el momento del empaquetado.
El bloque de firma es una firma PGP estándar, que proporciona [resistencia a la manipulación(https://www.rossde.com/PGP/pgp_signatures.html).
Repositorios de Charts
Los repositorios de charts sirven como una colección centralizada de charts de Helm.
Los repositorios de charts deben permitir la entrega de archivos de procedencia a través de HTTP a través de una solicitud específica, y deben hacerlos disponibles en la misma ruta de URI que el chart.
Por ejemplo, si la URL base de un paquete es
https://example.com/charts/mychart-1.2.3.tgz
, el archivo de procedencia,
si existe, DEBE ser accesible en https://example.com/charts/mychart-1.2.3.tgz.prov
.
Desde la perspectiva del usuario final, helm install --verify myrepo/mychart-1.2.3
debería resultar en la descarga tanto del chart como del archivo de procedencia
sin configuración o acción adicional del usuario.
Establecimiento de Autoridad y Autenticidad
Cuando se trata de sistemas de cadena de confianza, es importante poder establecer la autoridad de un firmante. O, para decirlo claramente, el sistema anterior depende del hecho de que usted confía en la persona que firmó el chart. Eso, a su vez, significa que debe confiar en la clave pública del firmante.
Una de las decisiones de diseño de Helm ha sido que el proyecto Helm no se insertará en la cadena de confianza como parte necesaria. No queremos ser "la autoridad de certificación" para todos los firmantes de charts. En cambio, estamos a favor de un modelo descentralizado, que es parte de la razón por la que elegimos OpenPGP como nuestra tecnología fundamental. Entonces, cuando se trata de establecer la autoridad, hemos dejado este paso más o menos indefinido en Helm 2 (una decisión llevada a cabo en Helm 3).
Sin embargo, tenemos algunos consejos y recomendaciones para aquellos interesados en utilizar el sistema de procedencia:
- La plataforma
Keybase proporciona un repositorio público
centralizado para información de confianza.
- Puede utilizar Keybase para almacenar sus claves o para obtener las claves públicas de otros.
- Keybase también tiene documentación fabulosa disponible
- Si bien no lo hemos probado, la función de "sitio web seguro" de Keybase podría usarse para servir charts de Helm.
- La idea básica es que un "revisor de charts" oficial firme los charts con su clave, y el archivo de procedencia resultante se carga en el repositorio de charts.
- Se ha trabajado en la idea de que se pueda incluir una lista de claves de
firmas válidas en el archivo
index.yaml
de un repositorio.