Skip to main content

了解 GitHub 机密类型

了解 GitHub 机密的使用、范围和访问权限。

如何 GitHub 存储机密

          GitHub 使用 [Libsodium 密封框](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes) 加密机密。 机密在到达 GitHub 之前进行加密,并且会保持加密状态,直到它被 Dependabot使用, GitHub Actions或者 Codespaces。

Dependabot 秘密

          Dependabot 机密用于存储要在 Dependabot 中使用的凭据和敏感信息。

          Dependabot 机密在存储库的 `dependabot.yml` 文件中被引用。

Usage

          Dependabot 密钥通常用于 Dependabot 进行身份验证以访问专用包注册表。 这允许 Dependabot 打开拉取请求以更新专用存储库中易受攻击或过时的依赖项。 用于身份验证,这些 Dependabot 机密在存储库 `dependabot.yml` 的文件中引用。

          Dependabot 机密还可能包括由 Dependabot 启动的工作流所需的机密。 例如, Dependabot 在创建拉取请求以更新依赖项时,可以触发 GitHub Actions 工作流,或对拉取请求的注释。 在这种情况下,如果工作流是由Dependabot事件触发的,就可以从工作流文件(Dependabot)中引用机密。

Scope

可以在以下位置定义 Dependabot 机密:

  • 存储库级别

  • 组织级别

            Dependabot 在组织级别设置时,可以在存储库之间共享机密。 必须指定组织中的哪些存储库可以访问机密。
    

访问权限

          Dependabot 机密可供 Dependabot 访问,以便向专用注册表进行身份验证,从而更新依赖项。

          在 Dependabot 启动工作流的触发器事件时,GitHub Actions 机密可供 Dependabot 工作流访问。 这是因为,当工作流启动 Dependabot时,只有 Dependabot 机密可用 - 操作机密不可访问。 因此,这些工作流所需的任何机密都必须存储为 Dependabot 机密,而不是 Actions 机密。 
          `pull_request_target` 事件还有其他安全限制。 请查看[限制和局限](#limitations-and-restrictions)。

用户访问权限

存储库级机密:

  • 具有存储库 管理员访问权限 的用户可以创建和管理 Dependabot 机密。
  • 对存储库具有 协作者访问权限 的用户可以使用机密 Dependabot。

组织级机密:

  • 组织所有者 可以创建和管理 Dependabot 机密。
  • 若用户具有存储库的协作者访问权限并可访问每个机密,则可以将机密用于 Dependabot。

局限和限制

对于由其 Dependabot启动的工作流,事件 pull_request_target 处理方式与其他事件不同。 对于此事件,如果拉取请求的基本引用由 Dependabot (github.event.pull_request.user.login == 'dependabot[bot]') 创建:

  • 该工作流接收只读 GITHUB_TOKEN
  • 机密不适用于该工作流****。

此额外限制有助于防止 Dependabot 启动的请求可能引发潜在安全风险。

          Dependabot 机密不会被传递给分叉。

操作机密

Actions 机密用于在工作流中存储敏感信息(例如 API 密钥、身份验证令牌和其他凭据)。

Usage

工作流文件 (.github/workflows/*.yml) 中会引用 Actions 机密。

Scope

可以在以下级别定义 Actions 机密:

  • 存储库级别
  • 环境级别
  • 组织级别

环境级机密特定于某个特定环境,例如生产环境或过渡环境。 如果在组织级别设置,则可以跨存储库共享 Actions 机密。 可以使用访问策略来控制哪些存储库有权访问机密。

访问权限

操作机密仅在 GitHub Actions 工作流中可用。 尽管在 Actions 上运行, Dependabot 但无权访问 Actions 机密。

对于由Dependabot启动的工作流,Actions 机密信息不可用。 这些工作流机密必须存储为 Dependabot 机密,才能访问工作流。

存储 Actions 机密的位置决定了其可访问性:

  • 存储库机密:存储库中的所有工作流都可以访问该机密。
  • 环境机密:只有引用该特定环境的作业才可访问该机密。
  • 组织机密:存储库中由组织授予访问权限的所有工作流都可以访问组织机密。

用户访问权限

存储库级机密和环境机密:

  • 对存储库具有“管理员访问权限”的用户可以创建和管理 Actions 机密****。
  • 对存储库具有“协作者访问权限”的用户可以使用机密****。

组织级机密:

  • 组织所有者可以创建和管理 Actions 机密。
  • 对有权访问每个机密的存储库具有“协作者访问权限”的用户可以使用该机密****。

局限和限制

  • Actions 密钥不适用于由Dependabot启动的工作流。
  • Actions 机密不会传递给由分叉中的拉取请求触发的工作流。
  •           GitHub Actions 会自动修订打印到工作流日志的所有 GitHub 机密的内容。
    
  • 最多可以存储 1,000 个组织机密、100 个存储库机密和 100 个环境机密。 密码大小限于 48 KB。 有关详细信息,请参阅机密的限制

Codespaces 秘密

          Codespaces 机密将存储要在 GitHub Codespaces 中使用的 API 令牌和 SSH 密钥等凭据和敏感信息,从而可配置安全的开发环境。

Usage

          Codespaces机密可在 Codespaces 开发容器配置 (`devcontainer.json`) 中引用。

Scope

可以在以下位置定义 Codespaces 机密:

  • 用户帐户级别
  • 存储库级别
  • 组织级别

对于用户帐户级机密,可以选择哪些存储库有权访问机密。

          Codespaces 如果在组织级别设置,则可以跨存储库共享机密。 可以使用访问策略来控制哪些存储库有权访问机密。

访问权限

          Codespaces 机密只能在 Codespaces 中被访问。

          GitHub Actions无法访问Codespaces的机密。

用户访问权限

用户帐户级机密:

  •           Codespaces 机密可用于使用可访问该机密的存储库创建的任何代码空间。
    

存储库级机密:

  • 具有存储库 管理员访问权限 的用户可以创建和管理 Codespaces 机密。
  • 对存储库具有“协作者访问权限”的用户可以使用机密****。

组织级机密:

  • 组织所有者 可以创建和管理 Codespaces 机密。
  • 对有权访问每个机密的存储库具有“协作者访问权限”的用户可以使用该机密****。

局限和限制

  • 最多可以存储 100 个 GitHub Codespaces机密。
  • 密码大小限于 48 KB。
  •           Codespaces 机密不会被传递给分叉。
    

延伸阅读