You need to enable JavaScript to run this app.
导航

安全概述

最近更新时间2023.03.03 15:40:43

首次发布时间2021.09.30 14:31:53

1. 概述

LAS 权限由两部分组成: 通用权限数据权限 。通用权限由用户在火山引擎上配置,IAM 权限系统负责管理此部分权限。数据权限由 LAS 内部独立实现,需要通过 LAS SDK/ACL,或者在 DataLeap-Triton 平台进行管理,数据权限资源为不同 Scope 的资源,例如 Schema/Table/Function/Resource/Column/Row,授权主体为 IAM 子账号/主账号。

2. 安全模型

2.1 权限继承

此处主要描述数据权限的继承关系,其中 Column 权限独立于继承体系,即拥有 Table 的 Select 权限,不一定具有 Column 的权限。

image

2.2 授权流程

  • 主账号在 火山引擎控制台 通过授予预置策略 LASFullAccess 的方式将 CreateSchema 权限授予给用户 A
  • 用户 A 创建 Schema,用户 A 默认具有 Schema 的 ALL 权限
  • 用户 A 授予 Schema 的 CreateTable 权限给用户 B
  • 用户 B 创建 Table,用户 B 默认具有 Table 的 ALL 权限权限
  • 用户 B 授予 Table 的 Select/Insert 权限给用户 C
  • 用户 C 提交任务到 LAS 写入和查询 Table

image

2.4 鉴权流程

  • 用户 A 提交查询 SQL 到 LAS
  • LAS 解析 SQL 获得目标资源后,对用户 A 进行鉴权
    • 鉴权失败,则无法正常提交任务
    • 鉴权通过,正常提交 SQL 任务到引擎执行,并返回执行结果

image

3. 权限管理

3.1 通用权限管理

3.1.1 管理入口

用户需要在火山引擎控制台中给指定子账号授予策略。LAS 提供两个系统预置策略,用户也可以基于不同权限点创建自定义策略。

  • 系统预置策略

image.png


预置策略

说明

Policy

LASFullAccess

湖仓一体化分析服务(LAS)全读写权限

<br>{<br> "Statement": [<br> {<br> "Effect": "Allow",<br> "Action": [<br> "las:*"<br> ],<br> "Resource": [<br> "*"<br> ]<br> }<br> ]<br>}<br>

LASReadOnlyAccess

湖仓一体化分析服务(LAS)只读权限

<br>{<br> "Statement": [<br> {<br> "Effect": "Allow",<br> "Action": [<br> "las:GetQueue",<br> "las:ListQueue",<br> "las:ListUserJob",<br> "las:MonitorQueue",<br> "las:MonitorStorage",<br> "las:ConsolePermission",<br> "las:ListRegion",<br> "las:ListSchema"<br> ],<br> "Resource": [<br> "*"<br> ]<br> }<br> ]<br>}<br>
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "las:CreateSchema",
        "las:ListSchema"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

3.1.2 权限点

Scope权限点说明LASFullAccessLASReadOnlyAccess

Global
(注:权限点作用资源均为 *,即全部资源)

All

提供所有资源的完全控制权限

✔️

CreateQueue允许被授权的 IAM 子账户在服务中新建队列。✔️
GetQueue在控制台队列管理页,允许被授权的 IAM 子账户在服务中获取队列的状态和配置、监控数据。✔️✔️
ListQueue在控制台队列管理页,允许被授权的 IAM 子账户查询队列列表。✔️✔️
MonitorQueue允许被授权的 IAM 子账户获取队列数据扫描量信息。✔️✔️
MonitorStorage允许被授权的 IAM 子账户获取队列存储使用情况信息。✔️✔️
ListRegion允许被授权的 IAM 子账户获取 LAS 服务地域配置信息。✔️✔️
ListUserJob在控制台作业管理页,允许被授权的 IAM 子账户查看其自身提交的任务信息。✔️✔️
ListJob在控制台作业管理页,允许被授权的 IAM 子账户查看该主账号下所有任务信息。✔️
ListJobSubmitter在控制台作业管理页,允许被授权的 IAM 子账户查看该主账号下所有任务提交人信息。✔️
KillJob在控制台作业管理页,允许被授权的 IAM 子账户 Kill 该主账号下正在运行的任务信息。✔️
ConsolePermission允许被授权的 IAM 子账户可以访问 LAS 控制台。✔️✔️
CreateSchema允许被授权的 IAM 子账户创建 Schema。✔️
ListSchema允许被授权的 IAM 子账户查看 Schema 信息。✔️✔️

3.2 数据权限管理

3.2.1 管理入口

  1. SDK 接入
  • Maven 依赖
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>0.0.1-public-las</version>
</dependency>

  • 初始化 Client
HiveMetaStoreClient hiveMetaStoreClient = new HiveMetaStoreClient(new HiveConf());
hiveMetaStoreClient.setRegion(region);
hiveMetaStoreClient.setAccessKeyIdAndSecretAccessKey(accessKeyId, secretAccessKey);

  • 接口列表

API

功能描述

请求参数

参数限制

grantPrivilegesToPrincipal

批量给用户授权,支持跨 Region、跨租户授权

1: GeminiPrincipal principal,

/

2: list grantPrivileges

300

revokePrivilegesFromPrincipal

批量回收用户权限,支持跨 Region、跨租户授权

1: GeminiPrincipal principal,

/

2: list privileges

300

addSecurityLabels

增加多个敏感列

1: list securityLabels

30

deleteSecurityLabels

删除多个敏感列

1: list securityLabels

30

listSecurityLabels

查询指定 table 的所有敏感列

1: GeminiTable table

/

listPrivilegesOnResources

根据指定 resource list 获取所有被授予的权限,可以指定筛选条件。(支持分页)

1: list resources,

10

2: list requiredActions,

10

3: list requiredPrincipals,

10

4: i32 pageIndex,

>= 1

5: i32 pageSize

1000

listPrivilegesForPrincipal

获取指定 principal 的所有权限信息(支持分页)

1: GeminiPrincipal principal,

/

2: list requiredResourceScopes,

10

3: list requiredActions,

10

4: list requiredResources,

10

4: i32 pageIndex,

>= 1

5: i32 pageSize

1000

checkPrivileges

鉴权接口,Check 一个 principal 是否具有指定 privileges 的权限(如果没有权限,则会抛出异常)

1: GeminiPrincipal principal

/

2: list privileges

/
  1. DataLeap

跳转到 DataLeap-Triton 进行权限管理。

3.2.2 权限点


Scope

权限点

说明

Schema

CreateTable

创建表、视图的权限

CreateFunction

创建函数的权限

CreateResource

创建资源的权限

CreateInstance

创建实例的权限

Describe

读取 Schema 元信息

Show

列出 Schema 内所有对象,包括表、资源、函数、实例等信息

Drop

删除 Schema

Alter

修改 Schema 元信息

All

具备上述所有权限,包含对其授权的权限

Table

Describe

读取表元信息

Select

读取表数据

Alter

修改表的元信息或添加删除分区

Insert

写入/覆盖表数据

Drop

删除表

Import

导入数据

Export

导出数据

All

具备上述所有权限,包含对其授权的权限

Column

Select

读取列数据

Row

Select

读取行数据

Function

Read

读取函数信息

Write

更新函数

Delete

删除函数

Execute

执行函数权限

All

具备上述所有权限,包含对其授权的权限

Resource

Read

读取

Write

更新

Delete

删除

All

具备上述所有权限,包含对其授权的权限

3.2.3 Owner 权限

数据对象的创建者,将自动拥有该对象的完全控制权限。

3.2.4 行权限

说明 :行权限通过类似 Policy 的方式实现。

  • 行权限与列解耦
  • 表权限覆盖行权限:拥有一个表的 Select 权限,则默认拥有表内所有行的权限
  • 同一个用户可以授权多个行权限,每个行权限为一个独立的 rowPolicy,不同 rowPolicy 之间独立,互不影响。鉴权过程,用户 SQL 中的过滤条件需要至少满足一个 rowPolicy(查询条件为 rowPolicy 的子集),即可获得查询权限。
  • rowPolicy 格式为 map<string, set<string>>,可以表示 col_a in ('a1', 'a2') and col_b in ('b1')
  • rowPolicy 仅支持 and 关系,不支持 or 关系。

例如

  • 授权如下
    • rowPolicy1: col_a in ('a1', 'a2') and col_b in ('b1')
    • rowPolicy2:col_a in ('a3')
  • 鉴权如下
    • select * from xxx where col_a = 'a3'
      • 具有权限:满足 rowPolicy2
    • select * from xxx where col_a in ('a1', 'a2') and col_b in ('b1','b2')
      • 具有权限:满足 rowPolicy1
    • select * from xxx where col_a = 'a3' and col_b = 'b1'
      • 具有权限:满足 rowPolicy2
    • select * from xxx where col_a = 'a1'
      • 无权限
    • select * from xxx where col_b = 'b1'
      • 无权限

3.2.5 列权限

说明 :列权限与库表权限独立,具有 Schema 和 Table 的权限,不一定具有敏感 Column 权限。