如何使用 Salt 安全地将敏感文件(加密密钥)从一个特定 minion 复制到另一个特定 minion?我不希望任何其他 minion 能够读取该文件。
盐矿?
这盐矿似乎是一个合乎逻辑的起点,但文档指出:
Salt Mine 用于从 Minions 收集任意数据并将其存储在 Master 上。然后通过
salt.modules.mine
模块。
我并不想让所有 Minion 都能使用这些数据,而只想让一个 Minion 能使用。此外,我不需要定期刷新 — 我只需要在每次state.highstate
为目标 Minion 运行时读取文件。
cp.push
?
盐的cp.push
函数似乎是将文件传送到主服务器的好方法,但以下情况除外:
- 它使用
salt.transport.Channel.send()
的方法不保证保密 cp.push
主服务器授予主服务器文件系统中全局读取权限推送的文件- 一旦文件在 master 上,就不清楚如何将其传输到目标 minion
定制外部支柱?
我可以写一个定制外部支柱它会以某种方式从源 minion 读取文件(怎么做?),然后通过 pillar 将文件内容提供给第二个 minion。对于应该内置的行为,这似乎需要付出很多努力。
答案1
这只是一个半答案,但也许会有所帮助。
你写了:
一旦文件在 master 上,就不清楚如何将其传输到目标 minion
和:
我可以编写一个自定义的外部支柱,以某种方式......通过支柱将文件的内容提供给第二个小兵。
这种能力(文件树自 2015.5.0 起,外部支柱已加入盐中。请参阅此常问问题。
至于如何将文件从源 minion 传输到 master,salt 范式更多的是让 master 作为数据源。你可以:
- 无论什么旋转密钥,都将其写入主密钥吗?
- 触发反应堆通过 scp 去获取它的事件?
- 在想要共享密钥的两个 minion(或者源 minion 和 master)之间设置共享 NFS 挂载?
- 在源从属设备上设置一个 https 网络服务器,并使用 ACL 仅允许访问主从属设备或目标从属设备?