当前位置: 首页 > news >正文

上海网站建设,分类广告做网站需要学什么

上海网站建设,分类广告,做网站需要学什么,微信制作软件,广州seo培训机构如果您在这里#xff0c;您已经知道什么是Apache Ranger 。 它是管理Hadoop框架中安全性的最流行#xff08;即使不是唯一#xff09;的方法。 它与Active Directory#xff0c;Kerberos和其他各种身份验证集成在一起#xff0c;但是我认为最有趣的功能是其授权支持。 作为… 如果您在这里您已经知道什么是Apache Ranger 。 它是管理Hadoop框架中安全性的最流行即使不是唯一的方法。 它与Active DirectoryKerberos和其他各种身份验证集成在一起但是我认为最有趣的功能是其授权支持。 作为Hadoop生态系统的一部分人们会对它对Hadoop生态系统中的大多数框架HiveHBaseHDFS等具有内建的支持通过插件感到惊讶但是我发现旋转它实际上非常容易自己的游侠自定义插件。 这篇文章将重点介绍Ranger插件中设计的简单性并展示为自己构建一个插件有多么容易。 作为示例我们将构建一个Ranger插件用于管理对使用Akka HTTP编写的简单HTTP服务的访问。 Note : You are not required to know about Akka HTTP to follow this post. All you needed to know is that Akka HTTP is just a way (albeit, a great way) to build HTTP services 这篇文章后面的代码分为两个存储库 Ranger HTTP插件 护林员托管的Akka HTTP服务 写一个插件 为了重申我们在这里试图做的事情我们将编写一个REST服务并让Ranger管理它的授权。 编写Ranger插件实际上是两部分的问题–编写服务器端组件和应用程序端组件 。 服务器端组件是驻留在Ranger端的代码/配置。 应用程序端组件是驻留在我们的REST服务中的代码该代码调用Ranger服务并检查应用程序的最终用户是否有权访问他所请求的资源。 我们将详细研究这两件事。 让我们尝试首先编写服务器端组件。 1.服务器端组件 作为启发如果我们打开Ranger代码库 我们可以看到一些内置插件。 如图所示在Ranger代码库中我们有许多插件我们想添加自己的插件。 放大上图插件上的服务器端组件将意味着编写一个 servicedef配置 继承RangerBaseService的类 因此实际上需要在服务器端实现“一个”配置和“一个”类。 1. SERVICEDEF配置 让我们看一下Hive的servicedef配置 我认为我们在这里谈论三件事 A.资源 在Hive示例中对于Kafka我们要保护的“资源”是数据库 表和列 对于HDFS我们要保护的“资源”是Kafka 主题 它将是文件路径 。 对于我们的HTTP服务我们试图保护的资源是REST slug 。 我们称之为“路径”。 resources: [{itemId: 1,name: path,type: path,level: 10,parent: ,mandatory: true,lookupSupported: true,recursiveSupported: true,excludesSupported: true,matcher: org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher,matcherOptions: {wildCard: true,ignoreCase: true},validationRegEx: ,validationMessage: ,uiHint: ,label: HTTP Path,description: HTTP Path} 访问类型 访问类型只是意味着用户需要的访问类型–例如对于Hive来说 select create delete就是示例。 对于HDFS read write execute是示例。 对于Kafka 发布并使用 。 对于我们的HTTP服务访问类型将为HTTP方法– GET POST DELETE 。 accessTypes: [{itemId: 1,name: get,label: get},{itemId: 2,name: post,label: post},{itemId: 3,name: delete,label: delete}] C.配置 我们知道Ranger可以管理多个Kakfa主题HDFS和HBase群集的安全性。 每个服务都将在不同的主机中运行并且对每个服务进行身份验证的方式将有所不同。 捕获此信息的地方将是此configs部分。 为了简化本示例我们不关心HTTP服务的身份验证。 因此我们只是捕获了可以ping通的URL以确保我们的服务已启动并正在运行。 configs: [{itemId: 1,name: services_list_url,type: string,subType: ,mandatory: true,validationRegEx: ,validationMessage: ,uiHint: ,label: HTTP URL for the services list eg. http://localhost:8080/services}] 2.继承RANGERBASESERVICE的类 为RangerBaseService插件实现服务器端组件的第二部分和最后一部分是编写一个继承RangerBaseService的类。 该类希望重写两个函数 validateConfig 请记住servicedef的configs部分。 显然我们将接受这些参数的值对吗 现在这个validateConfig是我们验证传递的值的地方。 对于我们的HTTP服务我们在配置中接受的只是services_list_url 。 现在该功能的实现将是使用一个简单的HTTP客户端ping并检查服务是否已启动并正在运行。 class RangerServiceHTTP extends RangerBaseService {override def validateConfig(): util.Map[String, AnyRef] {if (configs.containsKey(services_list_url)) {val serviceUp HttpServiceClient.isServiceUp(configs.get(services_list_url))if (serviceUp) retSuccessMap() else returnFailureMap()}else {returnFailureMap()}} lookupResource 这是一个有趣的功能。 考虑以下屏幕截图。 稍后当我们配置访问策略时我们将在其中配置资源 。 现在此功能用于查找和自动填充这些资源。 假设如果我们要输入HDFS资源或Hive表那么选项的数量就很多而且很容易打错字。 对于Hive此功能将连接到metastore并为我们填充表和数据库。 对于HTTP服务请记住service_list_url 该URL将仅返回逗号分隔的REST资源列表。 为了实现此功能我只是再次调用服务并标记响应。 override def lookupResource(resourceLookupContext: ResourceLookupContext): util.List[String] {val serviceUrl configs.get(services_list_url)HttpServiceClient.getServicePaths(serviceUrl).asJava} 现在作为代码的最后一步我们需要将RangerServiceHTTP这个类和servicedef配置联系在一起。 我们这样做的方法是通过在implClass属性中配置类。 还要注意我们正在将该Ranger插件的名称配置为httpservice {name: httpservice,label: HTTP Service,description: Rudimentary Ranger plugin to enforce security on top of a HTTP Service,guid: b8290b7f-6f69-44a9-89cc-06b6975ea676,implClass: com.arunma.ranger.http.RangerServiceHTTP, * * version: 1,isEnabled: 1,resources: [{itemId: 1,name: path,...... 完整的配置如下所示 。 还有两个较小的管理步骤 为了确保我们的类在Ranger类路径上可用我们将其捆绑到一个jar中并将其放在RANGER_HOME/ews/webapp/WEB-INF/classes/ranger-plugins/httpservice 。 文件夹httpservice的名称与servicedef配置中声明的名称相对应。 将我们的配置上传到Ranger中以便我们的服务在Ranger UI中可见。 curl -u admin:admin -X POST -H Accept: application/json -H Content-Type: application/json --data http-ranger.json http://localhost:6080/service/plugins/definitions 重新启动Ranger服务器。 耶 现在我们在Ranger UI上看到HTTPSERVICE 2.应用程序侧组件 在应用程序方面事情再简单不过了。 为了使用Ranger中使用的策略应用程序需要做的就是调用Ranger并检查用户是否有权访问资源。 该函数从字面上称为isAccessAllowed 。 以下代码几乎是需要在应用程序端编写的所有代码 package com.arunma.rangerimport org.apache.ranger.plugin.audit.RangerDefaultAuditHandler import org.apache.ranger.plugin.policyengine.{RangerAccessRequestImpl, RangerAccessResourceImpl} import org.apache.ranger.plugin.service.RangerBasePluginimport scala.collection.JavaConverters._object RangerAuthorizer {lazy val plugin {val plg new RangerBasePlugin(httpservice, httpservice)plg.setResultProcessor(new RangerDefaultAuditHandler)plg.init()plg}def authorize(path: String, accessType: String, userName: String, userGroups: Set[String] Set(public)): Boolean {val resource new RangerAccessResourceImpl()resource.setValue(path, path)val request new RangerAccessRequestImpl(resource, accessType, userName, userGroups.asJava)val result plugin.isAccessAllowed(request)result ! null result.getIsAllowed} } RangerBasePlugin(httpservice, httpservice)和init()函数用作我们进入Ranger服务的入口。 注意RangerBasePlugin的httpservice参数。 该名称必须与servicedef配置中提供的名称匹配。 authorize函数是拦截器在客户端被授予对REST资源的访问权之前调用的函数。 该函数只是构造一个AccessRequest – RangerAccessRequestImpl并调用插件的isAccessAllowed函数该函数返回Boolean 。 拦截器指令 authorize调用isRangerAuthorized函数然后在RangerAuthorizer中调用authorize函数。 def isRangerAuthorized(path: String, httpMethod: String, userName: String): Boolean RangerAuthorizer.authorize(path, httpMethod.toLowerCase, userName) lazy val userRoutes: Route headerValueByName(username) { userName extractMethod { method pathPrefix(users) {extractMatchedPath { matchedPath authorize(isRangerAuthorized(matchedPath.toString(), method.name(), userName)) {concat(pathEnd {concat(get {val users: Future[Users] (userRegistryActor ? GetUsers).mapTo[Users]complete(users) 我们需要做的最后一件事是将audit和security xml复制到我们的类路径中。 这些就像Ranger的站点xmls 。 对于本练习我们将xmls放置在resources目录中。 audit xml和security xml可以从游侠代码库复制。 如果您正在运行本地管理员则审核XML可以保持原样但是需要为我们的服务更改security xml。 实现此目的的最简单方法是从护林员代码库中复制示例xml然后开始将服务替换为httpservice如下所示 还有一个属性需要特别注意。 这就是名为ranger.plugin.httpservice.service.name的属性。 此属性的值必须与您在Ranger UI中使用的服务名称相同。 propertynameranger.plugin.httpservice.service.name/namevalueMyService/valuedescriptionName of the Ranger service containing policies for this httpservice instance/description /property 试乘 这将涉及两个步骤 配置Ranger策略 验证您的HTTP服务 1.配置范围政策 2.验证您的HTTP服务 让我们通过启动HTTP服务来验证策略-启动com.arunma.RangerManagedHttpServer 策略配置的用户 curl -X GET -H username:arunma http://localhost:8080/users 无效的用户 curl -X GET -H username:nobody http://localhost:8080/users 摘要 Ranger插件有两个部分–服务器端组件和客户端组件。 对于服务器端组件我们创建了一个servicedeef json和一个继承了RangerBaseService的类。 对于客户端组件我们只调用了plugin的isAccessAllowed函数。 您现在可以使用Ranger授权的HTTP服务。 谢谢阅读。 快乐黑客 翻译自: https://www.javacodegeeks.com/2019/05/beautiful-simplicity-apache-ranger-plugin.html
http://www.pierceye.com/news/568714/

相关文章:

  • 全球优秀企业网站做原型的素材网站
  • 单页面营销网站怎么用polylang做网站
  • 网站开发入那个科目中国网站建设哪家公司好
  • 网站流量提升方案软件公司名称大全查询
  • 怎么做淘客专属网站济南公司网站推广优化最大的
  • 苏州网站建设极简幕枫织梦模板网站源码
  • 青岛网站设计定制2023传奇手游排行榜
  • 商务酒店网站建设淮南网备案查询
  • 菏泽炫佑网站建设中国城乡建设部网站
  • 网站开发与移动互联自助建站的优点与缺点
  • 公司做网站的好处上海网站设计找哪家
  • 个人如果做网站赚钱吗WordPress 聊天小工具
  • 商城网站建设哪家便宜网络架构师和网络工程师区别
  • p2p网站建设 深圳广东手机网站建设品牌
  • 亚马逊网上商城是正品吗长沙seo计费管理
  • 东莞品牌网站建设多少钱网站设计有限公司怎么样
  • dedecms新网站 上传到万网的空间浦口区网站建站公司
  • 龙岗在线网站建设西安房产信息网
  • 如何建立公司企业网站大朗做网站的
  • 怎么做整蛊网站wordpress系统的特点
  • php网站开发视频教程浙江建设局网站
  • 温州seo顾问温州网站优化排名推广
  • qq空间怎么做网站wordpress 分类名
  • 外贸国际网站推广重庆律师网站
  • 唐山建设信息网站wordpress 首页显示产品
  • 建设网站的公司哪个济南兴田德润怎么联系重庆短视频培训
  • 营销型网站的建设方案企业网页设计作品分析
  • 网站建设的费用报价做网站销售这几天你有什么想法
  • 做箱包关注哪个网站类似建站之星网站
  • 口碑好网站建设报价wordpress 微博侧边栏