Amazon web services 将公共api网关限制为特定IP

Amazon web services 将公共api网关限制为特定IP,amazon-web-services,amazon-s3,aws-api-gateway,Amazon Web Services,Amazon S3,Aws Api Gateway,我有一个api网关,它将被前端javascript应用程序访问。考虑到这一点,我们不能切实地限制对api密钥的访问(我不认为?),所以我真的希望通过IP地址来限制它……但我找不到一种方法来做到这一点。这是否可能,因为它实际上不是来自服务器 因此,该站点位于S3上,前面有Cloudfront。API网关接受两个键,这些键点击lambda脚本并保存到dynamodb。如果有人想这么做,他们可以用价值观把它扔掉。我只希望web应用程序能够与它对话。我仍然在学习很多AWS!我希望我可以使用盾牌或WAF,

我有一个api网关,它将被前端javascript应用程序访问。考虑到这一点,我们不能切实地限制对api密钥的访问(我不认为?),所以我真的希望通过IP地址来限制它……但我找不到一种方法来做到这一点。这是否可能,因为它实际上不是来自服务器


因此,该站点位于S3上,前面有Cloudfront。API网关接受两个键,这些键点击lambda脚本并保存到dynamodb。如果有人想这么做,他们可以用价值观把它扔掉。我只希望web应用程序能够与它对话。我仍然在学习很多AWS!我希望我可以使用盾牌或WAF,但这似乎是不可能的。有什么建议吗?

当然,在应用程序中硬编码任何凭据或API密钥不是一个好主意,大多数时候,您会发现一些文章解释如何使用Web联合身份提供程序通过API网关授权API调用(请参阅),但由于您使用的是CloudFront,因此还有另一种解决方法

您可以将API密钥(甚至IAM凭据)存储在S3上的单独文件中,但将其访问权限限制为特定IP地址,以便脚本可以获取密钥并进行API调用。所有其他IP地址都无法检索API密钥。因此,无法调用API方法

  • 要求您的用户仅通过CloudFront访问您的内容。请参阅:。这样,就无法使用S3URL检索API密钥
  • 指定要用于创建签名URL的AWS帐户。请参阅:
  • 使用具有长期到期日期的自定义策略创建已签名的URL。请参阅:。使用自定义策略(与固定策略相反)可以指定可以访问您的内容的用户的IP地址或IP地址范围。只要您想调用API方法,就会使用生成的签名URL
  • 在CloudFront中选择您的发行版,并添加一个带有指向API密钥文件的路径模式的行为,例如
    API key.json
    。确保行为的Restrict Viewer Access设置为Yes。通过将该行为置于列表的顶部,确保该行为优先于默认行为,即优先级为0
  • 请确保将默认缓存行为的限制查看者访问设置为,这将使除上述API密钥文件外的所有内容公开

  • 注意:如果您确定已签名的URL已安全存储,并且没有人可以访问它,则可以从自定义策略中删除IP地址要求,因为在这种情况下检查IP地址是多余的。当然,这将允许您改用固定策略。

    开箱即用。我喜欢。谢谢你。但是,我不确定这个或任何解决方案在这个设置中是否有效。因为应用程序是前端,所以服务器IP永远无法发送,我不认为?因为前端应用程序是静态的,客户端脚本会在本地机器上执行。因此,此上下文中的IP地址是您的IP,而不是S3/CloudFront。如果您所在的位置没有静态IP,您可以只保存已签名的URL,并配置应用程序将其作为参数接受,以便检索API密钥文件。我希望现在的做法是明确的。