Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何保护APIGateway生成的URL?_Amazon Web Services_Url_Aws Lambda_Backend_Aws Api Gateway - Fatal编程技术网

Amazon web services 如何保护APIGateway生成的URL?

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。

我有一个无服务器后端,它与APIGatewayLambda一起运行。以下是我的架构:

目前,任何拥有my APIGateway URL的人都可以查询或修改数据。如何保护URL,以便只有客户端(react应用程序)才能访问它。因此,我关心的是,任何人都可以在chrome控制台中打开网络选项卡,获取我的APIGateway的URL,并可以使用curl或postman。我想防止这种情况发生

我想到的解决方案是:

  • 设置CORS,以便只有源站可以访问它。但是,我有一个不同的lambda调用这个URL。所以,CORS是行不通的
  • 我确信有一些方法与APIGateway本身有关。我没有从AWS文档中获得正确的搜索词。我还想知道,除了客户端(React应用程序)之外,防止访问后端URL的最佳做法是什么

    @Ashan回答后更新:
    谢谢阿山的回答。在我的例子中,我使用Auth0,因此自定义授权程序应该适用于我。我刚刚遇到了这一点,这基本上解释了APIGateway可能实现的所有授权和身份验证。我知道身份验证可以通过Cognito/Auth0实现,但我有一些简单的网站,它们有表单,其后端由APIGateway处理。我可以使用captcha防止抓取机器人的滥用,但一旦攻击者获得URL、头和请求参数,他就可以调用数百万次。我们可以做的一件事是拥有一个API键,但它是一个没有过期的静态字符串。一旦头球和他在一起,他就可以滥用头球。那么,你知道如何在APIGateway中防止这种情况吗。如果没有任何其他服务,除了AWS,我可以寻找?如果我能得到答案,我会很高兴的。

    目前API网关不支持私有URL,所以它将公开提供

    要限制访问,您需要使用授权人使用IAM策略对请求进行身份验证和授权。目前有两种选择

    • IAM授权人
    • 授权人
    如果身份验证流可以直接(AWS STS、IAM用户访问密钥或角色)或间接(使用AWS Cognito用户池或任何其他SSO提供程序)获得临时安全凭据,则可以使用IAM authorizer。在API网关端,不涉及任何代码,只需为每个API网关资源选择IAM复选框。您可以使用API网关SDK调用API网关请求,SDK将在设置身份验证头时处理繁重的提升

    如果您使用自己的身份验证机制,那么您可以编写一个单独的Lambda函数来验证令牌。可以在API网关上使用http侦听器名称指定此Lambda函数名,以访问自定义令牌来验证请求

    为了控制授权用户使用API,使用API密钥是目前AWS固有的唯一方法


    由于您将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)的概念。