【发布时间】:2021-04-13 18:12:57
【问题描述】:
我跟着这个:
- https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
- https://aws.amazon.com/blogs/compute/introducing-amazon-api-gateway-private-endpoints/教程
到 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