
# 配置Spark对接LakeFormation授权管理
LakeFormation数据湖权限支持配置数据库、数据表、函数等维度的权限。云服务管理员可针对不同的管理对象配置不同IAM用户组的权限，统一对数据湖资源进行管理。
MRS集群对接LakeFormation后，LakeFormation服务中的相关数据湖权限策略及角色信息会自动同步至MRS Ranger，对于MRS集群内的用户，可通过关联至对应Ranger角色后获取对应资源的访问权限。
开启数据源鉴权时需为Spark组件配置相关访问权限。
#### 前提条件
- 本章节内容仅适用于MRS 3.6.0及之后版本。
- LakeFormation实例运行正常，数据库、数据表、数据权限等页面加载正常。
- 集群关闭Kerberos认证（普通模式），且运行正常，包含Guardian、Ranger、Hive、Spark等服务。
- 已完成MRS集群对接LakeFormation，并配置MRS集群Spark组件的存算分离，详情可参考[创建集群时配置LakeFormation数据连接](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300727.html#mrs_01_300727)或[为已有集群配置LakeFormation数据连接](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300728.html#mrs_01_300728)。
- 已下载安装了集群客户端，例如安装目录为"/opt/client"。
- 已登录MRS集群的FusionInsight Manager界面添加人机用户"sparkuser"，加入hadoop、hive用户组，用户创建成功后初始化密码。
- CREATE OR REPLACE FUNCTION时using jar路径应为Catalog存储位置或者数据库存储位置列表的子路径，否则LakeFormation会报错"The path should be a sub path of the catalog storage location or database location list"。
 
#### 鉴权插件说明
Spark组件提供了两种鉴权插件选项：Ranger鉴权插件和LakeFormation鉴权插件，LakeFormation鉴权插件仅适用于MRS 3.6.0及之后版本。
Spark组件默认采用Ranger鉴权插件进行权限管理。这种配置依赖于用户在LakeFormation中设置的数据权限策略同步机制。通过这一机制，数据权限得以实时更新和同步，确保权限管理的时效性和准确性。
如果您希望切换到LakeFormation鉴权插件，需要进行以下配置：
1. 禁用Ranger鉴权插件： 登录Manager页面，在Spark服务界面停用Ranger鉴权。重新下载客户端，或手动刷新客户端配置文件"*客户端安装目录*/Spark/spark/conf/spark-defaults.conf"中参数"spark.ranger.plugin.authorization.enable"值为"false"。Spark关闭Ranger鉴权后，需要重启Spark服务。
2. 启用LakeFormation鉴权插件： 设置配置参数 spark.lakeformation.plugin.authorization.enable=true 以启用LakeFormation鉴权插件。
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 独立性：LakeFormation鉴权插件不依赖于数据湖权限策略的同步机制，因此在某些场景下可能更为轻便和高效。
   
   - 兼容性：由于Ranger鉴权插件通过同步权限策略兼容LakeFormation统一元数据，存在少量差异，可参考[表1]。
   
   - 权限策略重置：切换鉴权插件需要重启Spark组件，并同步客户端配置。并注意二者兼容性。
   
   - 差异性：LakeFormation鉴权插件不支持SET ROLE ADMIN命令。
     
3. Spark操作Iceberg表，需要使用LakeFormation鉴权插件时，需要在core-site.xml中添加参数：
   ```
   <property>
   <name>lakeformation.spark.iceberg.authentication.enable</name>
   <value>true</value>
   </property>
   ```
   
 
#### 配置授权
1. 关闭Kerberos认证的集群（普通模式）默认关闭Ranger鉴权，需要参考以下步骤开启Spark的Ranger鉴权。 
   1. 启用Hive服务的Ranger鉴权。 登录MRS集群Manager，选择"集群 \> 服务"，单击待操作的服务名称（例如Hive），在右上角选择"更多 \> 启用Ranger鉴权"根据界面提示进行启用。
      登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   2. 先重启Hive服务，再重启Spark服务。 选择"集群 \> 服务"，单击待操作的服务名称（例如Hive），在页面右上角选择"更多 \> 重启服务"。
      
   
   3. 参考以上操作，启用Spark服务的Ranger鉴权，启用完成后重启Spark服务。
   
   
   
   
2. 在LakeFormation中添加鉴权角色。 
   1. 登录[LakeFormation管理控制台](https://console.huaweicloud.com/lake-formation/)。
   
   2. 在LakeFormation管理控制台，选择"数据权限 \> 角色"页面，单击"创建角色"，"角色名称"填写"spark_role"，单击"确定"。
   
   
   
   
3. 为待鉴权用户添加角色或者用户组。 
   **Ranger鉴权插件：**在Ranger为待鉴权用户添加角色
   1. 使用Ranger管理员用户**rangeradmin**（默认密码为Rangeradmin@123）登录Ranger管理页面。
   
   2. 在"Roles"页签，单击在LakeFormation创建的角色名，如"spark_role"，在"Users"项的"Select User"框中选择待鉴权的人机用户，如"sparkuser"，然后单击"Add Users"，单击"Save"。
   
   
   **LakeFormation鉴权插件**：在FusionInsight Manager为待鉴权用户添加用户组
   1. 使用具有Manager管理员的用户登录FusionInsight Manager管理页面。
   
   2. 选择"系统 \> 权限 \> 用户组"，在"用户组"页面搜索[2.b]创建的角色名，如"spark_role"。如不存在则创建同名用户组，创建用户组时"角色"选择为空。
   
   3. 修改[3.b]中选中的用户组，在"用户"项的框中选择待鉴权的人机用户，如"sparkuser"。
   
   
   
   
4. 在LakeFormation对角色进行授权。 
   进入LakeFormation的"数据授权"页面，单击"授权"，编辑如下，将访问表所需的权限赋予"spark_role"，单击"确定"。
   - 主体类型：选择"角色"。
   
   - 选择角色：下拉框选择刚创建的角色"spark_role"。
   
   - 授权类型：选择"资源"。
   
   - Catalog：选择"hive"。
   
   - 选择数据库、表、列、函数等待授权的资源类型。
   
   - 权限：参考[表1]。
      表1类型说明 
     | 类型                                                                                                    | SQL 语句                                                                                                      | Ranger鉴权插件所需资源权限                                                                                                     | LakeFormation鉴权插件所需资源权限 （仅适用于MRS 3.6.0及之后版本） |
     |:---|:---|:---|:---|
     | DDL语句  | ALTER DATABASE                                                                                              | database:ALTER                                                                                                       | database:ALTER                                                                                                                          |
     | DDL语句  | ALTER TABLE                                                                                                 | table:ALTER                                                                                                          | table:ALTER                                                                                                                             |
     | DDL语句  | ALTER VIEW                                                                                                  | column:SELECT                                                                                                        | column:SELECT                                                                                                                           |
     | DDL语句  | ALTER VIEW                                                                                                  | table:ALTER                                                                                                          | table:ALTER                                                                                                                             |
     | DDL语句  | CREATE DATABASE                                                                                             | None                                                                                                                 | catalog:CREATE_DATABASE                                                                                                                 |
     | DDL语句  | CREATE OR REPLACE FUNCTION (CREATE)                                                                         | database:CREATE_FUNC                                                                                                 | database:CREATE_FUNC                                                                                                                    |
     | DDL语句  | CREATE OR REPLACE FUNCTION (CREATE)                                                                         | tempudfadmin（Ranger添加）                                                                                               | database:CREATE_FUNC                                                                                                                    |
     | DDL语句  | CREATE OR REPLACE FUNCTION (REPLACE)                                                                        | database:CREATE_FUNC                                                                                                 | database:CREATE_FUNC                                                                                                                    |
     | DDL语句  | CREATE OR REPLACE FUNCTION (REPLACE)                                                                        | database:CREATE_FUNC                                                                                                 | function:ALTER                                                                                                                          |
     | DDL语句  | CREATE TABLE                                                                                                | database:CREATE_TABLE                                                                                                | database:CREATE_TABLE                                                                                                                   |
     | DDL语句  | CREATE VIEW                                                                                                 | database:CREATE_TABLE                                                                                                | database:CREATE_TABLE                                                                                                                   |
     | DDL语句  | CREATE VIEW                                                                                                 | column:SELECT                                                                                                        | column:SELECT                                                                                                                           |
     | DDL语句  | DROP DATABASE                                                                                               | database:DROP                                                                                                        | database:DROP                                                                                                                           |
     | DDL语句  | DROP FUNCTION                                                                                               | function:DROP                                                                                                        | function:DROP                                                                                                                           |
     | DDL语句  | DROP FUNCTION                                                                                               | tempudfadmin（Ranger添加）                                                                                               | function:DROP                                                                                                                           |
     | DDL语句  | DROP TABLE                                                                                                  | table:DROP                                                                                                           | table:DROP                                                                                                                              |
     | DDL语句  | DROP VIEW   | table:DROP(target)  | table:DROP(target)                                                                                                                      |
     | DDL语句  | DROP VIEW   | table:DROP(target)  | table:SELECT(target)                                                                                                                    |
     | DDL语句  | REPAIR TABLE  | table:ALTER          | table:ALTER                                                                                                                             |
     | DDL语句  | REPAIR TABLE  | table:ALTER          | table:SELECT                                                                                                                            |
     | DDL语句  | TRUNCATE TABLE                                                                                              | table:UPDATE                                                                                                         | table:UPDATE 或 table:DELETE                                                                                                             |
     | DDL语句  | TRUNCATE TABLE                                                                                              | table:UPDATE                                                                                                         | table:SELECT                                                                                                                            |
     | DDL语句  | USE DATABASE                                                                                                | None                                                                                                                 | database:任意权限                                                                                                                           |
     | DML语句                                                                                                 | INSERT TABLE                                                                                                | table:UPDATE                                                                                                         | table:INSERT                                                                                                                            |
     | DML语句                                                                                                 | LOAD DATA                                                                                                   | table:UPDATE                                                                                                         | table:SELECT                                                                                                                            |
     | DML语句                                                                                                 | LOAD DATA                                                                                                   | table:UPDATE                                                                                                         | table:UPDATE                                                                                                                            |
     | DR语句                                                                                                  | SELECT                                                                                                      | column:SELECT                                                                                                        | column:SELECT                                                                                                                           |
     | DR语句                                                                                                  | EXPLAIN                                                                                                     | 取决于执行sql                                                                                                             | 取决于执行sql                                                                                                                                |
     | Auxiliary语句                                                                                           | ANALYZE TABLE                                                                                               | table:SELECT                                                                                                         | table:SELECT                                                                                                                            |
     | Auxiliary语句                                                                                           | ANALYZE TABLE                                                                                               | table:SELECT                                                                                                         | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | DESCRIBE DATABASE                                                                                           | None                                                                                                                 | database:任意权限                                                                                                                           |
     | Auxiliary语句                                                                                           | DESCRIBE FUNCTION                                                                                           | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | DESCRIBE QUERY                                                                                              | None                                                                                                                 | table:SELECT                                                                                                                            |
     | Auxiliary语句                                                                                           | DESCRIBE TABLE                                                                                              | table:DESCRIBE                                                                                                       | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | REFRESH TABLE                                                                                               | None                                                                                                                 | table:SELECT                                                                                                                            |
     | Auxiliary语句                                                                                           | REFRESH FUNCTION                                                                                            | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | SHOW COLUMNS                                                                                                | table:DESCRIBE                                                                                                       | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | SHOW CREATE TABLE                                                                                           | table:DESCRIBE                                                                                                       | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | SHOW DATABASES                                                                                              | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | SHOW FUNCTIONS                                                                                              | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | SHOW PARTITIONS                                                                                             | table:DESCRIBE                                                                                                       | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | SHOW TABLE EXTENDED                                                                                         | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | SHOW TABLES                                                                                                 | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | SHOW TBLPROPERTIES                                                                                          | None                                                                                                                 | table:DESCRIBE                                                                                                                          |
     | Auxiliary语句                                                                                           | SHOW VIEWS                                                                                                  | None                                                                                                                 | None                                                                                                                                    |
     | Auxiliary语句                                                                                           | UNCACHE TABLE                                                                                               | None                                                                                                                 | table:SELECT                                                                                                                            |
        
     
   
   
   
   
 
#### Spark行级别数据过滤
LakeFormation支持用户对Spark数据表执行select/update/delete操作时进行行级别的数据过滤。
1. 修改服务端和客户端spark.lakeformation.row.filter.enabled参数值为true。 
   - 服务端：登录FusionInsight Manager页面，选择"集群 \> 服务 \> Spark \> 配置 \> 全部配置"，搜索并修改所有的spark.lakeformation.row.filter.enabled参数值为true，保存配置并重启服务。
   
   - 客户端：登录Spark客户端节点，进入目录"*{客户端安装目录}*/Spark/spark/conf/spark-defaults.conf"，修改spark.lakeformation.row.filter.enabled参数值为true。
   
   
   
   
2. 在LakeFormation对角色进行授权。 
   进入LakeFormation的"数据授权"页面，单击"授权"，编辑如下，将访问表所需的权限赋予"spark_role"，单击"确定"。
   - 主体类型：选择"角色"。
   
   - 选择角色：下拉框选择刚创建的角色"spark_role"。
   
   - 授权类型：选择"资源"。
   
   - Catalog：选择"hive"。
   
   - 选择数据库、表、列、函数等待授权的资源类型。
   
   - 行过滤条件中输入要增加的行级别数据过滤SQL语句，需满足Spark语法。
   
   - 权限选择"SELECT"。
   
   
   
   
3. 单击"确定"，在策略列表可查看策略的基本信息。
4. 用户通过Spark客户端对配置了数据脱敏策略的表执行select、update、delete操作，系统将对数据进行处理后进行展示。 
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   如果对相同的角色、用户组或用户配置了两条及以上的"Row Level Filter"数据过滤规则，则多条规则会同时生效。
   
   
 
