如何使用存储在保险库中的 github-private-key 安全地使用大厅
Posted
技术标签:
【中文标题】如何使用存储在保险库中的 github-private-key 安全地使用大厅【英文标题】:How to securely use concourse with github-private-key stored in vault 【发布时间】:2018-11-15 21:14:47 【问题描述】:我们正在尝试使用 Vault 运行大厅。 使用保险库的原因是以安全的方式存储机密。我们想要存储在 Vault 中的一些参数是 github 私钥,用于访问 github 存储库,以及用于 CloudFoundry 访问的用户名和密码。这类秘密不应该被分享...
听起来一切都很好,但是,当可以访问大厅团队时,很容易恢复存储在保险库中的秘密内容。
示例: 在保险库中存储以下内容
vault write concourse/main/cat-name value=Garfield
vault write concourse/main/dog-name value=Odie
运行下一个管道将显示存储参数的内容:
jobs:
- name: show-animal-names
plan:
- task: show-animal-names
config:
platform: linux
image_resource:
type: docker-image
source:
repository: busybox
params:
CAT_NAME: ((cat-name))
DOG_NAME: ((dog-name))
run:
path: env
结果:
fly -t concourse trigger-job -j publishing-outputs/show-animal-names -w
started publishing-outputs/show-animal-names #1
initializing
running env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/root
CAT_NAME=Garfield
DOG_NAME=Odie
USER=root
succeeded
这样,用户名、密码、github-private-keys 以及存储在保险库中的所有其他内容,都可以被授予访问大厅更新管道的每个人检索。
有没有办法使用大厅并让这些秘密保密,所以不显示?
【问题讨论】:
我们遇到了同样的问题。我不认为这是可能的。为了减少曝光,我们使用多个 Concourse 团队。还要考虑一下,如果有人可以更改管道文件,这意味着它要么具有对底层 git 存储库的写入权限,要么具有对 Concourse 的访问权限,因此他/她已经被信任并且已经可以写入 git 存储库,因此获取 SSH私钥什么也没给他买。我们要做的另一件事是,每个 repo 都有一个不同的 SSH 密钥,以减少暴露。保险柜仍然超级有用,继续使用它!它避免在 repos 中存储秘密,并从“fly get-pipeline”中隐藏秘密 你说得对,但是,在那个时刻,获得 SSH 私钥并不能给他带来任何好处。当某人的访问权限被撤销时,他仍然可以使用他存储信息时在大厅管道中使用的密钥来访问。这意味着每当有人离开公司时,所有存储的秘密都需要更换。不是一个很好的动作。 好点!但在我看来,这就是现实。如果您考虑一下,Concourse 不通过带有 env vars 的示例泄漏秘密的唯一方法是了解 git 存储库是什么,即避免使用资源。这违背了Concourse的哲学。你知道吗,在这个时期,Concourse 正在决定“资源 2.0”?您可能想在那里发表评论:github.com/concourse/rfcs/pull/1。如果您在 Concourse 论坛上提出这个问题以提高知名度,我将不胜感激discuss.concourse-ci.org 【参考方案1】:您是否考虑过 CredHub 以及它与 Concourse 的集成?
https://concourse-ci.org/creds.html#credhub
【讨论】:
我认为使用 CredHub 代替 Vault 不会有任何帮助。 CredHub 使用与 Vault 相同的秘密查找,因此上面显示的管道仍将显示存储的秘密。不管它们来自哪里。【参考方案2】:是不是也可以通过fly gp -p my-pipeline
获取完整的秘密,或者 Concourse 是否编辑了 Credhub/Vault 引用的秘密的内容?
我也认为在 Concourse 中应该有更多的秘密保护。这不仅与从 Vault 或 Credhub 接收的秘密有关。我也不愿意让每个有权访问团队的用户都有可能从我用fly sp -p... -l <secret-file>
调用的管道凭据文件中接收所有秘密@
【讨论】:
要回答您的问题,尝试 fly get-pipeline 就足够了 :-) 秘密是从 fly get-pipeline 中编辑的,只要 fly set-pipeline 没有设置它们而是您离开将它们设置为凭据管理器。以上是关于如何使用存储在保险库中的 github-private-key 安全地使用大厅的主要内容,如果未能解决你的问题,请参考以下文章
如何使用存储在Vault中的github-private-key安全地使用大厅
如何通过 Android 在 Paypal 保险库中保存信用卡详细信息以及如何检索它们以供将来使用