我使用 juju 管理一些部署。但我并不是孤岛,我的同事也想管理共享环境。
我知道我可以使用以下节来~/.juju/environments.yaml
让人们访问我的 juju 环境:
authorized-keys: [and then put their ssh IDs in here]
还有哪些最佳实践可用于管理具有多个系统管理员的多个环境?
答案1
Juju 目前确实没有针对多管理员进行优化。特别是,一些安全问题Juju 中目前出现的问题在与多个管理员合作时变得更加明显。但是,有一些注意事项,对于受信任的(因此可能很小)管理员群体来说,这仍然是一个有用的选项。
考虑到这一点,让我们看看~/.juju/environment.yaml
文件中的相关配置项。
该authorized-keys
项目用于在环境引导程序中定义引导节点(机器 0,ZooKeeper 在其上运行)和所有后续配置节点上的 ubuntu 用户的公共 SSH 密钥。只需每行列出一个授权的公钥即可。它将如下所示:
authorized-keys: |
ssh-rsa AAAblahblahZZZZ user@domain
ecdsa-sha2-nistp256 AAAAfoobarZZZZ= user2@domain
此方法优于使用authorized-keys-path
- 或其默认 ( ~/.ssh/
) - 后者仅适用于一位管理员,因为您必须共享 SSH 密钥(不要这样做!)。简而言之,这只是authorized-keys-path
实现方式的限制。
接下来,云提供商定义其特定的安全凭证,然后 Juju 会使用这些凭证。举例来说,我们来看看 EC2,特别是 AWS。对于 AWS,有两个密钥用于确定访问权限:
access-key
和secret-key
,对应于环境变量
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
(如果未在配置文件中指定,则这些是默认值)。对于多管理员环境(甚至单管理员环境)来说,这里的挑战是,这些信息被复制到 ZooKeeper 并在 ZK 节点中随时可见/environment
。参见 Juju错误 #907094。
在 AWS 示例中,可以通过使用 AWS 身份和访问管理常见问题解答 (搜索此内容) 对您的访问密钥提供一定程度的控制,但目前没有机制可以为 Juju 环境中的特定管理员提供更细粒度的控制。
在我们自己的使用中,特别是在测试中,还可以看到一个值得注意的模式:在给定节点上设置一个 Juju 环境(“控制”)来控制其他 Juju 环境;只需部署魔力魅力
进行设置。它以要
environment.yaml
使用的配置选项为准。其他管理员随后可以ubuntu
通过手动将他们的密钥添加到 来被授权为用户
~ubuntu/.ssh/authorized-keys
。
这样可以让单点管理其中一些问题,同时尽量减少麻烦。它无法解决前面提到的一些安全问题 - 您仍然必须对其他管理员有相当深的信任。
使用某些命令(、、 、、 )后, Juju 将重新同步environments.yaml
到 ZK 节点。实际上,这不会非常有用 - 除了其实际预期用途,即支持约束。但是,它可以帮助最大限度地减少更新授权密钥文件的需要,因为同步后任何新配置的机器都会获得该文件;然后您只需负责更新先前配置的机器。/environment
juju add-unit
juju constraints-get
juju constraints-set
juju deploy
juju terminate-machine
当我谈论这一点时,值得注意的是它
~ubuntu/.ssh/authorized-keys
实际上是如何以及在何处使用的:
除两个例外外,所有 Juju 控制命令都使用 SSH 隧道到 ZooKeepeer 实例来管理或查找来自 Juju 环境的信息。(
juju bootstrap
并juju destroy-environment
直接与底层云提供商 API 一起使用。)因此,您绝对需要保持authorized-keys
机器 0 处于最新状态。juju ssh
并juju scp
允许直接使用机器,它们还需要具有当前版本authorized-keys
,您必须考虑在多管理员情况下进行更新。这些命令默认使用ubuntu
目标机器上的用户。