Sas*_*ota 6 continuous-integration github github-actions github-secret cicd
我有一个运行端到端测试的公共存储库。这些测试需要存储在 GitHub 中的机密。
相应的工作流程yaml文件有如下pull_request条目:
on:
pull_request:
....
Run Code Online (Sandbox Code Playgroud)
问题:如果我(所有者)自己创建拉取请求,工作流程将正确运行并访问机密。如果有人从分叉创建 PR,GitHub 会要求我批准运行,但是一旦我批准,工作流程将看不到这些秘密的值,并且测试将失败。
如果我更改pull_request为pull_request_target,它将正确访问秘密。然而,这样,在运行工作流程之前它不会征求我的批准(因此秘密很容易泄露)。
pull_request_target:
branches:
- main
Run Code Online (Sandbox Code Playgroud)
问题:当从分叉上运行 PR 时,如何使 GitHub 操作访问机密,同时仍需要批准运行?
与 不同的是pull_request,pull_request_target在目标存储库的上下文中运行工作流,以便您可以访问机密。您可以通过添加来减少此漏洞labeled,但这并不能真正使其成为一种安全的方法
\n\n因此,此方法只能用作临时解决方案,\n直到应用上述选项中的正确修复为止。由于外部用户无权分配标签,这实际上需要存储库所有者首先手动检查更改,并且还容易出现人为错误。
\n请注意,对于针对易受攻击的工作流程进行的任何修复,都有一个重要的 \xe2\x80\x9cgotcha\xe2\x80\x9d。在对易受攻击的工作流进行修复之前打开的所有 PR 将使用打开 PR 时存在的工作流版本。这意味着\n如果有待处理的 PR,对该 PR 的任何更新仍可能滥用\n易受攻击的工作流程。如果在修复易受攻击的工作流后可能会添加不受信任的提交,建议关闭或重新设置此类 PR。
\n您可能会问自己:如果 pull_request_target 工作流程仅检查并构建 PR,即运行不受信任的代码,但不引用任何秘密,那么它是否仍然容易受到攻击?
\n是的,因为在 pull_request_target 上触发的工作流仍然\n在内存中\n具有读/写存储库令牌,该令牌\n可能可供任何正在运行的程序使用。如果工作流程使用\nactions/checkout 并且不将可选参数\npersist-credentials 作为 false 传递,则情况会变得更糟。该参数的默认值为 true。这意味着在任何后续步骤中,任何运行的代码都可以简单地从磁盘读取存储的存储库令牌。如果您不需要存储库写入权限或机密,只需坚持使用 pull_request 触发器即可。
\n
如果您仍然想这样做,请添加pull_request_target带有labeledtype 的触发器
on:\n pull_request_target:\n types: [labeled]\nRun Code Online (Sandbox Code Playgroud)\n当您准备好合并 PR 时,通过创建一个标签Pull requests -> Labels -> new label并将其应用于右侧菜单中“标签”部分的拉取请求,这将触发工作流程。
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |