如何为IAM角色添加条件,仅允许API Handler使用AWS凭证?
限制IAM角色仅允许指定API Handler使用的解决方案
要实现这个需求,核心是利用AWS IAM的条件键,通过API Handler的唯一标识来做精准的权限控制,具体步骤如下:
1. 确定API Handler的唯一标识
先拿到能唯一识别这个API Handler的信息,常见场景对应标识如下:
- 如果是API Gateway托管的API Handler:使用API Gateway的完整ARN(对应
aws:SourceArn条件键),或者固定访问IP(对应aws:SourceIp) - 如果是私有网络内的自定义Handler(比如ECS/EKS上的服务):使用VPC ID(
aws:SourceVpc)或VPCE ID(aws:SourceVpce),这类标识比IP更稳定,适合私有环境
2. 修改IAM角色的信任策略
编辑Lambda用来扮演的IAM角色的信任关系,添加条件限制:只有指定API Handler触发的请求,才能获取该角色的临时凭证。
举个API Gateway场景的示例,信任策略代码如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/your-target-endpoint" } } } ] }
将上述aws:SourceArn值替换为你自己API Gateway的完整ARN,精确到stage和接口路径,确保只有该特定API触发的Lambda能获取角色凭证。
如果是固定IP场景,条件部分可修改为:
"Condition": { "IpAddress": { "aws:SourceIp": "10.0.0.5/32" } }
3. 可选:给权限策略补充限制(提升安全性)
若想进一步加固权限,还可以在角色的权限策略中添加相同条件。这样即便凭证意外泄露,非指定Handler也无法用它调用其他AWS服务。比如给S3访问权限添加限制:
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket/*", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/your-target-endpoint" } } }
关键注意事项
- 标识要精准:比如API Gateway的ARN需精确到具体stage和接口路径,避免同API下其他接口误用权限
- 私有环境优先用VPC/VPCE条件:比IP更稳定,避免公网IP变动导致权限失效
- 测试验证:可通过
aws sts get-caller-identity模拟不同来源的请求,确认只有指定Handler的请求能成功获取凭证
内容的提问来源于stack exchange,提问作者rxyz
相关产品推荐
相关产品推荐

