将公共API网关限制为特定的IP

时间:2017-01-25 04:06:50

标签: amazon-web-services amazon-s3 aws-api-gateway

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

因此,该网站托管在具有前端Cloudfront的S3上。 API网关接受几个键,然后命中lambda脚本并保存到dynamodb。如果有人想要,他们可能只是通过价值观垃圾邮件。我只希望网络应用能够与它交谈。我还在学习很多AWS!我希望我可以使用Shield或WAF,但似乎不行。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

当然,在您的应用中对任何凭据或API密钥进行硬编码并不是一个好主意,大多数情况下,您会找到解释如何使用Web联合身份提供程序授权API调用的文章通过API网关(请参阅Setting Credentials in a Web Browser),但由于您使用的是CloudFront,因此还有另一种解决方法。

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

  1. 要求您的用户仅通过CloudFront访问您的内容。见:Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content这样,无法使用S3 URL
  2. 来检索API密钥。
  3. 指定要用于创建签名URL的AWS账户。请参阅:Specifying the AWS Accounts That Can Create Signed URLs and Signed Cookies (Trusted Signers)
  4. 使用具有长期到期日期的自定义政策创建签名网址。见:Creating a Signed URL Using a Custom Policy。使用自定义策略(与预设策略相对),您可以指定可以访问您的内容的用户的IP地址或IP地址范围。 只要您想调用API方法,就会使用此生成的签名网址。
  5. 在CloudFront中选择您的发布,并使用指向您的API密钥文件的路径模式添加行为,例如api-key.json。确保行为的限制查看者访问权限设置为确保此行为优先于默认行为,方法是将其置于列表的顶部,即优先级为0
  6. 确保默认缓存行为的限制查看者访问权限设置为,这将使您的所有内容公开为EXCEPT上面的API密钥文件。
  7. 注意:如果您确定您的签名网址已安全存储且没有人可以访问它,您可以从自定义策略中删除IP地址要求,因为检查这种情况下的IP地址。当然,这将允许您使用预制策略。