我有一个无服务器后端,可以使用 APIGateway 和 Lambda 进行操作。这是我的架构:
目前,拥有我的APIGateway网址的任何人都可以查询或改变数据。如何保护URL,以便只有客户端(react app)才能访问它。所以,我担心,任何人都可以打开Chrome控制台中的网络标签,获取我的APIGateway网址,并可以使用curl或邮递员使用它。我想阻止它。
我心中想到的解决方案:
我确信 APIGateway 本身有一些方法。我没有得到正确的搜索词来从AWS文档中获取它。我还想知道除了客户端(React App)之外阻止访问后端URL的最佳做法是什么
谢谢@Ashan的回答。就我而言,我使用Auth0,因此自定义授权者应该适合我。我刚刚遇到了这个https://www.youtube.com/watch?v=n4hsWVXCuVI,它几乎解释了APIGateway可能实现的所有授权和身份验证。我知道Cognito / Auth0可以进行身份验证,但我有一些简单的网站,有形式,后端由APIGateway处理。我可以使用验证码防止滥用机器人,但是一旦攻击者获得了URL,标题和请求参数,他就可以调用数百万次。有一件事,我们可以做的是拥有 API-Key ,但它是一个没有过期的静态字符串。一旦标题与他在一起,他就可以滥用它。那么,任何想法,如何在APIGateway中防止这种情况。如果没有我可以寻找的除AWS以外的任何其他服务?很高兴,如果我得到了答案。
答案 0 :(得分:2)
目前API Gateway不支持私人网址,因此它将公开发布。
要限制访问权限,您需要使用授权程序使用IAM策略对请求进行身份验证和授权。目前有两种选择。
如果您的身份验证流程可以直接(AWS STS,IAM用户访问密钥或角色)或间接(使用AWS Cognito Userpools或任何其他SSO提供程序)可以获得临时安全凭证,那么您可以使用IAM授权程序。从API网关方面,不涉及代码,而是为每个API网关资源选择IAM复选框。您可以使用API网关SDK来调用API网关请求,SDK将在设置身份验证标头时处理繁重的工作。
如果您使用自己的身份验证机制,则可以编写单独的Lambda函数来验证令牌。可以在API网关上使用http听众名称指定此Lambda函数名称,以访问自定义令牌以验证请求。
要控制授权消费者的API使用情况,目前使用API密钥是AWS的唯一原生方式。
由于您使用S3作为反应应用托管,因此您可以使用AWS WAF和CloudFront在应用程序堆栈前面进一步减少攻击面。可以将API密钥添加到CloudFront标头以转发到您的APIGateway源,并且由于使用SSL进行CloudFront和APIGateway通信,因此某人几乎无法找到API密钥。使用AWS WAF,您可以限制针对常见攻击的恶意访问。这包括基于速率的阻止,以限制某人重复调用API。