【问题标题】:AWS: Resource policy for an AWS HTTPS API Gateway to restirct access to specific IP'sAWS:AWS HTTPS API 网关的资源策略,用于限制对特定 IP 的访问
【发布时间】:2021-04-23 14:46:15
【问题描述】:

最近 AWS 发布了基于 HTTPS 的 API 网关(不是 REST 网关)。我们使用 Terraform 来管理 AWS 资源,并且我们有一个创建 AWS HTTPS API 网关资源的服务,存在安全问题,我们允许任何 IP/系统调用 API,因此我们计划添加一个策略(资源政策)限制对特定 IP 的访问。 REST API 网关很容易实现这一点,因为我们有 aws_api_gateway_rest_api_policy 资源来通过 Terraform 创建策略并将其附加到网关,但对于 HTTPS API 网关却无法实现。我们使用 aws_apigatewayv2_api 创建 HTTPS 网关资源,但找不到资源来附加策略,或者在创建网关本身时它也没有指定策略的选项。非常感谢您了解如何将策略附加到基于 HTTPS 的 API 的任何帮助。谢谢。

【问题讨论】:

  • 嗨。我注意到您有很多带有答案的问题,但没有一个答案被接受。接受有用的答案是一种很好的做法,因为它们限制了重复问题的数量,从unanswered 列表中删除问题并向未来的读者表明给出的答案实际上对给定的问题有帮助。
  • 当然,作为练习会这样做。谢谢。
  • 我不完全了解您的用例,但听起来 CORS 可能适用于您想要实现的目标?见docs.aws.amazon.com/apigateway/latest/developerguide/…

标签: amazon-web-services terraform aws-api-gateway terraform-provider-aws


【解决方案1】:

HTTP API 中不支持资源策略。来自docs

因此,如果您想使用 API 资源策略将 API 限制为某些特定 IP 地址,则必须使用 REST API。

【讨论】:

  • 感谢 Marcin 的回复。你的意思是使用 REST 而不是 HTTPS 来限制基于 IP 的,对吧?
  • 是的,当然。只是想确定一下。
【解决方案2】:

虽然不支持资源策略,但这可以通过自定义授权方 Lambda 函数来完成。我相信以后会有更好的方法,但现在你可以这样做:

module.exports.authorizer = async(event, context) => {
     
  let response = {
      "isAuthorized": false,
  };

  const allowedIps = ["x.x.x.x"];
  
  if (allowedIps.includes(event.headers["x-forwarded-for"])) {
      response.isAuthorized = true;
  }
  
  console.log(response);
  
  return response;
}

我意识到这不是最优雅的解决方案,但它会起作用。这是假设一个简单的授权方响应和有效载荷格式版本 2.0。您的身份来源将是 $request.header.x-forwarded-for。我提到这一点是因为如果该标头不存在,所有请求都会被拒绝。如果您在本地进行测试,则需要将该标头添加到您的 curl/insomnia/postman 调用中。如果你愿意,你可以很容易地增加代码来处理 CIDRs

AWS Lambda Authorizer Documentation

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 2021-02-15
    • 2020-11-21
    • 2020-10-06
    • 2018-10-03
    • 2012-05-18
    • 2018-06-23
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多