建立公司网站需要什么,海澜之家网站建设水平,如何建设电影会员网站,wordpress集中页面地址需求背景简介 系统安全通常包括两个核心主题#xff1a;身份验证和授权。一个解决“用户是谁”的问题#xff0c;另一个解决“用户允许执行什么操作”的问题。在大数据领域#xff0c;Apache Ranger 是最受欢迎的授权选择之一#xff0c;它支持所有主流大数据组件#xff… 需求背景简介 系统安全通常包括两个核心主题身份验证和授权。一个解决“用户是谁”的问题另一个解决“用户允许执行什么操作”的问题。在大数据领域Apache Ranger 是最受欢迎的授权选择之一它支持所有主流大数据组件包括 HDFS、 Hive、HBase、 Trino 等组件。 虽然 Hive 在设计中通过 Linux 的用户和用户组来控制用户权限但集成在 Amazon EMR 中的 Hive 组件默认权限管理是 None即不设置权限控制任何用户名都可以通过 Hive 用户对 Hive 组件中的数据进行操作在多用户和多任务的情况下就会造成数据管理的安全隐患。因此在基于 Amazon EMR 构建的大数据环境中客户往往需要集成权限控制工具实现细化到数据表级别甚至字段级别的权限管理。 本文介绍了在 Amazon EMR 中通过部署 Apache Ranger 和 Simple AD 服务对 Amazon EMR 中的数据进行 Hive 表级别的权限管理。 系统方案架构图 主要服务和组件简介 Amazon EMR Amazon EMR以前称为 Amazon Elastic MapReduce是一个托管集群平台可简化在上运行大数据框架如 Apache Hadoop 和 Apache Spark的过程亚马逊云科技以处理和分析海量数据。使用这些框架和相关的开源项目您可以处理用于分析目的的数据和业务情报工作负载。 集群是 Amazon EMR 的核心组件。集群是 Amazon Elastic Compute CloudAmazon EC2实例的集合。集群中的每个实例称作节点。Amazon EMR 中的节点类型有 主节点该节点管理集群它通过运行软件组件来协调在其它节点之间分配数据和任务的过程以便进行处理。主节点跟踪任务的状态并监控集群的运行状况。每个集群都有一个主节点并且可以仅使用主节点创建单节点集群。核心节点该节点具有运行任务并在集群上的 Hadoop Distributed File SystemHDFS中存储数据的软件组件。多节点集群至少具有一个核心节点。任务节点该节点具有仅运行任务但不在 HDFS 中存储数据的软件组件。 Simple Active Directory Simple AD 目录是由 Samba 4 Active directory 兼容服务器提供支持的托管目录。它提供了 Microsoft AD 提供的功能的子集并支持常用功能如用户帐户、组成员身份、加入到运行 Linux 和 Windows 的域的 Amazon EC2 实例以及基于 Kerberos 的单点登录SSO和组策略。这使得管理运行 Linux 和 Windows 的 EC2 实例以及在亚马逊云平台中部署应用程序变得更加容易。 同时 Simple AD 的成本也非常低廉在大多数情况下Simple AD 是成本最低的选择如果用户数不超过 5000并且不需要更高级的 Microsoft Active Directory 域功能Simple AD 是这种场景下的最佳选择。 Apache Ranger Apache Ranger 是一个框架可跨 Hadoop 平台启用、监控和管理全面的数据安全。Apache Ranger 具有以下功能 集中安全管理以在中央 UI 或使用 REST API 管理所有与安全相关的任务使用 Hadoop 组件或工具执行特定操作或操作的精细授权通过集中管理工具进行管理跨所有 Hadoop 组件的标准化授权方法增强了对各种授权方法的支持在 Hadoop 的所有组件中对用户访问和管理操作安全相关进行集中审计。 Apache Ranger 使用两个关键组件进行授权 Apache Ranger 策略管理服务器 – 此服务器允许您定义 Hadoop 应用程序的授权策略。与 Amazon EMR 集成时您可以为 Apache Spark 和 Hive 定义和实施策略以访问 Hive Metastore并访问 Amazon S3 数据 EMR 文件系统。您可以设置新的或使用现有的 Apache Ranger 策略管理服务器与 Amazon EMR 集成。 Apache Ranger 插件 – 此插件根据 ApacheRanger 策略管理服务器中定义的授权策略验证用户的访问权限。Amazon EMR 会为在 Apache Ranger 配置中选择的每个 Hadoop 应用程序自动安装和配置 Apache Ranger 插件。 部署步骤 01 部署 Simple AD 服务 创建 Simple AD 服务比较简单可以在亚马逊云科技控制台中选择 Directory Service 服务点击“设置目录”。 在“目录类型”中选择创建“Simple AD” 目录大小选择“小型”即可为目录设置一个 DNS 域名例如 awsbuilder.cn。需要注意这个域名在后续 Apache Ranger 的集成配置中需要作为 Search Base 使用LDAP 的 Search Base 格式是“dcawsbuilder,dccn”User Search Base 的格式是“cnusers,dcawsbuilder,dccn”。 继续设置 AD 域管理员密码 最后选择 Simple AD 所在的 VPC 和子网就可以完成 Simple AD 的创建。 创建完成后可以看到 Simple AD 的 VPC 网络和 IP 地址通过 AD 域控制器或者 LDAP 客户端工具对用户和组进行管理。如何管理 Simple AD 中的用户目录可以参考官方文档本文中不再赘述。 官方文档https://docs.aws.amazon.com/zh_cn/directoryservice/latest/admin-guide/simple_ad_how_to.html 02 部署 Apache Ranger Apache Ranger 的官方网站是 https://ranger.apache.org/最新的版本是 2.4.0可以从 https://ranger.apache.org/download.html 获取最新版本的下载。详细的安装手册可以参考 https://cwiki.apache.org/confluence/display/RANGER/RunningApacheRanger-%5BFromsource%5Dinminutes。 Apache Ranger 是一个开源软件我们需要启动一台 EC2 进行安装部署。同时 Apache Ranger 没有直接的安装包官网下载源码后需要进行编译。具体安装部署的步骤如下 1准备工作在 EC2 中用 root 帐号安装 Java JDK、Maven、git、gcc 等工具软件 sudo su - root
yum -y install java-11* git gcc expectwget https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxf apache-maven-3.8.6-bin.tar.gz -C /usr/local
export JAVA_HOME/usr/lib/jvm/java
export PATH$JAVA_HOME/bin:$PATH
export MAVEN_OPTS-Xmx2048M
export M2_HOME/usr/local/apache-maven-3.8.6
export M2$M2_HOME/bin
export PATH$M2:$PATH 左滑查看更多 运行 mvn -version可以看到正常显示 Maven 的版本。 安装完成后需要修改 Maven 的配置文件否则部署 Apache Ranger 会报错。修改$M2_HOME/conf/setting.xml 文件屏蔽掉 159 行到 165 行 sed 159c\ !-- mirror -i $M2_HOME/conf/settings.xml
sed 165c\ /mirror -- -i $M2_HOME/conf/settings.xml
sed -i s/\r//g $M2_HOME/conf/settings.xml 左滑查看更多 Apache Ranger 使用 MySQL 作为储存权限策略的数据库需要下载 MySQL 的 JDBC Driver 文件 wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-8.0.25.tar.gz
tar -zxf mysql-connector-java-8.0.25.tar.gz mysql-connector-java-8.0.25/mysql-connector-java-8.0.25.jar --strip-components 1
mv mysql-connector-java-8.0.25.jar /usr/share/java -f 左滑查看更多 MySQL 数据库可以在 EC2 中自建 MySQL 数据库也可以采用亚马逊云科技托管的 RDS MySQL 8.0 版本如果采用 RDS MySQL 8.0 版本需要修改 RDS MySQL 实例的参数 log_bin_trust_function_creators 1 。 2编译 Apache Ranger下载 Apache Ranger 的源码包用 Maven 进行编译 wget https://dlcdn.apache.org/ranger/2.4.0/apache-ranger-2.4.0.tar.gz
tar -zxf apache-ranger-2.4.0.tar.gz
cd apache-ranger-2.4.0
mvn clean compile package -DskipTests -Drat.skiptrue -Dmaven.wagon.http.ssl.insecuretrue 左滑查看更多 编译的时间比较长根据机型配置不同所需要的编译时间会有所不同本文采用 t3a.small 的机型大约需要等待 30 分钟左右看到 BUILD SUCCESS 的信息表示编译成功。编译后的安装包保存在 target 目录中。 3安装 Apache Ranger 的 ranger-admin 组件解压缩编译后的安装包 tar -zxf ~/ranger/apache-ranger-2.4.0/target/ranger-2.4.0-admin.tar.gz -C /usr/local 左滑查看更多 修改/usr/local/ranger-2.4.0-admin/install.properties 配置文件的下列参数 SQL_CONNECTOR_JAR /usr/share/java/mysql-connector-java-8.0.25.jar
db_root_user $dbadmin
db_root_password $dbpassword
db_host $dbhostname
db_name $rangerdbname
db_user $rangeradmin
db_password $rangerpassword
rangerAdmin_password $rangerpassword
rangerTagsync_password $rangerpassword
rangerUsersync_password $rangerpassword
keyadmin_password $rangerpassword
#audit_storesolr 左滑查看更多 修改完成后执行 ./setup.sh 进行 ranger-admin 组件的安装。直到出现“Installation of Ranger PolicyManager Web Application is completed.”的信息表示 ranger-admin 安装成功。接着执行 ranger-admin start 启动 ranger-admin 服务启动后在浏览器访问 ranger-admin 的管理地址URL 是 http://ec2-hostname:6080用 admin 用户登录密码是 install.properties 中 rangerAdmin_password 参数的值。如下图所示ranger-admin 已经成功部署并运行。 4安装 Apache Ranger 的 ranger-usersync 组件解压缩编译后的安装包 tar -zxf ~/ranger/apache-ranger-2.4.0/target/ranger-2.4.0-usersync.tar.gz -C /usr/local 左滑查看更多 修改/usr/local/ranger-2.4.0-usersync/install.properties 配置文件的下列参数 修改/usr/local/ranger-2.4.0-usersync/install.properties配置文件的下列参数
POLICY_MGR_URL http://localhost:6080
SYNC_SOURCE ldap
SYNC_INTERVAL 60
rangerUsersync_password $rangerpassword
SYNC_LDAP_URL ldap://simple-ad-ipaddress:389
SYNC_LDAP_BIND_DN $ADadmin_DN
SYNC_LDAP_BIND_PASSWORD $ADadmin_password
SYNC_LDAP_DELTASYNC true
SYNC_LDAP_SEARCH_BASE $Search_base
SYNC_LDAP_USER_SEARCH_BASE $User_search_base 左滑查看更多 修改完成后执行 ./setup.sh 进行 ranger-usersync 的安装。安装完成后修改/usr/local/ranger-2.4.0-usersync/conf/ranger-ugsync.site.xml把第 8 行 ranger.usersync.enabled 的属性由 false 改为 true否则不会执行用户同步然后修改/usr/local/ranger-2.4.0-usersync/conf/ranger-ugsync.default.xml把第 70 行的 ranger.usersync.cookie.enabled 属性由 true 改为 false否则 usersync 执行定时同步时会报 session 错误。 接着执行 ranger-usersync start 启动 ranger-usersync 服务。在 ranger-admin 的管理控制台中点击 settings à Users/Groups/Roles可以看到 Simple AD 中的用户已经被同步到 Ranger 服务用户类型是 External用户源是 LDAP/AD。 Apache Ranger 的手工部署步骤比较繁琐笔者基于 Apache Ranger 2.3.0 的安装写了一个自动化部署脚本https://github.com/eq9684/emr_autolaunch/blob/main/ranger_mysql8.sh读者可以参考脚本自行编写 Apache Ranger 2.4.0 的自动化部署脚本。 03 部署 Amazon EMR Amazon EMR 可以通过亚马逊云科技管理控制台页面进行部署也可以通过 Amazon CLI 进行一键部署。本文中采用 Amazon CLI 进行快速部署。如何安装和使用 Amazon CLI 可以参考官方文档https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-getting-started.html本文假设读者已经安装并熟悉 Amazon CLI 的使用。 安装 Amazon EMR执行下面的 CLI 命令命令中的文件参数可以参考https://github.com/eq9684/emr_autolaunch。Amazon EMR 的组件较多每个组件与 Simple AD 集成需要分别配置手动配置会比较繁琐。本文的参数自动填充了 Hive 和 HUE 的参数启动 Amazon EMR 后HUE 即可通过设置 Simple AD 的用户作为 HUE 管理员帐号访问。注意需要将命令行和文件中的 keypair、子网、安全组、数据库链接等参数替换为自己的环境更详细的部署参数可以查看官方文档https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-plan-ha-launch.html。 aws emr create-cluster \--release-label emr-6.12.0 \--instance-groupsfile://instance-group.json \--use-default-roles \--auto-scaling-role EMR_AutoScaling_DefaultRole \--applications NameHadoop NameHive NameHue NamePig NameTez \--ec2-attributes KeyNamekeypairFile,SubnetIdsubnet-12345678,EmrManagedMasterSecurityGroupsg-12345678,EmrManagedSlaveSecurityGroupsg-12345678 \--termination-protected \--configurationsfile://hiveldap.json \--name EMR-auto \--managed-scaling-policy ComputeLimits{MinimumCapacityUnits1,MaximumCapacityUnits4,MaximumOnDemandCapacityUnits2,UnitTypeInstances,MaximumCoreCapacityUnits2} \--log-uri s3://aws-logs-bucket\--ebs-root-volume-size 30 左滑查看更多 执行后返回带有 ClusterId 的 json 结果可以在亚马逊云科技管理控制台页面中查看启动状态Amazon EMR 启动的时间比较长大约在 10 分钟左右。等集群状态变为绿色字体的“正在等待”表示 EMR 集群已经成功启动。 访问 Amazon EMR 主节点的 HUE 服务URL 是 http://emr-master-hostname:8.8.8.8用 Simple AD 的设置的管理员帐号登录就可以进入 HUE 主界面。 HUE 不会自动同步 Simple AD 的其他帐号需要管理员在用户管理中手动同步。访问 http://emr-master-hostname:8.8.8.8/hue/useradmin/users 进入用户管理界面。 点击“Add/Sync LDAP user”接下来输入 LDAP 的用户名就可以同步 Simple AD 的用户到 HUE 中。 用新同步的用户登录 HUE可以用 Simple AD 的用户名和密码登录。 04 在 Amazon EMR 的主节点中 部署 Apache Ranger Plugin 登录到 Ranger 管理控制台的界面点击 HADOOP SQL 右面的号创建 Hive 的策略条目。 在 Service Detail 段落中填写 Service Name 和 Display Name例如“hive”记下填入的名称Amazon EMR plugin 配置文件的属性必须和这个名称一致。 在 Config Properties 段落中填写 Simple AD 的用户名和密码jdbc.driverClassName 保留默认的 org.apache.hive.jdbc.HiveDriverjdbc url 填写 jdbc:hive2://emr-master-ip:10000/default;authnoSasl。 点击页面下方的“Test Connection”按钮可以看到连接成功的信息。成功后点击最下面的“Add”按钮就可以保存策略配置。 在 Apache Ranger 的编译目录中复制 ranger-2.4.0-hive-plugin.tar.gz 文件到 Amazon EMR 的主节点。 用 root 用户登录到 Amazon EMR 的 ssh 终端执行下列命令 tar -zxf ranger-2.4.0-hive-plugin.tar.gz
cd $HOME/ranger-2.4.0-hive-plugin/
cp lib/ranger-hive-plugin-impl/*.jar /usr/lib/hive/lib 左滑查看更多 修改 ranger-2.4.0-hive-plugin 目录中的 install.properties 文件其中 REPOSITORY_NAME 参数必须填写上一步创建的 Ranger 权限策略的 Service Name本文上一步填写的 Service Name 是 hive这里的 REPOSITORY_NAME 也要填写 hive POLICY_MGR_URL http://$ranger-hostname:6080
REPOSITORY_NAME hive
COMPONENT_INSTALL_DIR_NAME /usr/lib/hive 左滑查看更多 执行 ./enable-hive-plugin.sh 安装 hive plugin然后执行 systemctl restart hive-server2 重新启动 hive 服务。 05 配置 Apache Ranger 权限策略 登录到 Ranger 管理控制台点击“hive”的权限策略可以看到当前的权限配置点击列表中的“all-database”。 用 HUE 管理员用户登录 HUE在 default 库中创建一个 hive 表表名为 private_table。 登录 Ranger 管理控制台点击 hive 策略可以编辑 hive 表的权限例如我们想把刚才创建的 hive 表设置为私有就可以在 Range 的权限列表中增加一条权限如下图所示我们设置策略的资源是 private_table 表给用户 huawangz 授予所有权限同时拒绝任何其他的用户访问。 回到 HUE 的界面中通过 huawangz 用户增加一条记录 用 select * from default.private_table可以查询到刚刚加入的记录 退出当前的 HUE 用户用其他用户登录 HUE同样运行 select * from default.private_table;可以看到查询被 Hive 拒绝此用户没有访问 default/private_table/*的权限无法查询私有表中的数据说明在 Ranger 中配置的权限策略已经生效。 小结 本文介绍了如何在 Amazon EMR 集群中通过开源组件 Apache Ranger 对 EMR 中的数据进行权限管理。通过 Apache Ranger 不同的 plug-in除了对 Hive 表进行权限管理还可以对 S3、Trino、Spark 等组件进行权限的管理有兴趣的读者可以查阅亚马逊云科技官方文档 https://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-ranger-plugins.html 和 Apache Ranger 的文档 https://cwiki.apache.org/confluence/display/RANGER/RangerInstallationGuide 本文中自动化部署和配置的代码可以在 https://github.com/eq9684/emr_autolaunch 进行下载并修改。 本篇作者 王华 亚马逊云科技解决方案架构师。有 20 年从事软件架构、应用开发、系统集成等工作经验。擅长 Web 领域应用系统架构设计和开发运维即时通讯软件、UC、企业 IT 服务台和云呼叫中心系统的开发部署工作从事过多个大型企业呼叫中心项目的设计、开发与部署。目前专注于制造业和呼叫中心领域的研究和方案推广。 星标不迷路开发更极速 关注后记得星标「亚马逊云开发者」 听说点完下面4个按钮 就不会碰到bug了