我们在AWS API Gateway
中托管了一个API。这需要得到保护,为此,我们使用AWS Cognito User Pool
授予对移动客户端和Web应用程序的访问权限。
我们也希望将API的访问权限授予内部系统(在我们的情况下为AWS Lambdas
。
谁能解释为外部最终用户和内部微服务保护API网关资源的最佳方法吗?
感谢您的任何帮助。
外部用户授权
为了保护API网关,您可以结合使用aws cognito + API网关。
->然后为您需要授权的每个方法选择API->资源->,您必须将其附加到“方法请求”中,如下所示:
当您使用移动应用程序时,最好在您的应用程序中实施AWS Amplify,以便处理AWS Cognito身份验证。用户登录后,您可以检索一个令牌并将其用于每个API调用的Authorizer标头中,以确认该用户已登录并可以使用该API。
内部微服务
对于内部微服务,您只能使用IAM角色,并向这些角色授予访问权限以调用您的API网关。然后将角色附加到您的EC2实例或Lambda。如果要使用上述解决方案(Authorizer标头使用cognito令牌),IAM角色将无法直接调用API,因为它将被cognito授权者阻止。一种解决方法是仅通过内部使用IAM角色和用户API从内部微服务中直接调用您的lambda。另一种选择是将2个API连接到同一lambda,一个用于内部使用,一个用于外部。
一种不同的方法
我认为,在您看来,最干净的解决方案是不使用cognito授权者身份验证,而是在API中使用AWS_IAM作为授权方法并在cognito中创建一个组,将所有cognito用户包括到该组中,并附加一个IAM对小组的作用。这样,当一个Cognito用户登录时,将通过附加的IAM角色获取临时访问密钥,并且他可以调用您的API。同时,当您在内部将此角色附加到Lambda时,它们也将有权访问您的API。
为了实施此方法,您可以遵循:
关于一个有趣的网址How Amazon API Gateway Resource Policies Affect Authorization Workflow:
希望有帮助。如果需要进一步的解释,请告诉我。