You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GitHub Actions安全访问Fork的PR Secrets并需运行审批

解决Fork PR的GitHub Actions Secrets访问与审批平衡问题

问题背景

我维护一个公开仓库(https://github.com/sol4k/sol4k),其中的端到端测试需要调用GitHub Secrets。当前工作流配置如下:

on:
  pull_request:
  ....

存在以下问题:

  • 仓库所有者发起PR时,工作流可正常访问Secrets并运行
  • 外部用户从Fork发起PR时,即便批准运行,工作流仍无法读取Secrets,导致测试失败

若改为pull_request_target触发:

pull_request_target:
  branches:
    - main

虽然能正常访问Secrets,但工作流会自动运行,无需审批,存在Secrets泄露风险。

需求

实现GitHub Actions处理Fork PR时,既能访问Secrets,又必须先获得运行审批。

解决方案:pull_request_target + 环境审批机制

通过结合pull_request_target触发事件和GitHub环境的审批规则,可同时满足Secrets访问和审批要求,步骤如下:

1. 创建需要审批的环境

  • 进入仓库「Settings」→「Environments」→点击「New environment」
  • 输入环境名称(例如protected-e2e-tests)
  • 开启「Required reviewers」,添加需要审批的团队或个人(如仓库维护者)
  • 可按需开启其他保护规则(如分支限制)

2. 修改工作流配置

更新工作流文件,使用pull_request_target触发,并指定运行环境为上述创建的审批环境,同时确保拉取PR分支的代码(pull_request_target默认会拉取基础分支代码):

on:
  pull_request_target:
    branches:
      - main

jobs:
  e2e-tests:
    runs-on: ubuntu-latest
    environment: protected-e2e-tests # 指定需要审批的环境
    steps:
      - name: 拉取PR分支代码
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          repository: ${{ github.event.pull_request.head.repo.full_name }}
      
      - name: 运行端到端测试
        run: npm run e2e # 替换为你的测试命令
        env:
          TEST_SECRET: ${{ secrets.TEST_SECRET }} # 正常访问Secrets

关键注意事项

  • pull_request_target默认使用基础分支的代码,必须手动配置拉取PR分支的代码,否则测试会运行基础分支逻辑,无法验证PR内容
  • 审批前务必仔细审查PR代码:审批通过后工作流会执行PR中的代码,若代码存在恶意逻辑,可能导致Secrets泄露,需确保PR内容安全后再审批

内容的提问来源于stack exchange,提问作者Sasha Shpota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:27