【问题标题】:eyaml is not decrypted on Puppet agenteyaml 未在 Puppet 代理上解密
【发布时间】:2019-12-04 22:08:47
【问题描述】:

我们结合 puppet (http://yum.puppetlabs.com/puppet6/el/7) 的 repo 在 CentOS 7.6 上运行 Puppet 主服务器

当我在定义变量的地方编写 eyaml 时,我只看到代理上的加密值 (Windows 2016)。

在 Puppet master 上,我可以编辑 eyaml,一切看起来都很好。与标准安装的唯一区别是,一切都在不同的环境“myenv”中。

hiera.yaml:

---
version: 5
defaults:
  datadir: data
  data_hash: yaml_data

hierarchy:

### Encrypted eyaml files
  - name: "Secret data: per-node, per-datacenter, common"
    lookup_key: eyaml_lookup_key
    path: "/etc/puppetlabs/code/environments/myenv/data/cmp/test/rdc/%{::trusted.certname}.eyaml"
    options:
      pkcs7_private_key: /etc/puppetlabs/puppet/eyaml/private_key.pkcs7.pem
      pkcs7_public_key: /etc/puppetlabs/puppet/eyaml/public_key.pkcs7.pem

# Environments
  - name: "env2"
    glob: "env/test/*/%{::trusted.certname}.yaml"
  - name: "env1"
    glob: "env/test/%{::trusted.certname}.yaml"

# Components
  - name: "cmp2"
    glob: "cmp/test/*/%{::trusted.certname}.yaml"
  - name: "cmp1"
    glob: "cmp/test/%{::trusted.certname}.yaml"

# Others
  - name: "Other YAML hierarchy levels"
    paths:
      - "common.yaml"
[ root @pup-mst-srv-10:/etc/puppetlabs/puppet]-$ puppetserver -v
puppetserver version: 6.3.0
[ root @pup-mst-srv-10:/etc/puppetlabs/puppet]-$ hiera -v
3.5.0
[ root @pup-mst-srv-10:/etc/puppetlabs/puppet]-$ eyaml version
[hiera-eyaml-core] hiera-eyaml (core): 3.0.0
[ root @pup-mst-srv-10:/etc/yum.repos.d]-$ puppetserver gem list -e hiera-eyaml

*** LOCAL GEMS ***

hiera-eyaml (3.0.0)
[ root @pup-mst-srv-10:/etc/eyaml]-$ cat config.yaml 
pkcs7_private_key: '/etc/puppetlabs/puppet/eyaml/private_key.pkcs7.pem'
pkcs7_public_key: '/etc/puppetlabs/puppet/eyaml/public_key.pkcs7.pem'
[ root @pup-mst-srv-10:/etc/puppetlabs/code/environments/myenv/data/cmp/test/rdc]-$ ls -l /etc/puppetlabs/puppet/eyaml/
total 8
-r--r--r--. 1 puppet puppet 1679 Jul 11 15:39 private_key.pkcs7.pem
-r--r--r--. 1 puppet puppet 1050 Jul 11 15:39 public_key.pkcs7.pem
[ root @pup-mst-srv-10:/etc/puppetlabs/code/environments/myenv/data/cmp/test/rdc]-$ eyaml edit rdc.eyaml 
---
classes:
  - win_ad_abcd

win_ad_abcd::testpassword : DEC(1)::PKCS7[test12]!
[ root @pup-mst-srv-10:/etc/puppetlabs/code/environments/myenv/data/cmp/test/rdc]-$ cat rdc.eyaml 
---
classes:
  - win_ad_abcd

win_ad_abcd::testpassword : ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAS0E/Y3+QzFhRVZM+F+5kQ8ZQrvGddUno5sDeg3Np9P1/8I5Xetemrx5DTKQaD5C4DS3kgvxjrSqVk/GCCMtZUW5Ynlym1yvylHA7zXmn+g6pYbe5XW88y2Xv1IzdxHwPmgOlFAXJCRoieTrfph+Y4mQBWi2uyrTphHM/o31JcDREfzOeucTSGaHnq8SHeP7t5O7w5ZFG4++hasBLUTubG2ZOAgQRTlksmTK3oOJ0eLRDab4LpgBMaL/VaZgFiu3qmMb3IPtHlaSEAiTRQzdJW7WeHTJUqPSBNni1WmPXA3lFqmp8PFomxsLBTv7i9/gw7SQ2FHwpu5izH6iKwzmEcjA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBRpizv6doUY5DzpFaBg45lgBCJeK3Yi9qSUCulkHzBDzx6]
[ root @pup-mst-srv-10:/etc/puppetlabs/code/environments/myenv/modules/win_ad_abcd/manifests]-$ cat init.pp 

class win_ad_abcd (
  $testpassword = "Not Set",
)
{
    notify{"eyaml --> ${testpassword} <--":}

    file { 'C:\Windows\Temp\test.out':
      content => $testpassword,
    }
}

我希望代理上的 test.out 文件中的输出带有“test12”,但我总是得到加密输出。

如果有一些提示会很棒。

伊沃

【问题讨论】:

    标签: puppet hiera


    【解决方案1】:

    我花了一些时间试图重现这一点,但没有成功。根据这些信息,我也想不出会发生这种情况的任何原因。

    在尝试创建一个最小、完整的示例时,我简化了设置,您可以尝试使用类似于我的设置的方法来查看是否仍然可以重现该问题。然后,添加类似于原始问题的额外复杂性,直到找到最小、完整、可验证的示例。如果您这样做,我们可能会提供进一步的帮助。

    更简单的 hiera.yaml:

    ---
    version: 5
    defaults:
      datadir: data
      data_hash: yaml_data
    
    hierarchy:
      - name: "Secret data: per-node, per-datacenter, common"
        lookup_key: eyaml_lookup_key
        path: "encrypted.yaml"
        options:
          pkcs7_private_key: ./keys/private_key.pkcs7.pem
          pkcs7_public_key:  ./keys/public_key.pkcs7.pem
    

    spec/fixtures/hiera/data/encrypted.yaml:

    ---
    test: >
        ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEw
        DQYJKoZIhvcNAQEBBQAEggEAedQX8FExcat6yk0zsUzNbzQ/07w8ghPOw4eY
        ycrfz0H7Cr7KnuBMY0yloFmtWuhYcjXETfaU3U3zGr9IOl4Aiy7yD3ZIvH0Y
        HoEWKiJeUzNGrpaH/QFk378cEbpd6LXG46nMzw6w21uhASmvVt3KmZBJwY29
        sEk2MpZm32H4JxQQosns4SDMQ6tA5h1xSrgpBTKd1x5vKSTsNnLAahjW31aH
        JbK7Se+hHJ4zi9P0/ZjT07OTq1X2rwnfNK8wgKJa/VEDSH+KoNub+4TDHfj/
        CWyGQx3Y5U1J2R2/6P5Vp2zRaAf/0BT43Ud/M8H25BIjYosuGtDVCVbbxMNK
        mXZITDA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBDEPKno3R1K0XNat4a9
        uCuDgBAdp579qk9MbgWLXyXSBD80]
    

    创建的密钥:

    ▶ eyaml createkeys                           
    ▶ ls keys                                                
    private_key.pkcs7.pem   public_key.pkcs7.pem
    

    创建一个秘密:

    ▶ eyaml encrypt -l 'test' -s 'mySecretString' >> \
        spec/fixtures/hiera/data/encrypted.yaml
    

    然后我通过进一步手动编辑该文件来清理它以获得上面显示的内容。

    我使用查找进行了测试:

    ▶ puppet lookup \
      --hiera_config=spec/fixtures/hiera/hiera.yaml test
    --- mySecretString
    

    理论:

    • 以上信息并不真正代表您的设置。
    • 您实际上可以加密加密的字符串吗?

    我排除的事情:

    • 如果访问您的 eyaml 密钥时出现问题,则会出现错误。或者如果 eyaml 库不可用。看不到错误说明keys没问题,找到eyaml_lookup_key函数,eyaml基本正常工作。

    否则,看看您是否可以将其归结为一个真正最小的、可验证的完整示例。

    【讨论】:

      【解决方案2】:

      感谢 Alex,我使用 puppet 创建了一个新 VM,并按照您的描述进行了设置。这帮助我找到了一个愚蠢的错误。

      带有加密密码的eyamlrdc.eyaml,我有一个指向此文件的符号链接,例如myHostname.yaml

      所以:myHostname.yaml -> rdc.eyaml

      myHostname.yaml 移动到myHostname.eyaml 后一切正常。

      【讨论】:

      • 很高兴你知道了。
      猜你喜欢
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多