使用CDK,我有一个网关rest api lambda,我想访问它;
- cognito用户池的成员
- 我堆栈中的其他Lambda
据我所知,没有办法向同一网关资源方法添加两个授权人?
这意味着我有两个选择;
- 创建自定义Lambda授权程序,用于验证cognito和IAM的令牌
- 在我的api中添加两个独立的资源,并从我的客户端调用与我的lambdas不同的端点。例如:
/external/route1
与cognito授权人
/internal/route1
与iam授权人
以下哪种方法更好?我想选项2更容易设置。有什么CDK的例子或构造可以帮助我吗?
您可以在整个堆栈中运行Cognito authorizers,然后检查每个内部服务的作用域。在网关上,Cognito授权者将验证令牌,并根据您指定的内容检查作用域。我不知道CDK,但如果你使用Pulumi Crosswalk,在APIGW中设置Cognito Authorizer真的很简单,比如这样:
const api = new awsx.apigateway.API(<NAME>, {
routes: [{
path: <PATH>,
method: <METHOD>,
eventHandler: <LAMBDA>,
authorizers: [awsx.apigateway.getCognitoAuthorizer({
providerARNs: [<USERPOOL>],
methodsToAuthorize: ['<RESOURCE>/<SCOPE>']
})]
}]
});