gpt4 book ai didi

amazon-web-services - 通过 VPC 端点的 AWS 私有(private) API 网关

转载 作者:行者123 更新时间:2023-12-04 15:17:24 27 4
gpt4 key购买 nike

首先,我对 AWS 很陌生。
这是我想要实现的目标:

  • 1 个 VPC
  • 2 子网
  • 1 个包含一些 EC2 实例的公共(public)
  • 1 个私有(private),包含一个 API 网关,只有 EC2 实例可以访问

  • 公共(public)子网运行良好,我可以访问 SSH 和 HTTP。
    私有(private)子网给我带来了一些麻烦。出于调试目的,我在其中启动了一个 EC2 实例。从“公共(public)实例”之一我可以ping“私有(private)实例”私有(private)IP(显然没有公共(public)IP)

    根据文档,我在我的私有(private)子网中创建了一个 VPC 端点,该端点创建了一个网络接口(interface),我在其中附加了一个安全组,该安全组允许来自整个 VPC CIDR 的 HTTP(S)(80 和 443)。端点类型是接口(interface)

    所以,现在我有一个带有端点的私有(private)子网,它允许 HTTP(S) 流量。该端点有一些(私有(private))DNS NAME 和(可能)还有一个私有(private) IP(找不到它)

    现在我想在一些 AWS lambda 前面添加一个 API 网关。
    我创建了上述 API 并作为端点类型 -> 私有(private)

    在此之后: Official Documentation
    将 API 网关“链接”到 VPC 端点的“唯一”方法是添加资源策略。所以我输入以下内容
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Deny",
    "Principal": "*",
    "Action": "execute-api:Invoke",
    "Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API GATEWAY ID>/*/*/<MY RESOURCE>",
    "Condition": {
    "StringNotEquals": {
    "aws:sourceVpce": "<VPC ENDPOINT ID>"
    }
    }
    },
    {
    "Effect": "Allow",
    "Principal": "*",
    "Action": "execute-api:Invoke",
    "Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API GATEWAY ID>/*/*/<MY RESOURCE>"
    }
    ]

    }

    为了完整起见,这里是我的 lambda (python3.6):
    from __future__ import division
    def lambda_handler(event, context):
    return {
    "statusCode":200,
    "headers": {"Content-Type": "application/json" },
    "body" : "It work!"
    }

    最后是问题:

    调用此 REST Api 的 URL 是什么!
    API 网关(在 lamdba 控制台中)告诉我:
    https://<API GATEWAY ID>.<REGION>.amazonaws.com/<MY STAGE>/<MY RESOURCE>

    行!让我们调用那个 url:APIURL
    我通过 ssh 连接到公有子网中的 EC2 实例并运行以下命令:
    curl https://$APIURL

    它起作用了:它输出:“它起作用了!”但该 APIURL 似乎不是来自 VPC 端点,所以我尝试以下操作(仍然来自公共(public)子网 EC2):
    curl https://vpce-XXXXXXX-XXXX.execute-api.REGION.vpce.amazonaws.com/<MY STAGE>/<MY RESOURCE>

    我得到: {"message":"Forbidden"}

    这似乎不对。在我测试时,我更改了以下 API 网关资源策略:
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Deny",
    "Principal": "*",
    "Action": "execute-api:Invoke",
    "Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API ID>/*/*/<MY RESOURCE>"
    }
    ]

    }

    什么都没有改变。 APIURL 仍在工作,VPCE Url 仍然给我禁止。

    我究竟做错了什么?我为这篇长文道歉。

    最佳答案

    在将 api 部署到阶段之前,策略角色更新不会生效。

    https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-create-attach.html

    If you update the resource policy after the API is created, you'll need to deploy the API to propagate the changes after you've attached the updated policy.

    关于amazon-web-services - 通过 VPC 端点的 AWS 私有(private) API 网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405937/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com