git - 可以将 GitHub Secrets 与公共(public)存储库一起使用吗?

标签 git amazon-web-services github github-actions

我有一个带有 GitHub 操作的私有(private)存储库,当有新的推送到主分支时,它会将代码推送到 AWS S3 存储桶。我需要一对访问 key 才能推送内容,并将它们存储为 GitHub Secrets 并将它们作为构建脚本中的环境变量引用。现在我想在不久的将来公开这个 repo,我想知道这样做是否安全。该操作的工作流(.github/workflows/main.yml)本身确实是公开可见的,它的作用是什么,但它只有一个命令aws s3 cp myfile s3://my-bucket并且代码本身绝对没有访问 key 。

将 GitHub Secrets 用于公共(public)存储库中的操作是否安全?我是唯一的所有者和唯一的贡献者,这在 future 不会改变。稍后我可能会使用 webhook 切换到 CodePipeline,但想先尝试 GitHub Actions。谢谢。

最佳答案

是的, secret 在公共(public)存储库中使用是安全的,但有些事情你应该小心。

  • 在构建日志中自动屏蔽所有 secret 并显示为 *** 。但是,如果在您的工作流程中,您从一个 secret (例如 base64 一个 API key )创建了一个敏感凭证,那么您应该 mask the new value 这样它就不会在构建日志中泄漏。
    echo "::add-mask::My sensitive value"
    
  • 如果您非常关心您的 secret 的安全性,我还建议您不要直接使用第三方 GitHub 操作,通过遵循操作的标签或分支。 fork 操作并在工作流程中使用您的 fork 。这将防止有人修改您用来捕获该操作所使用的 secret 的操作,并将其发送到他们控制下的某个外部服务器。
    或者,直接使用该操作并引用您要定位的版本的提交哈希。
    - uses: thirdparty/foo-action@172ec762f2ac8e050062398456fccd30444f8f30
    
  • 在您的帐户上使用 two-factor authentication (2FA)。如果您的帐户遭到入侵,攻击者很容易创建工作流并导出您的 secret 。
  • 存储库协作者或任何具有 write 访问权限的组织用户都能够创建工作流来导出 secret 。因此,请谨慎管理对存储库的访问。

  • 与 pull 请求相关的 Gist :
  • 由 fork 触发的公共(public)存储库 pull_request 事件无权访问 secret except for the default GITHUB_TOKEN 。此外, GITHUB_TOKENread-only access when an event is triggered by a forked repository 。这些是 GitHub Actions 强制实现的有意限制,以防止攻击者创建包含捕获 secret 或使用 secret 执行操作的工作流的 pull 请求。
  • pull_request_target 事件对 fork 触发的事件没有 secret 限制。默认情况下,它会 check out 基分支上的最后一次提交,但可以 check out pull 请求 HEAD。选择这样做需要格外小心。将 secret 传递给可以在 pull 请求中修改的任何代码都可能允许攻击者编写代码来导出 secret 。
  • 关于git - 可以将 GitHub Secrets 与公共(public)存储库一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62142092/

    相关文章:

    rest - 通过 AWS API Gateway 代理调用 SSL 端点

    rebase 后的 Git 推送

    git - 如何将具有特定提交 ID 的两个 Git 分支 merge 为一个分支?

    windows - 为可移植 git 配置移动目录

    postgresql - 如何避免 AWS EKS 上的连接断开?

    github - Google Cloud Build/GitHub 中的无效参数错误

    node.js - 通过 npm install 在 Docker 容器中访问私有(private) git repos

    amazon-web-services - 访问通过 Elastic Beanstalk 创建的 RDS 数据库

    git - 裸存储库中的文件在哪里?

    java - 将 GitHub 库导入现有 Eclipse 项目