如何在Hadoop集群中管理用户访问权限?

Hadoop集群是一种廉价、可靠、易管理的大数据存储技术,具有分布式、容错性和易扩展性等特点,深受企业和机构的青睐。然而,随着集群管理技术的发展,管理用户访问权限也变得越来越重要。如果采用不当的权限管理,数据安全很容易受到攻击,从而给企业的正常业务带来不可挽回的损失。因此,在Hadoop集群中管理用户访问权限是必不可少的,值得深入研究。

Hadoop集群中管理用户访问权限主要通过 HDFS Access Control Lists(ACLs) 来实现。在HDFS中,每个文件和目录都具有自己的ACL,这些ACL可以控制用户或组对文件的读写访问权限。

以下是一个生产环境具体的ACL管理示例:

创建用户和组: 一般在name节点上。 使用命令sudo adduser user1创建用户,使用命令sudo addgroup group1创建组。 或者adduser c; adduser d 就可以了 还需添加系统组吗usermod -c -G xxx

设置文件夹访问权限: 使用命令sudo hdfs dfs -setfacl -m user:user1:rwx /data设置用户user1对/data目录有读写执行权限。

设置文件访问权限: 使用命令sudo hdfs dfs -setfacl -m group:group1:r-x /data/file.txt设置组group1对/data/file.txt有读执行权限。

当有特权用户想要访问Hadoop集群中的数据时,Hadoop管理员需要根据用户的实际需求 hand out足够的权限,使其获得相应的权限管理权力。具体来说,Hadoop管理员应该利用Hadoop提供的接口(如Kerberos),根据权限管理表规定,为特权用户授予相应的管理权限。

在Hadoop集群中,管理员还可以根据不同的角色,将用户分配到不同的权限组。这样,一个用户就可以拥有多个不同的角色,可以拥有不同权限。例如,在Hadoop集群中可以将用户分为HDFS用户和YARN用户,然后根据用户的需求授予相应的权限,以满足其访问数据的需求。

在生产环境中,特权用户和角色权限管理通常使用 Apache Ranger 或 Apache Sentry 来实现。

以 Apache Ranger 为例,下面是一个生产环境的权限管理示例。

1 首先,需要安装 Apache Ranger。 2 安装完成后,需要登录到 Apache Ranger 的管理员控制台。 3 在管理员控制台中,创建一个新的服务实例,指定 HDFS 作为服务类型。 4 接下来,创建角色并分配对应的权限,例如:

  • 创建一个管理员角色,授予它完全访问 HDFS 的权限。
  • 创建一个数据科学家角色,授予它对 HDFS 中某个文件夹的只读权限。

5 最后,将用户分配到角色,即可实现对用户访问权限的管理。

当然也可以用命令的方式操作:下面是一个完整的案例:

创建一个管理员角色,授予它完全访问 HDFS 的权限。 创建一个组长角色,授予它对 HDFS 中文件夹/data/的读和写权限。 创建一个数据科学家角色,授予它对 HDFS 中/data/hive /data/hbase的只读权限。 创建一个app角色,授予它对 HDFS 中/data/hive/app1 /data/hbase/app1 的只读权限。 创建一个数据员角色,授予它对 HDFS 中/data/src的只能写,不能读权限。 创建一个临时用户角色,授予它对 HDFS 中只对/data/tmp 有写、读权限,其它目录没有任何读 写权限。 用户a属于管理员角色 用户b属于组长角色 用户c 、用户d属于数据科学家角色 用户e 属于app角色 用户 f 、用户g 属于数据员角色 用 a b c d e f g 可以读写/data/tmp目录

首先,创建一个管理员角色:

ranger policy create --name admin_role --resource "hdfs:/" --policy-type access --perm-type allow --perm "*"

其次,创建一个组长角色:

ranger policy create --name leader_role --resource "hdfs:/data" --policy-type access --perm-type allow --perm "read,write"

紧接着,创建一个数据科学家角色:

ranger policy create --name scientist_role --resource "hdfs:/data/hive,hdfs:/data/hbase" --policy-type access --perm-type allow --perm "read"

然后,创建一个app角色:

ranger policy create --name app_role --resource "hdfs:/data/hive/app1,hdfs:/data/hbase/app1" --policy-type access --perm-type allow --perm "read"

接着,创建一个数据员角色:

ranger policy create --name data_role --resource "hdfs:/data/src" --policy-type access --perm-type allow --perm "write"

最后,创建一个临时用户角色:

ranger policy create --name tmp_role --resource "hdfs:/data/tmp" --policy-type access --perm-type allow --perm "read,write"

最后,将用户 a 分配到管理员角色中,b 分配到组长角色中,c 和 d 分配到数据科学家角色中,e 分配到 app 角色中,f 和 g 分配到数据员角色中。为了简化过程,假设用户已经存在。 请注意,您需要先在 HDFS 中创建用户a,然后才能将其添加到管理员角色。在Hadoop集群中,用户帐户通常是在NameNode(也称为Master节点)上创建的。在HDFS中必须为其他用户创建账户。

ranger user add --name a --role admin_role
ranger user add --name b --role leader_role
ranger user add --name c --role scientist_role
ranger user add --name d --role scientist_role
ranger user add --name e --role app_role
ranger user add --name f --role data_role
ranger user add --name g --role data_role


ranger user add --name b --role tmp_user_role
ranger user add --name c --role tmp_user_role
ranger user add --name d --role tmp_user_role
ranger user add --name e --role tmp_user_role
ranger user add --name f --role tmp_user_role
ranger user add --name g --role tmp_user_role

如果用户 “a” 已经具有对根目录 “/” 的完全权限,则不需要再添加 tmp_user_role 角色。但是,如果您希望为其他用户分配对 /data/tmp 目录的写和读权限,则需要为它们分配该角色。 sudo adduser

ps:

ranger admin create role -name "administrator"
ranger admin create policy -name "full_hdfs_access" -resource "hdfs:///" -perm "*" -role "administrator"
ranger admin add user -name "a" -role "administrator"

ranger policy create --name admin_role --resource "hdfs:/" --policy-type access --perm-type allow --perm "*"
ranger user add --name a --role admin_role  

这2者的区别。

两个命令的结果相同,它们的区别是命令的语法不同。第一个命令使用 “ranger admin create role” 和 “ranger admin create policy” 创建角色和策略,而第二个命令使用 “ranger policy create” 和 “ranger user add” 创建角色和策略。

两种命令语法都可以使用,但是对于更容易理解的结果,推荐使用第二种语法,即 “ranger policy create” 和 “ranger user add”。

更多其它练习: 1 创建管理员角色:

$ ranger admin create role -name "administrator"

授予完全访问 HDFS 的权限:

$ ranger admin create policy -name "full_hdfs_access" -resource "hdfs:///" -perm "*" -role "administrator"

将用户a添加到管理员角色:

$ ranger admin add user -name "a" -role "administrator"

请注意,您需要先在 HDFS 中创建用户a,然后才能将其添加到管理员角色。在Hadoop集群中,用户帐户通常是在NameNode(也称为Master节点)上创建的。在HDFS中必须为其他用户创建账户


要创建组长角色并授予它对 HDFS 中文件夹 /data/ 的读写权限:

2 创建组长角色

ranger policy create --repository hdfs --policyName "leader_policy"  --policyType "group" --group "leader_group"   --permMap "read,write" --denyPolicy false

将/data/文件夹加入组长角色

ranger policy update --repository hdfs --policyName "leader_policy"  --addresources /data/

3 创建数据科学家角色 创建数据科学家角色并授予它对 HDFS 中 /data/hive /data/hbase 的只读权限:

ranger policy create --repository hdfs --policyName "scientist_policy" --policyType "group" --group "scientist_group"  --permMap "read" --denyPolicy false

将/data/hive、/data/hbase加入数据科学家角色

ranger policy update --repository hdfs --policyName "scientist_policy"   --addresources /data/hive /data/hbase

最后,将用户 a 和 b 分别分配到管理员角色和组长角色:

 分配用户 a 到管理员角色

ranger user add –name “a” –groups “admin_group”

  分配用户 b 到组长角色

ranger user add –name “b” –groups “leader_group”

 
4 数据科学家 

创建数据科学家角色 ranger hdfs plugin policy create –policyName data_scientist_role –resource “/data/hive,/data/hbase” –privilege “read”

 分配数据科学家角色给用户c、用户d

ranger hdfs plugin user add –user c –group data_scientist_role ranger hdfs plugin user add –user d –group data_scientist_role

接着用 app 角色:

 
  创建 app 角色

ranger hdfs plugin policy create –policyName app_role –resource “/data/hive/app1,/data/hbase/app1” –privilege “read”

 分配 app 角色给用户e

ranger hdfs plugin user add –user e –group app_role

接着用数据员角色:

ranger hdfs plugin policy create –policyName data_officer_role –resource “/data/src” –privilege “write”

ranger hdfs plugin user add –user f –group data_officer_role ranger hdfs plugin user add –user g –group data_officer_role 最后是临时用户角色:

ranger hdfs plugin policy create –policyName temp_user_role –resource “/data/tmp” –privilege “read,write”

ranger hdfs plugin user add –user a –group temp_user_role ranger hdfs plugin user add –user b –group temp_user_role ranger hdfs plugin user add –user c –group temp_user_role ranger hdfs plugin user add –user d –group temp_user_role ranger hdfs plugin user add –user e –group temp_user_role ranger hdfs plugin user add –user f –group temp_user_role ranger hdfs plugin user add –user g –group temp_user_role



除了使用 Apache Ranger 之外,还有其他方法可以管理特权用户权限和角色权限:

- Apache Sentry:
 Apache Sentry 是一种访问控制机制,用于管理用户权限和角色权限。它与 Hadoop 集群的元数据存储(如 Hive Metastore)和数据存储(如 HDFS)集成,以提供数据和访问控制的安全性。

- Cloudera Navigator:
 Cloudera Navigator 是一个安全管理平台,提供对 Hadoop 集群的安全性、数据完整性和合规性的监测。Cloudera Navigator 可以管理特权用户权限和角色权限,并在 Hadoop 集群上提供数据管理和策略管理功能。


### 审核机制

管理Hadoop集群中用户访问权限还应该建立一个审核机制,对用户对Hadoop集群资源的访问进行审计,查找可疑的行为,以及违反安全规定的情况。例如,针对特定的用户组,开展定期的用户审核,以确保安全性和正确性。此外,管理者应定期审核日志文件,收集、存储和分析每个用户的访问情况,从而更有效地管理用户权限。

## Hadoop集群安全性的提升


### 应用复杂的认证机制

Hadoop集群中采用的认证机制在很大程度上决定了应用系统的安全性。将应用系统与管理平台连接起来,利用Kerberos安全服务器和LDAP等安全技术,为用户建立身份验证和访问控制。这样,建立了一套安全防护体系,从而可以有效防止恶意用户无权访问系统,保护Hadoop集群中的重要数据资源。


### 应用用户访问审计

Hadoop管理员不仅要根据用户的实际需求授权用户访问,还要定期对用户的访问情况进行审核,以确保安全性。实际上,在Hadoop集群中,管理员可以使用先进的日志技术来收集、存储和分析用户的访问日志,以发现可疑的访问行为,持续保持应用的安全性。


### 定期更换密码

为了提高Hadoop集群的安全性,管理员还有必要定期更换用户的密码,以避免不恰当的密码使用和被恶意攻击的危险。建议管理员定期邮件通知用户修改密码,同时让用户定期修改账户密码,以避免账户信息被他人恶意访问或使用。

总之,Hadoop集群管理用户访问权限是非常重要的。管理员应该采用科学合理的访问控制方式,将用户分配到不同的权限组,同时采用复杂的认证机制和审核机制,定期更换密码,以有效保护Hadoop集群中的重要数据资源。

随机文章