如何将AWS OpenSearch Serverless连接到Lambda注入数据?遇403权限问题
解决AOSS PUT请求403权限错误问题
可能的原因及排查步骤
1. 确认403错误的来源
先通过CloudWatch日志定位错误发生的阶段:
- API Gateway层面:查看API Gateway的访问日志,若错误来自自定义授权器,说明请求未通过API Gateway的授权验证。
- Lambda执行层面:查看Lambda函数的运行日志,若错误是调用AOSS时抛出的,说明是Lambda执行角色的权限或AOSS资源策略限制。
2. 若错误来自Lambda调用AOSS
检查AOSS集合的资源策略
AOSS自身的资源策略会覆盖IAM权限,即使Lambda角色有全量AOSS权限,若集合策略拒绝访问仍会返回403:
- 登录AWS控制台,找到目标AOSS集合,进入「资源策略」页面。
- 添加或更新策略,允许Lambda执行角色的ARN访问该集合:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-id>:role/<lambda-execution-role-name>" }, "Action": "aoss:*", "Resource": "arn:aws:aoss:<region>:<account-id>:collection/<collection-name>/*" } ] }
验证Lambda执行角色权限
- 登录IAM控制台,找到Lambda对应的执行角色,确认其权限策略中包含
aoss:*且资源为*(或明确指定目标AOSS集合ARN)。 - 若刚修改过Serverless配置,重新执行
serverless deploy确保权限更新生效。
检查AOSS请求端点
确认Lambda中调用AOSS的端点格式正确,区域与Lambda部署区域一致,例如:
const endpoint = "https://<collection-id>.<region>.aoss.amazonaws.com";
3. 若错误来自API Gateway自定义授权器
检查授权器返回的政策文档
自定义授权器必须返回允许当前请求的IAM政策,确保政策中包含对POST /lambda路径的Invoke权限:
{ "principalId": "user-id", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow", "Resource": "arn:aws:execute-api:<region>:<account-id>:<api-id>/<stage>/POST/lambda" } ] } }
- 确认授权器逻辑中,对当前用户的权限判断正确,返回的资源ARN与API Gateway的实际资源匹配。
内容的提问来源于stack exchange,提问作者pabs095
相关产品推荐
相关产品推荐

