首页 > 解决方案 > 可以将 GitHub Secrets 与公共存储库一起使用吗?

问题描述

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

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

标签: gitamazon-web-servicesgithubgithub-actions

解决方案


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

  • 所有秘密都会自动隐藏在构建日志中并显示为***. 但是,如果在您的工作流程中,您从一个秘密(例如 base64 一个 API 密钥)创建了一个敏感凭证,那么您应该屏蔽新值,这样它就不会在构建日志中泄漏。

    echo "::add-mask::My sensitive value"
    
  • 如果您非常关心您的秘密的安全性,我还建议您不要直接通过遵循操作的标签或分支来使用第三方 GitHub 操作。分叉操作并在工作流程中使用您的分叉。这将防止有人修改您用来捕获该操作所使用的秘密的操作,并将其发送到他们控制下的某个外部服务器。

    或者,直接使用该操作并引用您要定位的版本的提交哈希。

    - uses: thirdparty/foo-action@172ec762f2ac8e050062398456fccd30444f8f30
    
  • 在您的帐户上使用双重身份验证 (2FA) 。如果您的帐户遭到入侵,攻击者很容易创建工作流并导出您的机密。

  • 存储库协作者或任何具有write访问权限的组织用户都可以创建工作流来导出机密。因此,请谨慎管理对存储库的访问。

与拉取请求相关的要点:

  • 由分叉触发的公共存储库pull_request事件无权访问机密,除了默认的GITHUB_TOKEN. 此外,当事件由分叉存储库触发时, TheGITHUB_TOKEN具有只读访问权限。这些是 GitHub Actions 强制实施的有意限制,以防止攻击者创建包含捕获机密或使用机密执行操作的工作流的拉取请求。
  • pull_request_target事件对分叉触发的事件没有秘密限制。默认情况下,它会检出基分支上的最后一次提交,但可以检出拉取请求 HEAD。选择这样做需要格外小心。将机密传递给可以在拉取请求中修改的任何代码都可能允许攻击者编写代码来导出机密。

推荐阅读