【问题标题】:UnknownHostException when trying to connect to a AWS Gateway Private API尝试连接到 AWS Gateway 私有 API 时出现 UnknownHostException
【发布时间】:2021-04-13 18:12:57
【问题描述】:

我跟着这个:

到 tee 以在我的 REST API 端点之间创建私有链接。

基本上,我已经完成的步骤:

  • 将(以前工作的)Edge API 转换为私有 API(通过 AWS API Gateway 控制台)

  • 使用此模板创建了一个具有 2 个公有子网和 2 个私有子网的 VPC:https://s3.amazonaws.com/computeblog-us-east-1/apigateway-private-endpoints/BaseVPC.template

  • 确认在 VPC 上启用了 DNS 命名和 DNS 解析。

  • 创建了一个附加到上面创建的 VPC 的 VPC 终端节点。私有 DNS 已启用。

  • 将此资源策略添加到 API,然后重新部署:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:{aws-account-id}:{rest-api-id}/*/*/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "vpce-{endpoint}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:{aws-account-id}:{rest-api-id}/*/*/*"
        }
    ]
}

然后我使用 AWS SDK 创建的 Java 客户端:https://aws.amazon.com/sdk-for-java/ 调用 API,并遇到此错误:

com.amazonaws.SdkClientException: Unable to execute HTTP request: {rest-api-id}.execute-api.us-west-2.amazonaws.com

...

Caused by: java.net.UnknownHostException: {rest-api-id}.execute-api.us-west-2.amazonaws.com

当我使用 Postman 时也发生了同样的问题。

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-api-test-invoke-url.html 和 API Gateway 控制台所示,如果我启用了私有 DNS,我应该能够使用 url 调用 API。

我是不是误会了什么?能够成功调用 API 的正确方法是什么?

【问题讨论】:

  • 你能展示一下你是如何调用 api 的吗?
  • 您在哪里运行您的 Java 客户端/邮递员,如果您从本地计算机运行,您是否启用了私有连接?您只是在日志中显示 {rest-api-id} 作为示例正确的实际日志有 abcsomething.execute-api.us-west-2.. ,对吗?
  • 如果这是私有 API,则必须从 VPC 内部调用,例如在 ec2 实例上。您能否确认并说明您是如何尝试调用 API 的?
  • @Marcin 你是对的,我相信这可能是问题所在,因为我现在没有连接到任何 EC2 实例。使用教程中的当前设置,我如何确定要连接到哪个 E2 实例?更多详细信息我去EC2页面上的VPC和VPCE在同一个AWS账户上,当前运行的实例数为0。只有一个安全组:EndpointSG sg-{number},连接正确吗?跨度>
  • 从基本的 t2.micro 开始,如果您确实可以正确调用您的 api,只需使用 curl 进行测试。然后你可以从那里了解如何使用邮递员(例如 ssh 隧道)。

标签: java amazon-web-services dns api-gateway vpc


【解决方案1】:

资源策略应该具有基于 VPC 端点而不是 VPC 的条件,如图所示。尝试将 "aws:sourceVpc": "vpce-{endpoint}" 替换为 "aws:sourceVpce": "vpce-{endpoint}",然后再次部署。

【讨论】:

  • 对不起,我有一个错字。资源策略确实在:"aws:sourceVpce": "vpce-{endpoint}"下,问题依然存在。
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多