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