如何使用 juju 管理多个管理员?

如何使用 juju 管理多个管理员?

我使用 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-keysecret-key,对应于环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY(如果未在配置文件中指定,则这些是默认值)。对于多管理员环境(甚至单管理员环境)来说,这里的挑战是,这些信息被复制到 ZooKeeper 并在 ZK 节点中随时可见/environment。参见 Juju错误 #907094

在 AWS 示例中,可以通过使用 AWS 身份和访问管理常见问题解答 (搜索此内容) 对您的访问密钥提供一定程度的控制,但目前没有机制可以为 Juju 环境中的特定管理员提供更细粒度的控制。

在我们自己的使用中,特别是在测试中,还可以看到一个值得注意的模式:在给定节点上设置一个 Juju 环境(“控制”)来控制其他 Juju 环境;只需部署魔力魅力 进行设置。它以要 environment.yaml使用的配置选项为准。其他管理员随后可以ubuntu通过手动将他们的密钥添加到 来被授权为用户 ~ubuntu/.ssh/authorized-keys

这样可以让单点管理其中一些问题,同时尽量减少麻烦。它无法解决前面提到的一些安全问题 - 您仍然必须对其他管理员有相当深的信任。

使用某些命令(、、 、、 )后, Juju 将重新同步environments.yaml到 ZK 节点。实际上,这不会非常有用 - 除了其实际预期用途,即支持约束。但是,它可以帮助最大限度地减少更新授权密钥文件的需要,因为同步后任何新配置的机器都会获得该文件;然后您只需负责更新先前配置的机器。/environmentjuju add-unitjuju constraints-getjuju constraints-setjuju deployjuju terminate-machine

当我谈论这一点时,值得注意的是它 ~ubuntu/.ssh/authorized-keys实际上是如何以及在何处使用的:

  • 除两个例外外,所有 Juju 控制命令都使用 SSH 隧道到 ZooKeepeer 实例来管理或查找来自 Juju 环境的信息。(juju bootstrapjuju destroy-environment 直接与底层云提供商 API 一起使用。)因此,您绝对需要保持authorized-keys机器 0 处于最新状态。

  • juju sshjuju scp允许直接使用机器,它们还需要具有当前版本authorized-keys,您必须考虑在多管理员情况下进行更新。这些命令默认使用ubuntu目标机器上的用户。

相关内容