如何 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 处理方式与其他事件不同。 对于此事件,如果拉取请求的 base ref 是由 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 保密存储凭据和敏感信息(如 API 令牌和 SSH 密钥),以便于在 GitHub Codespaces 中使用,从而配置安全的开发环境。
Usage
Codespaces机密在开发容器配置 (Codespaces) 中`devcontainer.json`引用。
Scope
可以在以下位置定义 Codespaces 机密:
- 用户帐户级别
- 存储库级别
- 组织级别
对于用户帐户级机密,可以选择哪些存储库有权访问机密。
Codespaces 如果在组织级别设置,则可以跨存储库共享机密。 可以使用访问策略来控制哪些存储库有权访问机密。
访问权限
Codespaces 机密只能在 Codespaces 中被访问。
GitHub Actions无法访问Codespaces的机密。
用户访问权限
用户帐户级机密:
- Codespaces 您创建的任何代码空间,如果使用了有权访问该机密的存储库,均可使用这些机密。
存储库级机密:
- 具有存储库 管理员访问权限 的用户可以创建和管理 Codespaces 机密。
- 对存储库具有“协作者访问权限”的用户可以使用机密****。
组织级机密:
- 组织所有者 可以创建和管理 Codespaces 机密。
- 对有权访问每个机密的存储库具有“协作者访问权限”的用户可以使用该机密****。
局限和限制
- 最多可以存储 100 个 GitHub Codespaces机密。
- 密码大小限于 48 KB。
- Codespaces 机密不会传递给分叉。