确保某些github操作仅由所有者运行



我有一个操作作业,可以将上下文上传到其他网站。令牌已设置并存储在secret.MY_TOKEN中。

但是其他发出pull请求的人也会使用我设置的令牌触发此操作作业。

如何限制执行只有我才能运行此操作作业的作业的权限。

fyi我的ci.yml如下:

name: foobar
on: [push, pull_request]
jobs:
upload:
runs-on: ubuntu-latest
steps:
....
- name: execute upload
env:
TOKEN: ${{ secrets.MYTOKEN }}
run:
upl --token ${TOKEN}

我想这里有两个安全问题。

  1. 令牌打印在日志文件中
  2. 其他人可以通过触发具有自己目的的操作来使用此私有令牌

使用github.repository_owner上下文

https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-上下文

语法应该类似于:

- if: github.repository_owner == 'owner_name'

使用on: pull_request时,工作流将无法访问机密。

有一个不同的触发器on: pull_request_target,它将授予对机密的访问权限,但将使用目标分支中定义的工作流。

另请参阅:

  • GitHub操作和恶意拉取请求的威胁
  • GitHubActions中pull_request和pull_request_target事件有什么区别

我不认为只允许某些用户运行操作是本机功能。

然而,您可以简单地检查操作上下文参与者,如果参与者不是您自己(或回购的所有者,或您想要的任何条件(,则可以提前退出。

自2022年7月以来,有一个新功能可能会有所帮助:

区分触发参与者和执行参与者

从下周开始,在GitHub中重新运行的工作流Actions将使用初始运行的actor进行权限评估
触发重新运行的参与者将继续显示在UI中,并且可以在工作流中通过GitHub上下文中的triggering_actor字段进行访问。

目前,运行的特权(例如,机密、权限(是由触发参与者派生的
在触发重新运行的参与者与原始执行参与者不同的情况下,这会带来挑战。

即将进行的更改将区分初始执行参与者和触发参与者,从而实现重新运行的稳定执行

有关更多详细信息,请参阅重新运行工作流和作业

相关内容