Helm来源和完整性

    完整性是通过比较chart的出处记录来建立的。出处记录存储在 出处文件,和打包好的chart放在一起。比如, 如果有个名为的chart,则它的出处文件是myapp-1.2.3.tgz.prov

    出处文件会在打包时生成(helm package --sign ...),并可以通过多重命名检查,尤其是helm install --verify

    这部分描述有效使用源数据的潜在工作流。

    前置条件:

    • 合法的二进制格式(非ASCII包裹)的PGP密钥对
    • helm命令行工具
    • GnuPG命令行工具(可选)
    • Keybase命令行工具(可选)

    注意: 如果你的PGP私钥有密码,系统将提示你为所有支持--sign选项的命令输入密码。

    创建新的chart与之前一样:

    一旦准备好打包了,使用helm package命令时添加--sign参数,并且指定已知的字符串key和包含相应私钥的秘钥环:

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

    注意: --key参数的值必须是对应key的uid(在gpg --list-keys输出列表中)的子字符串,比如名字或者email。 指纹码 不能 使用。

    提示: 针对GnuPG用户,你的私钥的keyring在~/.gnupg/secring.gpg。你可以使用gpg --list-secret-keys列出你需要的key。

    警告: GnuPG v2版在默认位置~/.gnupg/pubring.kbx使用了新格式kbx存储私钥的keyring。使用以下命令将你的keyring转换到传统的gpg格式:

    1. $ gpg --export >~/.gnupg/pubring.gpg

    此时,您应该同时看到了mychart-0.1.0.tgzmychart-0.1.0.tgz.prov。 这两个文件最终都会被上传到对应的chart仓库。

    您可以使用helm verify验证chart:

    失败的验证如下:

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

    如果keyring包含的与签名chart关联的公钥不在默认位置,需要在打包helm package时使用--keyring PATH指定keyring的path。

    如果验证失败,chart的安装会在渲染前中止。

    Keybase.io 服务使得建立加密身份的信任链变得很容易。

    前置条件:

    • 配置 Keybase.io 账户
    • 本地已安装GnuPG
    • 本地已安装keybase CLI

    对包签名

    第一步是将keybase秘钥导入本地的GnuPG的秘钥环keyring:

    1. $ keybase pgp export -s | gpg --import

    这会将你的Keybase秘钥转成OpenPGP格式,然后将其导入本地的~/.gnupg/secring.gpg文件。

    可以运行gpg --list-secret-keys进行双重检测。

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

    注意你的秘钥会有一个标识字符串:

    这个是秘钥的全名。

    然后,可以使用helm package打包和签名。确保在--key参数中使用名称的一部分。

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

    package命令会生成一个.tgz文件和一个.tgz.prov文件。

    验证包

    您可以使用类似的方法验证被其他Keybase秘钥签名的chart。比如你要验证使用签名的包,可使用keybase工具:

    1. $ keybase follow technosophos
    2. $ keybase pgp pull

    上面第一个命令追踪了用户technosophos。然后使用keybase pgp pull下载你追踪的所有的账户的OpenPGP秘钥,并把它们放置在GnuPG秘钥环中(~/.gnupg/pubring.gpg)。

      chart无法验证的原因

      一般失败的原因有这些:

      • The .prov file is missing or corrupt. 说明有配置错误或者原有维护者没有创建源文件。
      • The key used to sign the file is not in your keyring. 说明这个签名chart的秘钥不是你已经注明为信任的秘钥。
      • The verification of the .prov file failed. 这说明chart或者源数据有错误。
      • The file hashes in the provenance file do not match the hash of the archive file. 表明chart包已经被篡改。

      如果验证失败,就有理由不信任该包。

      来源文件包含chart的YAML文件加上一些验证信息。来源文件会自动生成。

      会添加下列源数据:

      • chart文件(Chart.yaml) 让人和工具都可以看到chart中的内容。
      • chart包(.tgz文件)签名(SHA256,就像Docker),可以用来验证chart包的完整性。
      • 使用了OpenPGP算法签名所有内容(查看 Keybase.io,一种使签名和验证更简单的新式方法)。

      这些内容的结合给予了用户以下保证:

      • 包本身不会被篡改(.tgz包的校验和).
      • 发布包的人是可知的(通过GnuPG/PGP签名).

      文件格式类似这样:

      注意YAML部分包含了两个文档,(用...\n分隔)。第一个文档是Chart.yaml内容。第二个是文件内容打包时文件名的SHA-256校验和。

      签名是标准的PGP签名,用于 。

      Chart仓库是一个Helm chart的集合。

      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和源文件,且不需要额外的用户配置或操作。

      当处理信任链系统时,建立签名者的权威变得非常重要。或者简单来说,上面的系统实际上取决于你信任的签名chart的人。也就意味着你需要信任签名者的公钥。

      当然,对于使用源系统感兴趣的人,我们有一些提示和建议:

      • Keybase平台为可靠信息提供了一个公共的中心化的仓库。
        • 你可以使用Keybase存储你的key或者获取其他人的公钥。
        • Keybase还有非常好的文档
        • 我们还没有测试的时候,Keybase的“安全站点”特性可以提供Helm chart。
        • 基础想法是一个官方的“chart审核人”使用他(她)的私钥签名,然后上传源文件到chart仓库。
        • 该想法的一些做法是在仓库的index.yaml文件中列出一些合法的秘钥。