基于AWS API Gateway的跨账号认证可行方案咨询
跨账号API Gateway认证授权方案(基于Lambda授权器)
针对你在Account A部署API Gateway,需要给50+ AWS账号授权且支持扩缩容的需求,推荐集中式Lambda授权器+IAM跨账号角色+动态配置的方案,完全规避资源策略修改后需重新部署的问题,且扩缩容成本极低。
核心逻辑
让目标账号(B/C/D等)的调用实体(如Lambda、ECS任务、EC2)通过STS扮演Account A中预先定义的授权角色,Account A的Lambda授权器验证调用者的账号/角色是否在允许列表中,动态返回访问权限。无需在每个目标账号部署授权器,所有认证逻辑集中在Account A。
具体实施步骤
1. 在Account A创建跨账号授权角色
- 创建IAM角色(例如
APIGatewayCrossAccountInvokeRole),信任策略配置为允许目标账号的主账号或特定角色扮演它。如果账号数量多,可直接允许AWS组织下的所有账号/OU,示例信任策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalAccount": ["123456789012", "234567890123"] // 替换为目标账号ID,或用"123456*"批量匹配 } } } ] } - 给该角色附加权限策略,允许调用API Gateway的指定资源:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:REGION:ACCOUNT_A_ID:API_ID/*/*/*" } ] }
2. 部署Account A的集中式Lambda授权器
Lambda授权器的核心逻辑是验证调用者的账号身份,并返回对应权限:
- 从API Gateway请求上下文获取调用者信息:
requestContext.identity.accountId(账号ID)或requestContext.identity.userArn(角色ARN) - 读取动态配置的允许账号列表(推荐存在AWS Systems Manager Parameter Store或DynamoDB),验证当前账号是否在列表内
- 验证通过则返回允许访问的IAM策略,示例返回内容:
{ "principalId": "USER_ARN", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:REGION:ACCOUNT_A_ID:API_ID/*/*/*" } ] } } - 配置Lambda授权器与API Gateway关联,选择
REQUEST类型(直接从上下文取身份信息,无需额外token)
3. 目标账号侧配置
在Account B/C/D等目标账号中,给需要调用API的实体(如Lambda执行角色、ECS任务角色)附加权限,允许其扮演Account A的授权角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::ACCOUNT_A_ID:role/APIGatewayCrossAccountInvokeRole" } ] }
调用方通过STS AssumeRole获取临时凭证后,用该凭证调用Account A的API;如果是AWS服务(如Lambda),可直接在代码中调用STS并使用临时凭证发起请求。
4. 扩缩容优化
- 动态配置管理:将允许的账号列表存储在Parameter Store,Lambda授权器每次请求时读取(可添加内存缓存,减少配置服务调用次数)。新增/删除账号时,仅需更新Parameter Store的配置,无需修改Lambda代码、API资源策略或重新部署API。
- 组织级批量授权:如果所有目标账号属于同一个AWS组织,可在Account A的角色信任策略中配置允许组织下的所有账号,新账号加入组织后自动获得授权,无需手动更新信任策略。
参考文档
- AWS API Gateway 自定义Lambda授权器文档:包含授权器配置、请求上下文参数、返回策略格式说明
- AWS IAM 跨账号角色信任文档:讲解角色信任策略编写、跨账号角色创建流程
- AWS STS AssumeRole 文档:介绍临时凭证获取与使用方法
- AWS Systems Manager Parameter Store 文档:说明配置存储与读取的最佳实践
内容的提问来源于stack exchange,提问作者user9224913
相关产品推荐
相关产品推荐

