概述
您可以使用 `permissions` 修改授予 `GITHUB_TOKEN` 的默认权限,根据需要添加或删除访问权限,以便您只允许最低限度的必要访问权限。更多信息,请参阅 "自动令牌身份验证."
您可以将 `permissions` 用作顶级键,应用于工作流程中的所有作业,或者在特定作业中使用。当您在特定作业中添加 `permissions` 键时,该作业中使用 `GITHUB_TOKEN` 的所有操作和运行命令都将获得您指定的访问权限。更多信息,请参阅 jobs.<job_id>.permissions.
对于下表中显示的每个可用权限,您可以分配以下访问级别之一:read(如果适用)、write 或 none。write 包含 read。如果您指定了任何这些权限的访问权限,则所有未指定的权限都将设置为 none。
可用权限以及每个权限允许的操作详情
| 权限 | 允许使用 GITHUB_TOKEN的操作 | 
|---|---|
| actions | 使用 GitHub Actions。例如, actions: write允许操作取消工作流程运行。更多信息,请参见“GitHub Apps所需的权限”。 | 
| attestations | 使用工件证明。例如, attestations: write允许操作为构建生成工件证明。更多信息,请参见“使用工件证明建立构建来源” | 
| checks | 使用检查运行和检查套件。例如, checks: write允许操作创建检查运行。更多信息,请参见“GitHub Apps所需的权限”。 | 
| contents | 使用仓库的内容。例如, contents: read允许操作列出提交,而contents: write允许操作创建发布。更多信息,请参见“GitHub Apps所需的权限”。 | 
| deployments | 使用部署。例如, deployments: write允许操作创建新的部署。更多信息,请参见“GitHub Apps所需的权限”。 | 
| discussions | 使用 GitHub Discussions。例如, discussions: write允许操作关闭或删除讨论。更多信息,请参见“使用 GraphQL API 进行讨论” | 
| id-token | 获取 OpenID Connect (OIDC) 令牌。这需要 id-token: write。更多信息,请参见“关于使用 OpenID Connect 加强安全性” | 
| issues | 使用 Issues。例如, issues: write允许操作向 Issue 添加评论。更多信息,请参见“GitHub Apps所需的权限”。 | 
| packages | 使用 GitHub Packages。例如, packages: write允许操作上传和发布 GitHub Packages 上的包。更多信息,请参见“关于 GitHub Packages 的权限”。 | 
| pages | 使用 GitHub Pages。例如, pages: write允许操作请求 GitHub Pages 构建。更多信息,请参见“GitHub Apps所需的权限”。 | 
| pull-requests | 使用 Pull Requests。例如, pull-requests: write允许操作向 Pull Request 添加标签。更多信息,请参见“GitHub Apps所需的权限”。 | 
| repository-projects | 使用 GitHub 项目(经典版)。例如, repository-projects: write允许操作向项目(经典版)添加列。更多信息,请参见“GitHub Apps所需的权限”。 | 
| security-events | 使用 GitHub 代码扫描和 Dependabot 警报。例如, security-events: read允许操作列出仓库的 Dependabot 警报,而security-events: write允许操作更新代码扫描警报的状态。更多信息,请参见“代码扫描警报的仓库权限”和“Dependabot 警报的仓库权限”(在“GitHub Apps所需的权限”中)。 | 
| statuses | 使用提交状态。例如, statuses:read允许操作列出给定引用的提交状态。更多信息,请参见“GitHub Apps所需的权限”。 | 
定义 GITHUB_TOKEN 权限的访问权限
您可以通过在 permissions 密钥中指定可用权限的值为 read、write 或 none 来定义 GITHUB_TOKEN 将允许的访问权限。
permissions:
  actions: read|write|none
  attestations: read|write|none
  checks: read|write|none
  contents: read|write|none
  deployments: read|write|none
  id-token: write|none
  issues: read|write|none
  discussions: read|write|none
  packages: read|write|none
  pages: read|write|none
  pull-requests: read|write|none
  repository-projects: read|write|none
  security-events: read|write|none
  statuses: read|write|none
如果您指定了任何这些权限的访问权限,则所有未指定的权限都将设置为 none。
您可以使用以下语法为所有可用权限定义 read-all 或 write-all 访问权限
permissions: read-all
permissions: write-all
您可以使用以下语法禁用所有可用权限的权限
permissions: {}
更改派生仓库中的权限
您可以使用 permissions 密钥为派生仓库添加和删除读取权限,但通常您无法授予写入权限。此行为的例外情况是管理员用户已在 GitHub Actions 设置中选择了“**将写入令牌发送到来自拉取请求的工作流程**”选项。更多信息,请参见“管理仓库的 GitHub Actions 设置”。
设置工作流程中所有作业的 GITHUB_TOKEN 权限
您可以在工作流程的顶层指定 permissions,以便该设置应用于工作流程中的所有作业。
示例:设置整个工作流程的 GITHUB_TOKEN 权限
此示例显示为 GITHUB_TOKEN 设置的权限,这些权限将应用于工作流程中的所有作业。所有权限都授予读取访问权限。
name: "My workflow"
on: [ push ]
permissions: read-all
jobs:
  ...
设置特定作业的 GITHUB_TOKEN 权限
对于特定作业,您可以使用 jobs.<job_id>.permissions 修改授予 GITHUB_TOKEN 的默认权限,根据需要添加或删除访问权限,以便您只允许最低限度的必需访问权限。更多信息,请参见“自动令牌身份验证”。
通过在作业定义中指定权限,您可以根据需要为每个作业配置 GITHUB_TOKEN 的不同权限集。或者,您可以为工作流程中的所有作业指定权限。有关在工作流程级别定义权限的信息,请参见 permissions。
示例:设置工作流程中一个作业的 GITHUB_TOKEN 权限
此示例显示为 GITHUB_TOKEN 设置的权限,这些权限仅适用于名为 stale 的作业。为 issues 和 pull-requests 权限授予写入访问权限。所有其他权限将没有访问权限。
jobs:
  stale:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v5