当前位置: 首页 > 知识库问答 >
问题:

通过VPCendpoint的AWS专用API网关

徐晔
2023-03-14

首先,我对AWS很陌生。以下是我想要达到的目标:

    null

因此,现在我有了一个专用子网,其endpoint允许HTTP(S)流量。该endpoint具有某些(专用)DNS名称,(可能)也具有专用IP(找不到)

现在我想要添加一个API网关来前面的一些AWS lambda。我创建所述API,并将其作为endpoint类型->Private

下面是:正式文档将API网关“链接”到VPCendpoint的“唯一”方法是添加资源策略。所以我输入以下内容

{
"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>

好的!让我们对公共子网中的EC2实例调用该URL:APIURL I ssh,并运行以下操作:

curl https://$APIURL
curl https://vpce-XXXXXXX-XXXX.execute-api.REGION.vpce.amazonaws.com/<MY STAGE>/<MY RESOURCE>
{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Deny",
        "Principal": "*",
        "Action": "execute-api:Invoke",
        "Resource": "arn:aws:execute-api:<REGION>:<MY ID>:<API ID>/*/*/<MY RESOURCE>"
    }
]

我做错了什么?很抱歉我发了这么长的帖子。

共有1个答案

仲孙焱
2023-03-14

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

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

如果在API创建后更新资源策略,则需要部署API以在附加更新的策略后传播更改。

 类似资料:
  • 我的VPC中有Public和Pvt子网。我在Pvt子网上有一些运行在EC2上的服务,需要通过外部/移动资源访问。我如何做到这一点-是VPCLink和NLB的方式来做到这一点,还是任何其他方式,创建一些访问点在公共子网(??)。Lambda似乎是答案(现在AWS中几乎所有的东西)--甚至不确定那种访问对于Pvt子网中的资源是如何工作的。 同样,同一个Pvt子网可以访问外部资源(在AWS之外)-我如何

  • 如何配置API将请求路由到NLB上的特定目标组?在VPC链接的集成点中,我只看到指定VPC链接和endpoint的选项。如果是endpoint,要路由到特定目标组的endpointURL的格式是什么? 还是我必须为每个微服务创建一个NLB?

  • AWS文件说, 私有API不支持自定义域名。 来源:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html 这到底是什么意思?我可以将自定义域名附加到私有API。 然而,我面临着SSL证书的问题。

  • 我正在尝试设置一个专用AWS API网关,并从笔记本电脑连接到它。笔记本电脑驻留在一个直接连接到专用VPC的网络中。为此,我使用AWS提供的玩具示例“PetStore”API。 根据本指南: 为我的VPC建立了一个API网关服务endpoint(禁用私有DNS) 假设: AWS账号:123456789012 要调用API,我调用以下cURL命令: 这就是结果: 这里有一个我不确定它是从哪里来的。而

  • 换句话说,我的API网关将使用API网关中定义的相同的资源处理对的请求和对的另一个请求,而不必在API网关中定义和资源。

  • 我目前在lambda函数和API网关方面遇到了问题。我已经在API网关中启用了代理集成,以便返回Lambda函数的状态代码。现在我有一个问题,调用根本没有执行。错误图片 如果我测试Lambda,一切正常,数据库中的条目将被执行。不通过API网关。 我有什么问题? 非常感谢你的帮助! 测验 编辑: 我将此作为IAM政策添加: 但它仍然带来这个错误: