我正在管理AWS服务器上的用户和他们的身份验证/授权过程(使用认知、API网关和IAM特性),我在grails应用程序中编写了微服务,这个应用程序是/将要托管在不同的服务器上,但是这些服务现在是公开的,因为我使用AWS认知来进行身份验证和授权,我希望这里只从AWS的API网关访问我的所有微服务。我读过关于客户端证书的文章,但没有找到合适的文档。
任何帮助都将不胜感激!谢谢!
发布于 2018-02-07 14:46:55
似乎您正在寻找一个API网关私有集成。
API网关私有集成使得在Amazon后面公开HTTP/HTTPS资源变得非常简单,以供VPC之外的客户访问。要将对私有VPC资源的访问扩展到VPC边界之外,您可以创建一个具有私有集成的API,用于开放访问或受控访问。您可以通过使用IAM权限、自定义授权程序或亚马逊认知用户池来实现这一点。 https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-private-integration.html
私有集成利用VPC的其他特性--网络负载均衡器和VPC链接--允许API网关访问到基于实例的服务的“后门”连接,这样它们根本不需要暴露在Internet上。流量从API网关拥有的(隐藏的) VPC流到您的VPC,通过一个可以访问北草坪会议大楼的虚拟专用通道。
发布于 2018-02-07 10:53:01
客户端证书是最好的方法。
您可以使用API生成SSL证书,并在后端使用其公钥来验证对后端系统的HTTP请求是否来自API。这允许您的HTTP后端控制和只接受来自Amazon网关的请求,即使后端是可公开访问的。
可以将它看作是转换SSL证书的典型角色(该证书目前验证您正在查看的HTTP响应来自StackOverflow.com)。
相反,您将使用此客户端证书在微服务的HTTP层中验证请求是否来自您的API网关。为此,生成一个API网关的客户端证书。然后,从同一个接口检索PEM编码的公钥,将您的HTTP配置为只接受使用此客户端证书加密的连接。。
本文似乎描述了如何配置Tomcat以接受/强制执行客户端证书:http://www.maximporges.com/2009/11/18/configuring-tomcat-ssl-clientserver-authentication/
<Connector
clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/Users/mporges/Desktop/tomcat-ssl/final/server.jks"
keystoreType="JKS" keystorePass="password"
truststoreFile="/Users/mporges/Desktop/tomcat-ssl/final/server.jks"
truststoreType="JKS" truststorePass="password"
SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS"
/>--一个不那么健壮的选项,而不是SSL客户端证书,可能是将“秘密”API密钥添加到来自API网关的所有请求中,例如作为请求头或查询参数。然后,您的微服务可以查找这个API密钥,作为请求来自您的API网关的指示,并且应该被信任/接受。
https://stackoverflow.com/questions/48660912
复制相似问题