【问题标题】:Best way to authorize gateway access to IAM and Cognito using CDK使用 CDK 授权网关访问 IAM 和 Cognito 的最佳方式
【发布时间】:2021-03-19 10:50:39
【问题描述】:
使用 CDK,我有一个我希望可以访问的网关 rest api lambda;
- 认知用户池的成员
- 我的堆栈中的其他 lambdas
据我所知,没有办法将 2 个授权方添加到同一个网关资源方法中?
所以这意味着我有两个选择;
- 创建自定义 Lambda authoriser,用于验证 cognito 和 IAM 的令牌
- 向我的 api 添加 2 个单独的资源,并从我的客户端与我的 lambda 调用不同的端点。例如:
/external/route1 与 cognito authorizer
/internal/route1 与 iam 授权人
这些方法中哪一种更好?我想选项 2 更容易设置。是否有任何 CDK 示例或结构可以帮助我解决这个问题?
【问题讨论】:
标签:
amazon-web-services
aws-lambda
amazon-cloudformation
aws-api-gateway
aws-cdk
【解决方案1】:
您可以在整个堆栈中运行 Cognito 授权器,然后检查每个内部服务的范围。在网关处,Cognito 授权者将验证令牌并根据您指定的内容检查范围。我不知道 CDK,但如果你使用 Pulumi Crosswalk,在 APIGW 中设置 Cognito Authorizers 真的很简单,就像这样:
const api = new awsx.apigateway.API(<NAME>, {
routes: [{
path: <PATH>,
method: <METHOD>,
eventHandler: <LAMBDA>,
authorizers: [awsx.apigateway.getCognitoAuthorizer({
providerARNs: [<USERPOOL>],
methodsToAuthorize: ['<RESOURCE>/<SCOPE>']
})]
}]
});