Skip to main content

了解 GitHub 机密类型

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

GitHub 如何存储机密

GitHub 使用 Libsodium 密封盒来加密机密。 机密在到达 GitHub 之前会被加密,并保持加密状态,直到它被 Dependabot、GitHub Actions 或 Codespaces 使用。

Dependabot 机密

Dependabot 机密用于存储凭据和敏感信息,以便在 Dependabot 中使用。

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

Usage

Dependabot 机密通���由 Dependabot 用来向专用包注册表进行身份验证。 这让 Dependabot 可以创建拉取请求,以更新专用存储库中易受攻击或过时的依赖项。 存储库的 dependabot.yml 文件中会引用这些用于进行身份验证的 Dependabot 机密。

Dependabot 机密还可以包括 Dependabot 发起的工作流所需的机密。 例如,Dependabot 可在创建拉取请求以更新依赖项时或注释拉取请求时触发 GitHub Actions 工作流。 在这种情况下,只要由 Dependabot 事件触发了工作流,就可以从工作流文件 (.github/workflows/*.yml) 引用 Dependabot 机密。

Scope

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

  • 存储库级别
  • 组织级别

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

访问权限

向专用注册表进行身份验证以更新依赖项时,Dependabot 会访问 Dependabot 机密。

Dependabot 发起工作流的触发器事件时,GitHub Actions 工作流会访问 Dependabot 机密。 这是因为当 Dependabot 发起工作流时,只有 Dependabot 机密可用 - 无法访问 Actions 机密。 因此,这些工作流所需的任何机密都必须存储为 Dependabot 机密,而不是 Actions 机密。 pull_request_target 事件还有其他安全限制。 请查看限制和局限

用户访问权限

存储库级机密:

  • 对存储库具有“管理员访问权限”的用户可以创建和管理 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 机密。 可以使用访问策略来控制哪些存储库有权访问机密。

访问权限

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 机密存储凭据和敏感信息(如 API 令牌和 SSH 密钥),以便在 GitHub Codespaces 中使用,从而允许配置安全开发环境。

Usage

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

Scope

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

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

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

访问权限

只能在 Codespaces 中访问 Codespaces 机密。

GitHub Actions 无法访问 Codespaces 机密。

用户访问权限

用户帐户级机密:

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

存储库级机密:

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

组织级机密:

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

局限和限制

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

延伸阅读