跨AWS账户配置OIDC遇权限错误,能否实现跨账户OIDC认证?
跨AWS账户实现OIDC认证可行吗?附报错解决方法
跨AWS账户的OIDC认证完全可行,你遇到的"Not authorized to perform sts:AssumeRoleWithWebIdentity"报错是因为信任策略配置有误,下面是问题分析和修复步骤:
问题根源
你的ROLE B在账户B,但信任策略里的Federated字段引用的是账户A的OIDC提供商ARN,而AWS明确要求:IAM角色的信任策略中,OIDC身份提供商必须是角色所在账户内创建的资源,不能直接引用其他账户的OIDC提供商。
修复步骤
1. 在账户B中创建GitHub OIDC身份提供商
登录账户B的AWS控制台,进入IAM>身份提供商>创建身份提供商:
- 提供商类型选择OpenID Connect
- 提供商URL填写:
https://token.actions.githubusercontent.com - 受众填写:
sts.amazonaws.com
完成创建后,记录该提供商的ARN(格式为arn:aws:iam::<ACCOUNT_B_ID>:oidc-provider/token.actions.githubusercontent.com)
2. 修正ROLE B的信任策略
将原信任策略中的Federated值替换为账户B刚创建的OIDC提供商ARN,修正后的策略如下:
{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<ACCOUNT_B_ID>:oidc-provider/token.actions.githubusercontent.com" }, "Action": [ "sts:TagSession", "sts:AssumeRoleWithWebIdentity" ], "Condition": { "StringLike": { "token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:*" }, "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" } } }
3. 确认GitHub Actions配置无误
确保configure-aws-credentials动作中的role-to-assume是账户B中ROLE B的完整ARN(格式为arn:aws:iam::<ACCOUNT_B_ID>:role/ROLE_B_NAME),同时检查:
- GitHub仓库的Workflow权限已开启(仓库设置>Actions>General>Workflow permissions,至少勾选"Read repository contents and packages permissions",如需写操作则选"Read and write permissions")
- 仓库的OIDC主体匹配信任策略中的
sub条件(确认repo:my-org/my-repo:*对应正确的组织和仓库名)
原理说明
OIDC认证流程中,GitHub会生成包含受众(aud)和主体(sub)的Token,AWS会验证该Token的签名是否来自信任的OIDC提供商——而这个提供商必须是当前账户内创建的,因为每个AWS账户的OIDC提供商是独立资源,跨账户无法直接复用其信任关系。
内容的提问来源于stack exchange,提问作者patppd
相关产品推荐
相关产品推荐

