Amazon web services 如何保护APIGateway生成的URL?
我有一个无服务器后端,它与APIGateway和Lambda一起运行。以下是我的架构: 目前,任何拥有my APIGateway URL的人都可以查询或修改数据。如何保护URL,以便只有客户端(react应用程序)才能访问它。因此,我关心的是,任何人都可以在chrome控制台中打开网络选项卡,获取我的APIGateway的URL,并可以使用curl或postman。我想防止这种情况发生 我想到的解决方案是:Amazon web services 如何保护APIGateway生成的URL?,amazon-web-services,url,aws-lambda,backend,aws-api-gateway,Amazon Web Services,Url,Aws Lambda,Backend,Aws Api Gateway,我有一个无服务器后端,它与APIGateway和Lambda一起运行。以下是我的架构: 目前,任何拥有my APIGateway URL的人都可以查询或修改数据。如何保护URL,以便只有客户端(react应用程序)才能访问它。因此,我关心的是,任何人都可以在chrome控制台中打开网络选项卡,获取我的APIGateway的URL,并可以使用curl或postman。我想防止这种情况发生 我想到的解决方案是: 设置CORS,以便只有源站可以访问它。但是,我有一个不同的lambda调用这个URL。
谢谢阿山的回答。在我的例子中,我使用Auth0,因此自定义授权程序应该适用于我。我刚刚遇到了这一点,这基本上解释了APIGateway可能实现的所有授权和身份验证。我知道身份验证可以通过Cognito/Auth0实现,但我有一些简单的网站,它们有表单,其后端由APIGateway处理。我可以使用captcha防止抓取机器人的滥用,但一旦攻击者获得URL、头和请求参数,他就可以调用数百万次。我们可以做的一件事是拥有一个API键,但它是一个没有过期的静态字符串。一旦头球和他在一起,他就可以滥用头球。那么,你知道如何在APIGateway中防止这种情况吗。如果没有任何其他服务,除了AWS,我可以寻找?如果我能得到答案,我会很高兴的。目前API网关不支持私有URL,所以它将公开提供 要限制访问,您需要使用授权人使用IAM策略对请求进行身份验证和授权。目前有两种选择
- IAM授权人
- 授权人
由于您将S3用于react应用程序托管,因此可以通过在应用程序堆栈前使用和CloudFront进一步减少攻击面。API密钥可以添加到CloudFront头以转发到您的APIGateway源站,并且由于CloudFront和APIGateway通信是使用SSL进行的,因此几乎不可能有人找到API密钥。使用AWS WAF可以限制常见攻击的恶意访问。这包括基于速率的阻止,以限制某人重复调用API。用户是否需要登录React应用程序?如果是这样,您可以使用Cognito用户池作为API网关端的身份验证策略,那么没有有效令牌的请求将按预期被阻止。不同的lambda是什么意思?@kahouiong nice point。我使用Auth0,也许我应该用它搜索一些东西。有没有其他简单的方法来解决这个问题,比如添加一个api密钥?@naveenkerati此URL不仅会被客户端(react app)调用,还会被另一个调用此URL的Lambda调用。所以,我提到这一点,只是想告诉大家CORS在我的案例中不起作用Auth0提供了保护API网关的教程:谢谢您的回答。我对问题做了一点修改,请检查我更新的问题。如果你能给我你对这件事的看法,我会很高兴的。我认为WAF仅用于保护对网站的DDOS攻击。我对您将api密钥从cloudfront发送到api网关url的概念感兴趣。你能多解释一下,或者给我一个链接吗?因为我无法获得用于搜索api密钥从cloudfront传输到api网关的正确搜索词,您可以将x-api-key:{api_key}头添加到cloudfront源。检查以下链接。另外,请确保您的白名单标题,并且不要将主机标题发送给APIGateway behaviors。谢谢ashan,我会查看它。抱歉@ashan,问了太多问题。我认为,链接更适合前端。当浏览器请求该网页时,首先它将转到CloudFront,如果未命中,则转到S3。该链接帮助我们为上述情况设置自定义标题。但我无法理解您使用cloudFront的自定义头并将其传递给后端(APIGateway)的概念。