在 GitHub 中管理机密

已完成

机密是在组织、存储库或存储库环境中创建的变量。 机密可用于 GitHub Actions 工作流。 仅当在工作流中显式包含机密时,GitHub Actions 才能读取该机密。

对于存储在组织级别的机密,可以使用访问策略来控制哪些存储库可以使用组织机密。 组织级机密可让你在多个存储库之间共享机密。 这减少了创建重复机密的需求。 在一个位置更新组织机密还可确保更改在使用该机密的所有存储库工作流中生效。

对于存储在环境级别的机密,可以启用所需的审阅者来控制对机密的访问。 除非获得所需的审批者批准,否则工作流作业无法访问环境机密。

注释

可以将工作流配置为直接向 Azure 进行身份验证以访问资源。

命名机密

以下规则适用于机密名称:

  • 名称只能包含字母数字字符([a-z]、、[A-Z][0-9])或下划线(_)。 不允许包含空格。
  • 名称不得以 GITHUB_ 前缀开头。
  • 名称不得以数字开头。
  • 名称不区分大小写。
  • 名称必须在其创建的级别中是唯一的。

为了帮助确保 GitHub 在日志中对机密进行修订,请避免使用结构化数据作为机密的值。 例如,避免创建包含 JSON 或编码 Git Blob 的机密。

访问机密

将秘密设置为工作流文件中的输入或环境变量,以便使其可用于动作。 如果有权编辑工作流文件,则可以使用和读取该文件中的机密。 有关详细信息,请访问 GitHub 上的访问权限

当工作流运行排队时,将读取组织和存储库机密,并在引用环境的作业启动时读取环境机密。 还可以使用 REST API 管理机密。

限制凭据权限

建议授予可能的最低权限。 例如,使用部署密钥或服务帐户,而不是使用个人凭据。 考虑授予只读权限(如果这是所需的全部权限)并尽可能限制访问权限。

生成个人访问令牌(经典)时,请选择所需的最少范围。 生成精细的个人访问令牌时,请选择所需的最小权限和存储库访问权限。

创建机密

若要在 GitHub 上为个人帐户存储库创建机密或变量,你必须是存储库所有者。 若要在 GitHub 上为组织存储库创建机密或变量,必须具有 admin 访问权限。 最后,要通过 REST API 为个人帐户存储库或组织存储库创建机密或变量,必须拥有协作者访问权限。

可以通过以下方法创建机密:

  • 在存储库顶部导航栏中选择 “设置 ”。
  • 在左侧导航的 “安全 ”部分中,选择“ 机密和变量 ”下拉列表。
  • 选择 “操作” 以访问 “操作密钥和变量” 页面。

在工作流中使用机密

若要将机密作为输入或环境变量提供作,可以使用 secrets 上下文访问在存储库中创建的机密。 以下代码演示了在工作流中访问机密的示例。

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

机密不能直接在 if: 条件中引用。 请考虑将机密设置为作业级环境变量,然后引用环境变量以有条件地运行作业中的步骤。

如果未设置机密的值,则引用机密(如 ${{ secrets.SuperSecret }} 示例中)的表达式的返回值为空字符串。