跳至主要内容

了解 GitHub 机密类型

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

GitHub 如何存储密钥

GitHub 使用 Libsodium sealed boxes 对密钥进行加密。密钥在到达 GitHub 之前就已被加密,并在被 Dependabot、GitHub Actions 或 Codespaces 使用之前保持加密状态。

Dependabot 密钥

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

Dependabot 密钥在仓库的 dependabot.yml 文件中被引用。

使用

Dependabot 密钥通常由 Dependabot 用于对私有软件包注册表进行身份验证。这使得 Dependabot 能够在私有仓库中打开拉取请求,以更新有漏洞或已过期的依赖项。作为身份验证手段,这些 Dependabot 密钥在仓库的 dependabot.yml 文件中被引用。

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 密钥不会传递给派生仓库(fork)。

Actions 密钥

Actions 密钥用于在工作流中存储敏感信息,例如 API 密钥、身份验证令牌以及其他凭证。

使用

Actions 密钥在工作流文件(.github/workflows/*.yml)中被引用。

范围

您可以在以下位置定义 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 使用,使您能够配置安全的开发环境。

使用

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

范围

您可以在以下位置定义 Codespaces 密钥:

  • 用户账户级别
  • 仓库级别
  • 组织级别

对于用户账户级别的密钥,您可以选择哪些仓库可以访问该密钥。如果在组织级别设置,Codespaces 密钥可以在多个仓库之间共享,您可以使用访问策略来控制哪些仓库可以访问该密钥。

访问权限

Codespaces 密钥仅在 Codespaces 中可访问。

GitHub Actions 无法访问 Codespaces 密钥。

用户访问权限

用户账户级别密钥

  • 只要使用了有权访问该密钥的仓库,您创建的任何 codespace 都可以使用 Codespaces 密钥。

仓库级别密钥

  • 拥有仓库 管理员访问权限 的用户可以创建和管理 Codespaces 密钥。
  • 拥有仓库 协作者访问权限 的用户可以使用该密钥。

组织级别密钥

  • 组织所有者可以创建和管理 Codespaces 密钥。
  • 对拥有相应仓库 协作者访问权限 且被授予该密钥访问权的用户可以使用该密钥。

限制与约束

  • 您最多可以为 GitHub Codespaces 存储 100 条密钥。
  • 密钥大小限制为 48 KB。
  • Codespaces 密钥不会传递给派生仓库(fork)。

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.