为外部最终用户和内部系统保护AWS API网关

问题描述 投票:1回答:1

我们在AWS API Gateway中托管了一个API。这需要得到保护,为此,我们使用AWS Cognito User Pool授予对移动客户端和Web应用程序的访问权限。

我们也希望将API的访问权限授予内部系统(在我们的情况下为AWS Lambdas

谁能解释为外部最终用户和内部微服务保护API网关资源的最佳方法吗?

感谢您的任何帮助。

amazon-web-services security oauth-2.0 aws-api-gateway amazon-cognito
1个回答
3
投票

外部用户授权

为了保护API网关,您可以结合使用aws cognito + API网关。

  1. 创建一个认知池来存储和验证您的用户
  2. 创建您的API网关
  3. 将API网关与Cognito集成:转到AWS控制台-> API网关->选择您的API->授权者->创建新授权者

    API authorizer - creation

->然后为您需要授权的每个方法选择API->资源->,您必须将其附加到“方法请求”中,如下所示:

API authorizer - Method Request integration

当您使用移动应用程序时,最好在您的应用程序中实施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。

为了实施此方法,您可以遵循:

  1. Control Access to an API with IAM Permissions
  2. Create cognito group and assign IAM role

关于一个有趣的网址How Amazon API Gateway Resource Policies Affect Authorization Workflow

希望有帮助。如果需要进一步的解释,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.