【发布时间】:2016-04-27 15:16:43
【问题描述】:
我正在尝试做一个 POC,其中我需要通过 Apache Knox 保护我的集群,而我自己开发的 rest API 将位于 Knox 后面。用户身份验证应如何与 Knox Ranger 一起使用,我将如何保护我的数据访问权限?
【问题讨论】:
标签: spring hadoop spring-security hortonworks-data-platform
我正在尝试做一个 POC,其中我需要通过 Apache Knox 保护我的集群,而我自己开发的 rest API 将位于 Knox 后面。用户身份验证应如何与 Knox Ranger 一起使用,我将如何保护我的数据访问权限?
【问题讨论】:
标签: spring hadoop spring-security hortonworks-data-platform
让我们从 service.xml 文件开始。它可能看起来应该像下面更简单的版本。如果您需要将特定规则应用于请求或响应的特定部分,则只需要更复杂的表单。请注意,理想情况下只需要一条路径,但 Knox 中的 ** 表示一个或多个路径级别(不是零或更多)。因此,如果没有第一条路由,Knox 不会向服务的根 /Test_Web_App 路径发送请求。
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/?**">
<route path="/Test_Web_App/**?**">
</routes>
</service>
如果您想非常具体,这将是等效的。这里<rewrite apply=""> 标识 rewrite.xml 中的特定命名规则,<rewrite to=""> 标识应该应用该规则的请求和/或响应的哪一部分。
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App" to="request.url"/>
</route>
<route path="/Test_Web_App/**?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/query" to="request.url"/>
</route>
</routes>
</service>
现在是 rewrite.xml。你的非常接近。我添加的只是一个名称(即路径),导致{path=**} 成为第二条规则的模式和模板。在<rule pattern=""> 中,这用于为从匹配模式中提取的值命名。在<rewrite template=""> 中,该名称用于使用从匹配模式中提取的命名值填充正在创建的部分 URL。
<rules>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
</rule>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{path=**}?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]/{path=**}?{**}"/>
</rule>
</rules>
【讨论】:
您需要为 Apache Knox 提供自定义 REST API 的服务定义。这将允许诺克斯:
请参阅开发人员指南中的http://knox.apache.org/books/knox-0-7-0/dev-guide.html#Service+Definition+Files,了解如何提供服务定义。
一旦服务定义到位,您只需在 Knox 拓扑中添加一个<service> 元素,以指示实际基于 Spring 的服务正在运行的位置。应该是这样的:
<service>
<role>SERVICE</role>
<url>http://url.to.your.service/v1/...</url>
</service>
这也在开发人员指南的同一部分中进行了描述。 您还可能会发现用户指南对拓扑中的其他服务声明示例很有帮助。
您可以查看这些示例并将它们与这些现有服务的服务定义文件进行比较,以了解服务角色的映射方式。这将帮助您为自己的服务做同样的事情。
有关身份验证的详细信息,请参阅用户指南中的http://knox.apache.org/books/knox-0-7-0/user-guide.html#Authentication,了解有关设置基于 LDAP 的身份验证的说明。您可能也会感兴趣的其他身份验证和联合提供程序实现。您也可以在用户指南中找到它们。
您也可以随意参与 Apache Knox 的开发人员或用户电子邮件列表。
【讨论】:
这些是我的 2 个 xml 文件,如果我有任何错误或我需要做什么,请查看它 **重写.xml
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
</rule>
<rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{**}?{**}">
<rewrite template="{$serviceUrl[TEST_WEB_APP]/{**}?{**}"/>
</rule>
</rules>
**service.xml
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
<routes>
<route path="/Test_Web_App/**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/**" to="response.body" />
</route>
<route path="/Test_Web_App/**?**">
<rewrite apply="TEST_WEB_APP/Test_Web_App/**?**" to="response.body"/>
</routes>
</service>
【讨论】: