配置Github Actions OIDC访问ECR时遇权限错误排查
以下是可能导致权限报错的常见原因及排查方向:
信任策略匹配规则错误
检查GARole的信任策略,确认Condition中的token.actions.githubusercontent.com:sub匹配规则是否准确对应你的GitHub仓库/组织。比如要限制特定仓库,规则应该是"StringEquals": {"token.actions.githubusercontent.com:sub": "repo:你的用户名/仓库名:*"};如果是组织级则用"org:你的组织名:*"。匹配规则错误会导致OIDC身份无法正确关联到GARole,自然拿不到权限。权限策略资源范围设置错误
ecr:GetAuthorizationToken是全局操作,资源必须设为*,不能指定具体ECR仓库ARN。如果你的自定义权限策略里把资源写成了具体仓库(比如arn:aws:ecr:us-east-1:NNN:repository/my-repo),该权限会直接失效。正确的权限配置片段如下:{ "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" }流水线中角色ARN配置错误
核对aws-actions/amazon-ecr-login动作的role-to-assume参数,确认是否准确填写了arn:aws:iam::NNN:role/GARole,有没有出现账号ID、角色名拼写错误或者ARN格式问题。参数错误会导致AssumeRole失败,流水线使用无权限的默认身份执行操作。角色权限边界限制
如果GARole设置了权限边界,即使附加了自定义权限策略,权限边界也可能拦截ecr:GetAuthorizationToken操作。需要检查权限边界策略是否包含该操作的允许规则。OIDC提供商受众配置错误
创建AWS OIDC身份提供商时,受众(Audience)必须设置为sts.amazonaws.com。若填错其他值,GitHub的OIDC令牌无法通过AWS验证,无法成功AssumeRole,最终导致权限不足。IAM策略传播延迟
IAM策略变更后可能存在几分钟的传播延迟,若刚修改完策略就运行流水线,可等待几分钟后重试。
内容的提问来源于stack exchange,提问作者yen

