【问题标题】:Private API Gateway with Serverless Framework具有无服务器框架的私有 API 网关
【发布时间】:2020-08-25 03:59:52
【问题描述】:

我在 AWS VPC(10.0.0.0/16) 中有我的内部网络,我想在这个私有网络中创建 AWS API 网关,因此没有公共主机名/ips。

这是我尝试过的

service: apollo-lambda1
provider:
  name: aws
  runtime: nodejs8.10
  role: arn:aws:iam::xxx:role/admin-api-lambda-role
  region: ap-southeast-1
  private: true
  vpc:
    securityGroupIds:
      - sg-xxxxx
    subnetIds:
      - subnet-xxx

sg-xxxxx 是一个安全组,只允许来自 10.0.0.0/16 的 ips。它没有帮助。

我也尝试添加,但它仍然向世界公开了一个公共 IP...

resourcePolicy:
    - Effect: Allow
      Principal: "*"
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
      Condition:
        IpAddress:
          aws:SourceIp:
            - "10.0.0.0/16"

UPD:尝试了这种组合,但没有成功。现在无法解析 dns 名称

endpointType: PRIVATE
  resourcePolicy:
    - Effect: Allow
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
      Condition:
        IpAddress:
          aws:SourceIp:
            - some ip here

【问题讨论】:

    标签: amazon-web-services aws-api-gateway serverless-framework


    【解决方案1】:

    我知道这个问题被问到已经有一段时间了,但我还是想写一个答案。

    1. 安全组永远不会帮助您阻止 API 的外部访问。
    2. 如果您想阻止外部访问,您可以通过 ip 阻止资源策略,或在 API GW 之上创建 WAF。
    3. 您还可以使用带限制的 PRIVATE 端点和 vpc 端点。

    使用资源策略:

    provider:
      name: aws
      runtime: nodejs12.x
      region: us-west-2
      stage: dev
      resourcePolicy:
        - Effect: Allow
          Principal: "*"
          Action: execute-api:Invoke
          Resource:
            - execute-api:/*/*/*
          Condition:
            IpAddress:
              aws:SourceIp:
                - "10.0.0.0/16"
    

    使用具有资源策略和 VPC 端点的私有端点

    provider:
      name: aws
      runtime: nodejs12.x
      region: us-west-2
      stage: dev
      endpointType: PRIVATE
      vpcEndpointIds:
        - vpce-XXXXX
      resourcePolicy:
        - Effect: Allow
          Principal: "*"
          Action: execute-api:Invoke
          Resource:
            - execute-api:/*/*/*
          Condition:
            IpAddress:
              aws:SourceIp:
                - "10.0.0.0/16"
    

    在编写此解决方案时,我使用的是第一个带有额外 IP 地址的示例,因为这是我在没有 QA 团队的情况下测试来自固定 IP 地址的 endoints 的解决方案。我希望这个解决方案对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2019-10-07
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2021-05-11
      相关资源
      最近更新 更多