我遵循这一点:
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以在restapi端点之间创建私有链接。
基本上,我所做的步骤是:
已将(以前工作的)边缘api转换为专用api(通过aws api网关控制台)
使用此模板创建了一个包含2个公用子网和2个专用子网的专有网络:https://s3.amazonaws.com/computeblog-us-east-1/apigateway-private-endpoints/basevpc.template
已确认在专有网络上启用了dns命名和dns解析。
创建了一个连接到上面创建的专有网络的专有网络终结点。已启用专用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网关控制台,如果我启用了私有dns,我应该能够使用url调用api。
我误解了什么吗?成功调用api的正确方法是什么?
1条答案
按热度按时间s4n0splo1#
如图所示,资源策略应具有基于vpc端点而不是基于vpc的条件。尝试替换“aws:sourcevpc“:”vpce-{endpoint}“作者”aws:sourcevpce“:”vpce-{endpoint}“,然后再次部署。