大数据生态安全框架的实现原理与最佳实践(上篇) 2

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据生态安全框架的实现原理与最佳实践(上篇)

2.3 HDFS认证详解-groups 如何确定

  • 确定了user后,如何确定其 groups 是由参数 hadoop.security.group.mapping 决定的。
  • 该参数的默认值是 org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback;
  • Hadoop also supports special group mapping mechanisms through LDAP and composition of LDAP and operating system group name resolution, which require additional configurations
  • 在默认配置下,确定的groups的值,等同于LINUX 下 bash –c groups/id –gn/id -Gn

640.png

640.png

2.4 HDFS认证详解-相关参数

相关参数有:

  • hadoop.security.authentication
  • hadoop.security.group.mapping
  • hadoop.proxyuser.xxx.groups
  • hadoop.proxyuser.xxx.hosts

3. HDFS 授权详解

HDFS 的 authorization 鉴权, 可以通过配置参数 hadoop.security.authorization 为 TRUE 或 FALSE,从而打开或关闭鉴权,该参数是服务端参数,不能在客户端覆盖,默认为 FALSE。

需要注意的是,当该参数配置为 FALSE 时,即意味着不对用户的操作进行权限校验,这在生产环境是非常危险的,因为任何用户都可以进行任何操作,比如读取修改或删除其它用户的数据,所以我们强烈建议配置该参数为TRUE从而开启鉴权。(不开启用户权限鉴权的话,用户身份认证也就没有什么意义了)。


3.1 HDFS授权详解-posix mode

HDFS在授权上,大体上遵循了类 linux文件系统的 posix 模型机制:

  • 每个文件和目录都有对应的 owner/group, 并可以针对 owner/group/others 分别进行授权;
  • 对文件来说,读文件需要 R 权限,写或追加写需要 W 权限,X 权限没有意义(因为hdfs文件没有所谓的executables files 可执行文件);
  • 对目录来说,查看目录下内容需要R权限,在该目录下创建和删除文件或目录需要 W 权限,访问该目录下的文件或目录需要x权限;
  • Hdfs 可以对目录设置 sticky bit,防止目录下文件被误删除:The sticky bit can be set on directories, preventing anyone except the superuser, directory owner or file owner from deleting or moving the files within the directory.
  • HDFS 对文件设置 sticky bit 没有任何效果:Setting the sticky bit for a file has no effect.
  • 不同于标准 POSIX 模型的一点是,hdfs 的目录和文件都没有 setuid/setgid bits; (hdfs文件没有所谓的executables files 可执行文件);
  • 创建目录或文件时,其默认的 owner/group 是这样决定的:its owner is the user identity of the client process, and its group is the group of the parent directory (the BSD rule);
  • 创建文件或目录时,其默认的 MODE 是由 umask 参数决定的: fs.permissions.umask-mode
  • Umask 默认的配置是 022,此时默认所有用户对所有目录和文件都有读权限:this is typically 755 for new directories and 644 for new files:022 is octal for u=rwx,g=r-x,o=r-x in symbolic;
  • Umask 常见的配置还有007和077,其中后者默认阻止了非owner用户对所有目录和文件的访问权限,是最为严苛的授权;(007 is octal for“u=rwx,g=rwx,o=”in symbolic;)

640.png

3.2 HDFS授权详解-superuser

  • HDFS 有超级用户super-user 的概念:启动 namenode 进程的用户即是超级用户,HDFS的超级用户拥有所有权限,类似 LINUX 的超级用户 ROOT;(超级用户是动态的,不需要通过参数配置,谁启动 namenode 谁就是超级用户,该用户一般是 hdfs)
  • HDFS 有超级用户组 superusergroup 的概念: 超级用户组下的所有用户都是超级用户,超级用户组只能是一个而不能是多个,通过参数 dfs.permissions.superusergroup 进行配置,默认是 supergroup;
  • HDFS Web Server 用户的身份: 需要通过参数进行配置,比如:dfs.web.ugi = webuser,webgroup ( 新版本是 hadoop.http.staticuser.user),当该用户不是超级用户时,通过 web server 可能不能查看到文件系统的所有内容

640.png


3.3 HDFS授权详解-posix acl

除了传统的 POSIX 权限模型,HDFS 也支持 POSIX ACLs (Access Control Lists);

  • 通过 ACL,可以对目录或文件的 owner/group 之外的特定用户或用户组,授予不同于 others 的特定的权限,相比 owner/group/others 的粗粒度的授权,粒度更细也更为灵活;
  • ACL 分为两种:access acl 和 default acl,其中前者用来在访问文件或目录内容时进行权限校验,后者用来确定在配置了 ACL 的目录下创建子目录或子文件时,这些自目录子文件的 access acl 和 default acl; (只有目录才有default ACL)
  • 对特定的目录或文件,可以声明的 ACL entry 的个数是由上限的,最大为64:The maximum number is 32 for access and 32 for default entries which is 64 in total.
  • ACL 对 namenode 造成了额外的压力:A file with an ACL incurs an additional cost in memory in the NameNode compared to a file that has only permission bits.
  • 最佳实践是:Best practice is to rely on traditional permission bits to implement most permission requirements, and define a smaller number of ACLs to augment the permission bits with a few exceptional rules.
  • ACL 常见命令:
  • 查看 acl: hdfs dfs -ls :针对设置了ACL的文件或目录,注意输出中有‘+’ character
  • 查看 acl:hdfs dfs -getfacl [-R]
  • 设置 acl: hdfs dfs -setfacl [-R] [-b |-k -m |-x <acl_spec> ] |[--set <acl_spec> ]


  • 对HIVE外表配置ACL,示例命令如下: (access acl+default acl)
  • hdfs dfs -getfacl /user/xx/dap/hive/liming2
  • hdfs dfs -setfacl -R -m group:hive:rwx /user/xx/dap/hive/liming2
  • hdfs dfs -setfacl -m default:group:hive:rwx /user/xx/dap/hive/liming2

640.png

  • ACL 示例输出如下:(Each ACL entry names a specific user or group and grants or denies read, write and execute permissions for that specific user or group)

640.png

3.4 HDFS授权详解-鉴权-hdfs native

  • HDFS在鉴权上,通过参数 dfs.permissions.enabled 来进行控制,可已配置鉴权也可以配置不鉴权 false/true;
  • 该参数默认是 true,当该参数配置为 false 时,将不会进行任何 permission checking;
  • 更改该参数的值,不会改变文件和目录的 mode/owner/group/acl等;
  • 该参数是服务端参数,不能在客户端覆盖!

3.5 HDFS授权详解-鉴权-ranger

除了使用 hdfs 的 native 鉴权机制,还可以结合使用 ranger 的权限机制:

  • Apache Ranger 基于插件机制,提供了对 Hadoop 生态众多组件的集中的权限管控机制:a centralized security administration solution for Hadoop;
  • Ranger hdfs 插件是对 hdfs native permission model 的补充:Ranger plugin for HDFS checks for Ranger policies and if a policy exists, access is granted to user. If a policy doesn‘t exist in Ranger, then Ranger would default to native permissions model in HDFS (POSIX or HDFS ACL).

640.png

3.6 HDFS授权详解-proxy代理机制

Hadoop 还有代理用户 proxyuser 的概念,一般 hue/hive/sqoop/flume 等服务的系统用户都支持代理机制。

  • 所谓代理机制,是由当前的系统用户/真实用户realuser/超级用户,如 hive/sqoop 等服务的进程对应的用户,代理最终的业务用户比如dap/cic等,对底层的 hdfs进行访问;
  • 经过代理后,hdfs 进行权限校验时,是针对最终业务用户比如 hundsun/dap/cic,进行权限校验;
  • 没有使用代理时,hdfs 进行权限校验时,是针对系统用户比如 hive/hue/sqoop,进行权限校验;

640.png

640.png

  • 当指定了环境变量或系统参数 HADOOP_PROXY_USER 时,HADOOP 会自动使用代理机制,且被代理用户就是该环境变量/系统参数只当的值,所以可以通过以下方式指定被代理的业务用户:
  • System.setProperty(UserGroupInformation.HADOOP_PROXY_USER, "randomUser");
  • Export HADOOP_PROXY_USER = randomUser;


640.png640.png

  • 当然也可以在代码中,显示指定代理用户:UserGroupInformation.createProxyUser("randomUser", UserGroupInformation.getLoginUser());

640.png

640.png

hue/hive/sqoop/flume等服务的系统用户,使用代理机制时,需要进行配置,相关的配置参数如下:

  • hadoop.proxyuser.xxx.groups
  • hadoop.proxyuser.xxx.hosts

640.png


3.7 大数据平台 CDH/HDP/CDP 与 TDH, HDFS 授权与鉴权的差异

TDH 中,通过安全组件 Guardian 来管理各个组件的安全:

  • Guardian 底层整合了 kerberos 和 ApacheDS来做认证;
  • 同时Guardian 还通过 hdfs 插件机制,支持了对 hdfs 的目录和文件进行授权和鉴权,有点类似于 ranger 的插件机制;

640.png

通过访问HDFS目录时的底层日志,我们可以大胆推测,guardian hdfs plug,和 ranger hdfs plugin 的实现细节,还是有所区别的:

  • Guardian是先进行hdfs posix 的权限校验,如果校验成功就允许执行对应的hdfs操作,只有在hdfs posix 权限校验失败时,才会查看 guardian 配置的权限;
  • 如果guardian权限校验也是失败的,就阻止对应的hdfs 操作;如果guardian权限校验成功,就允许执行对应的hdfs操作;(底层是切换使用了 hdfs 超级用户来进行实际的 hdfs 操作)

640.png

640.png


  • 通过查看反编译的 Guardian hdfs plugin 的源码,印证了我们上述推测:其底层使用了java 的 try-catch 捕获了 HDFS native 权限校验抛出的异常,并进一步通过guardian进行权限校验:

640.png

3.8 HDFS授权详解-Best practices for HDFS authorization

权限管理最佳实践:

  • 通过配置 umask 控制所有新创建的目录和文件的 posix mode, umask 默认022,常用的还有 007,077;
  • 如果需要更改特定目录的权限,应该遵循权限最小化原则,按照 posix mode 对目录和文件的 owner/group/other 进行赋权;
  • 如果需要对特定目录赋予特定用户的权限,应该遵循权限最小化原则,通过 posix acl 对 posix mode 进行补充;
  • 当结合ranger hdfs 插件对hdfs进行权限管理时,ranger 推荐的最佳实践:
  • Change HDFS umask to 077
  • Identify directory which can be managed by Ranger policies
  • Identify directories which need to be managed by HDFS native permissions -Enable Ranger policy to audit all records

3.9 HDFS授权详解-相关参数

总结下,HDFS授权相关参数有:

  • hadoop.security.authorization
  • dfs.permissions.enabled = true:If yes use the permissions system as described here. If no, permission checking is turned off, but all other behavior is unchanged;
  • dfs.web.ugi = webuser,webgroup;
  • dfs.permissions.superusergroup = supergroup:The name of the group of super-users;
  • fs.permissions.umask-mode = 0022;
  • dfs.cluster.administrators = ACL-for-admins;
  • dfs.namenode.acls.enabled = true: Set to true to enable support for HDFS ACLs (Access Control Lists). By default, ACLs are enabled. When ACLs are disabled, the NameNode rejects all attempts to set an ACL;
  • dfs.namenode.posix.acl.inheritance.enabled: Set to true to enable POSIX style ACL inheritance. Enabled by default. When it is enabled and the create request comes from a compatible client, the NameNode will apply default ACLs from the parent directory to the create mode and ignore the client umask. If no default ACL is found, it will apply the client umask;
  • hadoop.proxyuser.xxx.groups/hosts;
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
66 5
|
1月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
82 0
|
17天前
|
存储 安全 大数据
大数据隐私保护:用户数据的安全之道
【10月更文挑战第31天】在大数据时代,数据的价值日益凸显,但用户隐私保护问题也愈发严峻。本文探讨了大数据隐私保护的重要性、面临的挑战及有效解决方案,旨在为企业和社会提供用户数据安全的指导。通过加强透明度、采用加密技术、实施数据最小化原则、加强访问控制、采用隐私保护技术和提升用户意识,共同推动大数据隐私保护的发展。
|
10天前
|
存储 安全 大数据
|
1月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
52 3
|
1月前
|
消息中间件 分布式计算 druid
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
36 2
|
1月前
|
消息中间件 缓存 分布式计算
大数据-59 Kafka 高级特性 消息发送03-自定义拦截器、整体原理剖析
大数据-59 Kafka 高级特性 消息发送03-自定义拦截器、整体原理剖析
27 2
|
1月前
|
消息中间件 监控 Java
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
64 1
|
1月前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
38 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
20天前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
48 0