Skip to main content

了解 GitHub 机密类型

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

关于 GitHub 的机密类型

GitHub 机密用于在存储库中安全地存储敏感信息(如 API 密钥、令牌和密码)。

将敏感信息存储为 GitHub 机密时,无需对凭据或密钥进行硬编码,防止在代码或日志中泄露。 然后,机密可用于验证服务身份、管理凭据,并在工作流中安全地传递敏感数据。

GitHub 使用的机密类型有两种:

根据 GitHub 机密类型,可以在存储库、组织或个人帐户安全设置页下创建和管理机密。

Dependabot 机密

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

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

使用情况

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

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

范围

可以在以下级别定义 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 密钥、身份验证令牌和其他凭据)。

使用情况

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

范围

可以在以下级别定义 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。 有关详细信息,请参阅机密的限制

延伸阅读