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

如何用Common Expression Language限制权限至特定工作流并允许所有分支?

关于GHA OIDC身份联合池权限配置的问题

问题描述

我正在创建工作流身份联合池提供方,希望指定所用服务账号的权限,使其仅能被特定工作流文件调用。官方GHA OIDC示例中的配置为:

"job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",

但我希望允许该工作流文件的所有分支调用,请问能否通过Common Expression Language(CEL)实现?我写的以下写法是否可行?

attribute_condition  = "(assertion.repository=='MyOrg/MyRepo' && assertion.job_workflow_ref=='MyOrg/MyRepo/.github/workflows/myworkflow.yaml*')"

回答

你给出的写法不可行,因为CEL中的==是精确字符串匹配,不会将*识别为通配符,这样的条件无法匹配到任何分支的工作流。

要实现允许特定工作流文件的所有分支调用,有两种更合适的CEL写法:

方法1:使用startsWith函数

利用job_workflow_ref的格式(仓库路径/.github/workflows/文件名@分支引用),判断字符串开头是否包含工作流文件名加@:

attribute_condition = "(assertion.repository=='MyOrg/MyRepo' && startsWith(assertion.job_workflow_ref, 'MyOrg/MyRepo/.github/workflows/myworkflow.yaml@'))"

方法2:使用正则匹配(matches函数)

通过正则表达式匹配任意分支后缀:

attribute_condition = "(assertion.repository=='MyOrg/MyRepo' && assertion.job_workflow_ref.matches('MyOrg/MyRepo/.github/workflows/myworkflow.yaml@.*'))"

这里的.*表示匹配@之后的任意字符,覆盖所有分支、标签等引用类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:42:36