存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载Alluxio 作为面向分析与机器学习场景的数据编排系统其安全体系围绕「身份验证Authentication→ 访问权限控制Authorization→ 用户模拟Impersonation→ 审计Auditing→ 加密Encryption」五层能力展开。本文基于仓库内官方文档 docs/cn/security/Security.md 并结合核心源码系统讲解每一层安全特性的启用方式、配置参数、底层实现与部署注意事项帮助读者掌握从零开启 Alluxio 安全能力并排查常见问题的完整方案。安全功能总览与启用入口Alluxio 文件系统的安全能力由四个开关型功能构成它们之间既有依赖关系又各自独立功能启用方式依赖前提身份验证alluxio.security.authentication.typeSIMPLE默认值无访问权限控制alluxio.security.authorization.permission.enabledtrue默认值身份验证不能是NOSASL因为授权需要用户信息用户模拟服务端alluxio.master.security.impersonation.USERNAME.* 客户端alluxio.security.login.impersonation.username身份验证需为SIMPLE或CUSTOM审计日志alluxio.master.audit.logging.enabledtrue无其中身份验证是整个安全体系的地基在SIMPLE默认模式下Alluxio 文件系统能区分使用服务的用户要使用访问权限控制与审计日志等更高级的特性SIMPLE身份验证需要保持开启。此外 Alluxio 还支持NOSASL与CUSTOM两种身份验证模式。各安全特性的完整配置参数清单可参考仓库内的 安全配置参数列表实际配置则通过 alluxio-site.properties 模板 写入。身份验证Authentication身份验证决定 Alluxio「如何知道访问者是谁」。在源码中认证模式由枚举 AuthType.java 定义包含NOSASL、SIMPLE、CUSTOM以及当前尚不支持的KERBEROS而 PropertyKey.java 中alluxio.security.authentication.type的默认值即为SIMPLE其说明明确指出默认的 SIMPLE 认证下「服务端信任客户端所声称的任何用户Server trusts whoever the client claims to be」。SIMPLE 模式当alluxio.security.authentication.type设置为SIMPLE时身份验证被启用。客户端在访问 Alluxio 服务前按以下次序获取用户信息并汇报给服务端若属性alluxio.security.login.username在客户端上被设置其值将作为此客户端的登录用户否则将从操作系统获取登录用户。客户端检索到用户信息后使用该身份连接服务在创建目录/文件后用户信息被写入元数据并可通过 CLI 与 Web UI 检索到。从源码角度看SIMPLE 模式的服务端校验实现位于 SimpleAuthenticationProvider.java其authenticate()方法为 no-op允许任意用户名与密码组合包括空字符串印证了「SIMPLE 模式下服务端不做密码校验、只记录用户身份」的事实。而 AuthenticationProvider.java 中的Factory.create()负责根据认证类型实例化对应的 ProviderSIMPLE对应SimpleAuthenticationProviderCUSTOM对应CustomAuthenticationProvider。NOSASL 模式当alluxio.security.authentication.type为NOSASL时身份验证被禁用。Alluxio 服务将忽略客户端的用户不把任何用户信息与创建的文件或目录关联。因此NOSASL模式下无法开展基于用户信息的授权检查——官方文档明确指出「身份验证不能是 NOSASL因为授权需要用户信息」。该模式适合完全内网、不关心访问者身份的简单场景。CUSTOM 模式当alluxio.security.authentication.type为CUSTOM时身份验证被启用。Alluxio 客户端检查alluxio.security.authentication.custom.provider.class指定的类名用于检索用户此类必须实现alluxio.security.authentication.AuthenticationProvider接口即 AuthenticationProvider.java 中定义的authenticate(String user, String password)方法由服务端在 SASL 握手阶段调用以决定放行或抛出AuthenticationException。对应配置项在源码中的定义为 SECURITY_AUTHENTICATION_CUSTOM_PROVIDER_CLASS其作用域为 ALL客户端与服务端均需一致配置。注意CUSTOM 模式目前还处于试验阶段官方文档建议只在测试中使用。访问权限控制AuthorizationAlluxio 文件系统为目录和文件实现了一套与 POSIX 标准类似的访问权限模型其总开关为alluxio.security.authorization.permission.enabled默认值为true见 PropertyKey.java。权限模型的三要素与三行为每个文件和目录都与以下各项相关联所属用户owner即在 client 进程中创建该文件或文件夹的用户所属组group从用户-组映射user-groups-mapping服务获取到的组访问权限permission。访问权限包含三个部分所属用户权限文件所有者的访问权限所属组权限文件所属组的访问权限其他用户权限上述两类之外的其余所有用户的访问权限。每项权限有三种行为readr、writew、executex。具体语义如下对文件读取需要r权限修改需要w权限对目录列出目录内容需要r权限在目录下创建、重命名或删除其子文件/子目录需要w权限访问目录下的子项需要x权限。当启用访问权限控制时运行 shell 命令./bin/alluxio fs ls /的输出会带有权限位与所有者信息$ ./bin/alluxio fs ls / drwxr-xr-x jack staff 24 PERSISTED 11-20-2017 13:24:15:649 DIR /default_tests_files -rw-r--r-- jack staff 80 NOT_PERSISTED 11-20-2017 13:24:15:649 100% /default_tests_files/BASIC_CACHE_PROMOTE_MUST_CACHE用户-组映射User-Group Mapping当用户确定后其组列表通过组映射服务确定该服务由alluxio.security.group.mapping.class配置默认实现是alluxio.security.group.provider.ShellBasedUnixGroupsMapping。对应源码 ShellBasedUnixGroupsMapping.java 实现了GroupMappingService接口通过执行groupsshell 命令获取给定用户的组关系并对结果用LinkedHashSet去重去除重复的主组。组映射默认启用缓存机制映射关系默认缓存 60 秒可通过alluxio.security.group.mapping.cache.timeout配置将该值设为0则禁用缓存。在源码中对应 SECURITY_GROUP_MAPPING_CACHE_TIMEOUT_MS默认值1min并保留了alluxio.security.group.mapping.cache.timeout.ms别名。alluxio.security.authorization.permission.supergroup属性定义了一个超级组默认值supergroup见 PropertyKey.java该组中的所有用户都是超级用户可执行超出常规权限的操作。目录与文件的初始访问权限初始创建访问权限为777目录与文件的区别为111。默认的 umask 值为022因此新创建的目录权限为755rwxr-xr-x、文件权限为644rw-r--r--。umask 可通过alluxio.security.authorization.permission.umask属性设置对应源码定义见 SECURITY_AUTHORIZATION_PERMISSION_UMASK默认值即022。更新目录与文件的访问权限所属用户、所属组以及访问权限可通过以下两种方式修改用户应用调用FileSystem API或Hadoop API的setAttribute(...)方法详见 文件系统 API 文档CLI 命令chown、chgrp、chmod详见 User-CLI 文档。修改权限的约束规则如下所属用户只能由超级用户修改所属组和访问权限只能由超级用户和文件所有者修改。用户模拟Impersonation用户模拟允许某一个用户代表另一个用户访问 Alluxio该机制在「Alluxio 客户端作为服务的一部分为多个用户提供数据访问」的场景下相当有用——典型如 Spark/Hive 等计算框架中Alluxio 客户端以特定连接用户连上服务端但代表实际发起任务的用户行事。为了让 Alluxio 支持用户模拟需要在服务端和客户端同时进行配置。服务端配置服务端master 与 worker通过以下两类属性授权「谁可以模拟谁」alluxio.master.security.impersonation.USERNAME.users指定由逗号分隔的用户列表这些用户可以被USERNAME模拟通配符*表示任意用户都可以被USERNAME模拟。例如alluxio.master.security.impersonation.alluxio_user.usersuser1,user2Alluxio 用户alluxio_user被允许模拟user1与user2alluxio.master.security.impersonation.client.users*Alluxio 用户client被允许模拟任意用户。alluxio.master.security.impersonation.USERNAME.groups指定由逗号分隔的用户组这些用户组内的用户可以被USERNAME模拟通配符*表示可以模拟任意用户。例如alluxio.master.security.impersonation.alluxio_user.groupsgroup1,group2alluxio_user可以模拟group1与group2中的任意用户alluxio.master.security.impersonation.client.groups*client可以模拟任意用户。要使某个用户如alluxio_user具备模拟能力至少需要设置users与groups两者之一将USERNAME替换为alluxio_user也可以同时设置两个参数作用于同一用户。客户端配置如果服务端已配置允许某些用户模拟其他用户客户端也要做相应配置使用属性alluxio.security.login.impersonation.username。设置后Alluxio 客户端连接到服务的方式不变但模拟的是其他用户。该参数可设置为以下值不设置不启用 Alluxio client 用户模拟_NONE_不启用 Alluxio client 用户模拟_HDFS_USER_Alluxio client 会模拟 HDFS client 的用户当使用 Hadoop 兼容的 client 调用 Alluxio 时。对应源码 SECURITY_LOGIN_IMPERSONATION_USERNAME 的默认值为Constants.IMPERSONATION_HDFS_USER即默认取_HDFS_USER_语义并在alluxio.security.authentication.type为SIMPLE或CUSTOM时生效。常见异常与排查应用中最可能遇到的错误如下Failed to authenticate client useryarn connecting to Alluxio server and impersonating as impersonationUserfoo to access Alluxio file system. User yarn is not configured to allow any impersonation.该错误意味着用户yarn正试图以模拟用户foo的身份连接 Alluxio但服务端并未配置允许yarn启用模拟。解决办法是在 Alluxio 服务器上为有问题的用户示例中的yarn配置相应的alluxio.master.security.impersonation.yarn.users或alluxio.master.security.impersonation.yarn.groups属性。从仓库内 Alluxio 的文档与 FAQ 可以推断这类错误在 YARN 集成如 Spark on YARN 中由 node manager 启动的客户端进程以yarn用户身份运行时最为常见。审计Auditing审计功能使系统管理员能够追踪用户对文件元数据的访问操作。总开关为alluxio.master.audit.logging.enabled对应源码定义见 MASTER_AUDIT_LOGGING_ENABLED默认值为false需显式设为true开启。此外源码中还定义了 MASTER_AUDIT_LOGGING_QUEUE_CAPACITY默认 10000用于控制审计日志异步写入队列的容量。审计日志格式审计日志文件为master_audit.log包含多个审计记录条目每个条目对应一次获取文件元数据的操作。各字段含义如下表keyvaluesucceeded命令成功运行则为true。在命令成功运行前该命令必须是被允许的。allowed命令被允许则为true。即使命令被允许它也可能运行失败。ugi用户组信息包括用户名、主要组、认证类型。ip客户端 IP 地址。cmd用户运行的命令。src源文件或目录地址。dst目标文件或目录的地址如果不适用值为空。permuser:group:mask如果不适用值为空。该格式与 HDFS 审计日志的格式可参考 Apache Hadoop Wiki 中的 HowToConfigure 相关说明十分相似。审计功能的底层实现从源码结构看审计的实现集中在 master 的 DefaultFileSystemMaster.java第 311-339 行的注释明确了设计意图审计意图的记录与实际写日志是解耦的实际写日志由AsyncUserAccessAuditLogWriter在独立线程中完成从而避免操作持着元数据锁等待审计日志 IOAuditContext资源应始终存活于LockedInodePath作用域内先于LockedInodePath创建并在其close()之前调用AuditContext#close()以保持审计日志条目与文件系统操作的顺序一致第 5539 行附近文件系统操作执行时会检查Configuration.getBoolean(PropertyKey.MASTER_AUDIT_LOGGING_ENABLED)只有开启时才会构建并写入审计上下文。这解释了为什么审计开关是一个动态可读、由 master 端检查的属性开启后系统管理员即可通过master_audit.log追踪每个用户对元数据的操作来源ip、操作类型cmd、目标src/dst以及权限变更perm。加密Encryption目前Alluxio 服务层的加解密方案尚未完成。若业务对敏感数据有加密需求官方文档给出的建议是在应用层对敏感数据进行加密或开启底层系统的加密功能例如底层 HDFS 的透明加解密Transparent EncryptionLinux 的磁盘级加密。这一层属于既有的部署环境能力而非 Alluxio 自身内建特性使用时需结合自身存储后端的安全能力统筹设计。部署建议与注意事项官方文档特别强调一条部署原则推荐由同一个用户启动 Alluxio master 与所有 workers。原因在于 Alluxio 集群服务包含 master 与 workers每个 worker 需要通过 RPC 与 master 通信以进行某些文件操作如更新文件状态、汇报存储变更等。如果 worker 进程的用户与 master 不一致这些文件操作可能因权限检查而失败——例如 master 端按 POSIX 模型校验 worker 对某目录的写权限时发现 worker 用户不在允许访问的用户/组范围内。因此在生产环境部署时使用统一的系统用户如alluxio启动全部 master 与 worker 进程若确实需要不同用户启动应确保该 worker 用户在 master 端拥有执行相关文件操作所需的权限在启用访问权限控制默认开启的集群上尤其要注意各服务进程的启动用户一致性。小结Alluxio 的安全体系遵循「认证 → 授权 → 模拟 → 审计」的渐进式分层身份验证SIMPLE/NOSASL/CUSTOM回答「访问者是谁」是高级安全特性的前提访问权限控制默认开启基于 POSIX 模型回答「能否访问」由所属用户、所属组与三类权限位共同决定用户模拟让服务型客户端能代表真实用户访问需要在服务端与客户端成对配置审计日志记录每次元数据访问的来源与结果为安全管理提供追溯依据加密目前依赖应用层或底层存储系统实现。配置这些能力时可参考仓库内的 安全配置参数列表 与 alluxio-site.properties 模板并将相关属性写入alluxio-site.properties后重启对应服务生效。赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐Alluxio 安全机制全解析认证、授权、ACL、Hadoop 模拟与审计实战指南Alluxio 安全机制全解析认证、授权、ACL、Hadoop 模拟与审计实战指南 Alluxio 作为面向分析与机器学习场景的云端数据编排层其安全体系涵盖存储分布式文件系统缓存大数据PI0Fast (LeRobot) 性能优化梯度检查点与混合精度训练实用技巧PI0Fast LeRobot 性能优化梯度检查点与混合精度训练实用技巧 PI0Fast LeRobot 是一个基于视觉 语言 动作VLA的策略模型通过asyncpg安全审计权限控制与审计日志asyncpg安全审计权限控制与审计日志 引言 在当今数据驱动的世界中数据库安全至关重要。asyncpg作为一款高性能的异步PostgreSQL客户端库其数据库后端上一篇PromiseKit与SystemConfiguration网络类型变化的异步响应下一篇终极HTTP调试指南3个步骤快速上手HTTP Toolkit网络分析工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考