我们有一个托管在AWS API Gateway
中的API。这需要得到保护,为此,我们使用AWS Cognito User Pool
来访问移动客户端和web应用程序。
我们还想让内部系统(在我们的例子中是AWS Lambdas
)访问API。
有人能解释为外部终端用户以及内部微服务保护API网关资源的最佳方法吗?
任何帮助都是非常感谢的。
发布于 2019-12-10 03:41:50
外部用户身份验证
为了确保API的安全,可以将AWS认知+ API 组合起来。
请转至:
AWS控制台-> API网关->选择API ->授权器->创建新授权器
然后,为需要授权的每个方法选择API ->参考资料->,您必须将其附加到方法请求中,如下所示:
当您使用移动应用程序时,最好在应用程序中实现AWS放大,以便处理AWS认知身份验证。在用户登录后,您可以为每个API调用检索一个令牌并在Authorizer中使用它,以确认用户是否已登录并可以使用该API。
内部微卫星
对于内部微服务,您可以只使用IAM角色,并授予这些角色访问权来调用您的API。然后将角色附加到EC2实例或Lambdas。
如果您想要使用上面的解决方案(授权程序头,使用认知令牌),那么在组合中,与的角色将不工作直接调用API,因为它将被认知授权程序阻止。
的解决方案是,将通过IAM角色和用户API直接从内部微服务调用lambda以供外部使用。另一种选择是将2个API连接到相同的lambda,一个用于内部使用,另一个用于外部。
一种不同的方法
我认为,在您的情况下,最干净的解决方案是不使用认知授权器身份验证,而是在API中使用AWS_IAM作为授权方法,并在AWS 中创建一个组,将所有认知用户都包含到这个组中,并向该组附加一个IAM角色。通过这样做,当一个认知用户登录时,将通过附加的IAM角色获得临时访问密钥,他可以调用您的API。同时,当您在内部将此角色附加到lambda时,它们也将访问您的API。
为了实现这一方法,您可以遵循:
一个关于Amazon网关资源策略对授权工作流的影响的有趣的网址
https://stackoverflow.com/questions/59263340
复制相似问题