【问题标题】:Limiting public api gateway to specific IP将公共 api 网关限制为特定 IP
【发布时间】:2017-01-25 17:04:13
【问题描述】:

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

因此,该站点托管在 S3 上,Cloudfront 在前面。 API 网关接受几个键并命中 lambda 脚本并保存到 dynamodb。如果有人愿意,他们可以用价值来发送垃圾邮件。我只希望网络应用程序能够与之交谈。我仍在学习很多 AWS!我希望我可以使用 Shield 或 WAF,但似乎不行。有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    当然,在您的应用程序中硬编码任何凭据或 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这样,API 密钥无法使用 S3 URL 检索
    2. 指定要用于创建签名 URL 的 AWS 账户。请参阅:Specifying the AWS Accounts That Can Create Signed URLs and Signed Cookies (Trusted Signers)
    3. 使用具有长期到期日期的自定义策略创建签名 URL。见:Creating a Signed URL Using a Custom Policy。使用自定义策略(与固定策略相反)允许您指定可以访问您的内容的用户的 IP 地址或 IP 地址范围。 只要你想调用 API 方法,就会使用这个生成的签名 URL
    4. 在 CloudFront 中选择您的分配,并添加一个 Behavior 和一个指向您的 API 密钥文件的 Path Pattern,例如,api-key.json。确保该行为的Restrict Viewer Access 设置为Yes确保此行为优先于 默认 行为,方法是将其置于列表顶部,即优先级为 0
    5. 确保 Restrict Viewer Access 设置为 No 以实现 默认 缓存行为,这将使您的所有内容都公开,除了上面的 API 密钥文件。

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

    【讨论】:

    • 在盒子外面。我喜欢它。
    • 谢谢。但是,我实际上不确定此设置或任何解决方案是否可以在此设置中使用。因为应用程序是前端,所以服务器IP永远无法发送,我不认为?
    • 由于您的前端应用程序是静态的,因此客户端脚本会在您的本地计算机上执行。因此,此上下文中的 IP 地址是 YOUR IP,而不是 S3/CloudFront。如果您的位置没有静态 IP,您可以保存签名的 URL 并将您的应用程序配置为接受它作为参数,以便检索 API 密钥文件。我希望现在方法很明确。
    猜你喜欢
    • 2017-01-01
    • 2020-09-16
    • 2011-08-07
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多