Github Actions OIDC的sub声明所有可能取值(用于AWS信任策略配置)
GitHub Actions OIDC sub声明取值与场景匹配
GitHub Actions OIDC的sub声明用于标识触发工作流的上下文,格式遵循固定结构,可通过精准配置实现细粒度的AWS权限控制。以下是对应你列出的场景的sub取值及说明:
基础结构说明
sub的核心格式为:repo:<OWNER>/<REPO>:<CONTEXT_TYPE>:<DETAIL>
其中:
<OWNER>:GitHub仓库所有者(个人用户名或组织名)<REPO>:目标仓库名称<CONTEXT_TYPE>:触发上下文类型,常见为ref(分支/标签操作)或pull_request(PR操作)<DETAIL>:上下文细节,如分支/标签的完整Git引用路径
对应场景的sub取值
1. 对名为X的分支执行任意操作
仅匹配针对指定分支的所有操作(包括推送、手动触发等):
repo:<OWNER>/<REPO>:ref:refs/heads/X
示例:针对my-org/my-app仓库的main分支:repo:my-org/my-app:ref:refs/heads/main
2. 对标记为X的任意标签执行任意操作
匹配针对指定标签的所有操作:
repo:<OWNER>/<REPO>:ref:refs/tags/X
示例:针对v1.0.0标签:repo:my-org/my-app:ref:refs/tags/v1.0.0
3. 推送至名为X的分支的任意操作
sub取值与场景1一致,但如需仅限制推送动作,需在AWS信任策略中额外添加event_name条件(GitHub OIDC会附带该字段):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:sub": "repo:my-org/my-app:ref:refs/heads/X", "token.actions.githubusercontent.com:event_name": "push" } } } ] }
4. 仓库内的任意推送操作
匹配仓库所有分支/标签的推送操作,使用通配符简化配置:
- 仅分支推送:
repo:<OWNER>/<REPO>:ref:refs/heads/* - 仅标签推送:
repo:<OWNER>/<REPO>:ref:refs/tags/* - 所有推送(分支+标签):
repo:<OWNER>/<REPO>:ref:*
同样建议搭配event_name: push条件进一步限制。
5. 仓库内的任意PR
匹配仓库中所有PR触发的工作流:
repo:<OWNER>/<REPO>:pull_request
6. 对任意PR执行任意操作
与场景5的sub取值完全一致,因为该sub已覆盖所有PR上下文。
7. 对目标分支为X的PR执行任意操作
sub无法单独区分PR的目标分支,需结合GitHub OIDC提供的pull_request.target字段,在AWS信任策略中同时配置两个条件:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "token.actions.githubusercontent.com:sub": "repo:my-org/my-app:pull_request", "token.actions.githubusercontent.com:pull_request.target": "X" } } } ] }
注意事项
- 通配符
*可用于匹配任意部分,但建议仅在必要时使用,遵循最小权限原则。 - GitHub OIDC还提供其他字段(如
repository、event_name等),可与sub组合实现更精准的权限控制。 - 确保AWS IAM身份提供商的受众(Audience)配置为
sts.amazonaws.com,否则信任策略会验证失败。
内容的提问来源于stack exchange,提问作者yen
相关产品推荐
相关产品推荐

