更新时间:2026-08-14 GMT+08:00
分享

Spark SQL场景的LakeFormation授权

在提交Spark SQL作业前,IAM用户需完成LakeFormation的IAM细粒度授权和SQL资源授权(包括元数据、数据库、表、列、函数及OBS路径),以确保作业能够正常访问所需数据。本节介绍Spark SQL场景的LakeFormation授权的具体操作。

授权操作

使用LakeFormation资源需要分别完成LakeFormation API的IAM细粒度授权和LakeFormation SQL资源授权。Hive、DataSource和Iceberg格式中各SQL语句的权限请参考IcebergHive和DataSource

  1. LakeFormation的IAM细粒度授权:授权使用LakeFormation API。

    IAM服务通常提供了用户和用户组的访问权限的方式。您可以在IAM控制台中创建自定义策略(Policy),定义可以调用哪些LakeFormation的API。然后,将这些策略附加到相应的用户或用户组上。

    IAM授权的具体操作请参考创建用户并授权使用LakeFormation

  2. LakeFormation SQL资源授权:授权使用LakeFormation具体资源。

    LakeFormation资源授权是指允许用户对特定资源(元数据、数据库、表、列、函数和OBS等)的访问的权限,以此来控制对LakeFormation的数据和元数据的访问。

    在LakeFormation管理控制台,对资源授权。目前Spark SQL支持用户组、角色、用户三种主体类型。

    了解LakeFormation SQL资源权限请参考配置LakeFormation元数据权限

    • Catalog资源暂时不支持在DataArts Studio控制台进行SQL授权,请在LakeFormation管理控制台完成授权。
    • Spark SQL使用外表时,需手动对OBS路径授权,否则将提示AccessDenied访问错误。对OBS路径授权的具体操作,请参见配置LakeFormation元数据权限

SQL鉴权

  • 除了表格内的权限,IAM侧还需要配置lakeformation:policy:describe。
  • 由于Spark集群启动时默认会校验default数据库,所以在执行任何SQL前,需要在LakeFormation控制台上先为目标Catalog下的default数据库授予DESCRIBE权限,授权操作请参考配置LakeFormation元数据权限
  • 建议不要给lakeformation:policy:create权限,给了会被视为管理员,跳过SQL鉴权。
表1 Iceberg鉴权

类型

SQL

LakeFormation SQL资源鉴权权限

IAM权限

DDL语句

ALTER DATABASE

database:DESCRIBE

database:ALTER

"lakeformation:database:describe",

"lakeformation:database:alter"

ALTER TABLE

database:DESCRIBE

table:DESCRIBE

table:ALTER

database:CREATE_TABLE

column:SELECT或table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter",

"lakeformation:table:create"

ALTER VIEW

database:DESCRIBE

database:CREATE_TABLE

table:DESCRIBE

table:ALTER

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg ALTER COLUMN col TYPE BIGINT

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg ADD PARTITION FIELD col

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP PARTITION FIELD col

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg REPLACE PARTITION FIELD col

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg WRITE writeSpec

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg SET IDENTIFIER_KW FIELDS fieldList

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP IDENTIFIER_KW FIELDS fieldList

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg SET TBLPROPERTIES

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg create/Replace BRANCH Test_branch

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg create/Replace Tag Test_tag

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP BRANCH Test_branch

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP TAG Test_tag

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CREATE DATABASE

database:DESCRIBE

catalog:CREATE_DATABASE

"lakeformation:database:describe",

"lakeformation:database:create"

CREATE TABLE Test_Iceberg USING iceberg

database:DESCRIBE

database:CREATE_TABLE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create"

CREATE VIEW

database:DESCRIBE

database:CREATE_TABLE

table:DESCRIBE(source\target)

table:DROP(target)

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create",

"lakeformation:table:drop"

CREATE TABLE Test_Iceberg AS SELECT xx From xx Where

table:DESCRIBE

table:ALTER

table:DROP

table:INSERT

database:CREATE_TABLE

database:DESCRIBE

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create",

"lakeformation:table:alter",

"lakeformation:table:drop"

DROP DATABASE

database:DESCRIBE

database:DROP

"lakeformation:database:describe",

"lakeformation:database:drop"

DROP TABLE

database:DESCRIBE

table:DESCRIBE

table:DROP

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:drop"

DROP VIEW

database:DESCRIBE

table:DESCRIBE(target\source)

table:DROP(target)

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:drop"

REPAIR TABLE

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

TRUNCATE TABLE

database:DESCRIBE

table:DESCRIBE

table:SELECT

table:UPDATE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

REPLACE TABLE Test_Iceberg (col1..col2..) USING iceberg

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

DML语句

INSERT INTO Test_Iceberg VALUES

table:DESCRIBE

table:ALTER

column:SELECT

database:DESCRIBE

"lakeformation:table:describe",

"lakeformation:table:alter",

"lakeformation:database:describe"

UPDATE Test_Iceberg SET col = value WHERE

table:DESCRIBE

table:ALTER

column:SELECT

database:DESCRIBE

"lakeformation:table:describe",

"lakeformation:table:alter",

"lakeformation:database:describe"

INSERT OVERWRITE Test_Iceberg VALUES

table:DESCRIBE

table:ALTER

table:UPDATE

database:DESCRIBE

"lakeformation:table:describe",

"lakeformation:table:alter",

"lakeformation:database:describe"

MERGE INTO Test_Iceberg USING xx

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

DELETE FROM Test_Iceberg WHERE

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

SET xx.wap.branch = Test_branch

INSERT INTO Test_Iceberg VALUES

database:DESCRIBE

table:DESCRIBE

table:ALTER

"lakeformation:database:describe","lakeformation:table:describe",

"lakeformation:table:alter"

DQL语句

SELECT

database:DESCRIBE

table:DESCRIBE

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

EXPLAIN

取决于执行SQL

取决于执行SQL

Auxiliary语句

DESCRIBE DATABASE

database:DESCRIBE

"lakeformation:database:describe"

DESCRIBE QUERY

database:DESCRIBE

table:DESCRIBE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

DESCRIBE TABLE

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW COLUMNS

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW CREATE TABLE

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW DATABASES

catalog:LIST_DATABASE

database:DESCRIBE

"lakeformation:database:describe"

SHOW PARTITIONS

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TABLE EXTENDED

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TABLES

database:LIST_TABLE

database:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TBLPROPERTIES

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW VIEWS

catalog:LIST_DATABASE

database:LIST_TABLE

database:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.rollback_to_snapshot(Test_Iceberg, snapshot_id)

database:DESCRIBE

table:ALTER

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.rollback_to_timestamp(Test_Iceberg, timestamp)

database:DESCRIBE

table:ALTER

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.set_current_snapshot(Test_Iceberg, snapshot_id)

database:DESCRIBE

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.cherrypick_snapshot(Test_Iceberg, snapshot_id)

database:DESCRIBE

table:DESCRIBE

table:UPDATE

table:ALTER

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.fast_forward(Test_Iceberg, branch)

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.expire_snapshots(Test_Iceberg, older_than)

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:DELETE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.remove_orphan_files(Test_Iceberg)

database:DESCRIBE

table:DESCRIBE

table:DELETE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.rewrite_data_files(Test_Iceberg)

database:DESCRIBE

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.rewrite_manifests(Test_Iceberg)

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.rewrite_position_delete_files(Test_Iceberg)

database:DESCRIBE

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.register_table(spark_catalog, Test_Iceberg)

database:DESCRIBE

database:CREATE_TABLE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create"

CALL system.ancestors_of(Test_Iceberg)

database:DESCRIBE

table:DESCRIBE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

CALL system.add_files(Test_Iceberg, Table_1,)

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.publish_changes(Test_Iceberg, wap1)

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.snapshot(Test_Parquet, Test_Copy)

table:DESCRIBE

database:CREATE_TABLE

"lakeformation:table:describe",

"lakeformation:table:create"

CALL system.migrate(Test_Parquet)

table:DESCRIBE

database:DESCRIBE

database:CREATE_TABLE

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create",

"lakeformation:table:alter"

CALL system.create_changelog_view(Test_Iceberg, '1', '4')

table:DESCRIBE

table:ALTER

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

表2 Hive和DataSource鉴权

类型

SQL语句

LakeFormation SQL资源鉴权权限

IAM权限

DDL语句

ALTER DATABASE

database:DESCRIBE

database:ALTER

"lakeformation:database:describe",

"lakeformation:database:alter"

ALTER TABLE

database:DESCRIBE

table:DESCRIBE

table:ALTER

database:CREATE_TABLE

column:SELECT或table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter",

"lakeformation:table:create"

ALTER VIEW

database:DESCRIBE

table:DESCRIBE

column:SELECT

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

CREATE DATABASE

database:DESCRIBE

catalog:CREATE_DATABASE

"lakeformation:database:describe",

"lakeformation:database:create"

CREATE OR REPLACE FUNCTION (CREATE)

database:DESCRIBE

database:CREATE_FUNC

"lakeformation:database:describe",

"lakeformation:function:describe",

"lakeformation:function:create"

CREATE OR REPLACE FUNCTION (REPLACE)

database:CREATE_FUNC

database:DESCRIBE

function:DESCRIBE

function:DROP

"lakeformation:database:describe",

"lakeformation:function:describe",

"lakeformation:function:create",

"lakeformation:function:drop"

CREATE TABLE

database:DESCRIBE

database:CREATE_TABLE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create"

CREATE VIEW

database:DESCRIBE

database:CREATE_TABLE

table:DESCRIBE(source\target)

table:DROP(target)

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create",

"lakeformation:table:drop"

DROP DATABASE

database:DESCRIBE

database:DROP

"lakeformation:database:describe",

"lakeformation:database:drop"

DROP FUNCTION

database:DESCRIBE

function:DESCRIBE

function:DROP

"lakeformation:database:describe",

"lakeformation:function:describe",

"lakeformation:function:drop"

DROP TABLE

database:DESCRIBE

table:DESCRIBE

table:DROP

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:drop"

DROP VIEW

database:DESCRIBE

table:DESCRIBE(target\source)

table:DROP(target)

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:drop"

REPAIR TABLE

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

TRUNCATE TABLE

database:DESCRIBE

table:DESCRIBE

table:SELECT

table:UPDATE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

DML语句

INSERT TABLE

database:DESCRIBE

table:DESCRIBE

table:ALTER

table:INSERT

column:SELECT或table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

LOAD DATA

database:DESCRIBE

table:DESCRIBE

table:UPDATE

table:ALTER

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

DQL语句

SELECT

database:DESCRIBE

table:DESCRIBE

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

EXPLAIN

取决于执行SQL

-

Auxiliary 语句

ANALYZE TABLE

database:DESCRIBE

table:DESCRIBE

table:SELECT

table:ALTER

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:alter"

DESCRIBE DATABASE

database:DESCRIBE

"lakeformation:database:describe"

DESCRIBE FUNCTION

database:DESCRIBE

function:DESCRIBE

"lakeformation:database:describe",

"lakeformation:function:describe"

DESCRIBE QUERY

database:DESCRIBE

table:DESCRIBE

table:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

DESCRIBE TABLE

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

REFRESH TABLE(spark sql禁用)

database:DESCRIBE

table:DESCRIBE

column:SELECT

"lakeformation:database:describe",

"lakeformation:table:describe"

REFRESH FUNCTION

database:DESCRIBE

function:DESCRIBE

"lakeformation:database:describe",

"lakeformation:function:describe"

SHOW COLUMNS

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW CREATE TABLE

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW DATABASES

catalog:LIST_DATABASE

database:DESCRIBE

"lakeformation:database:describe"

SHOW FUNCTIONS

database:DESCRIBE

"lakeformation:database:describe",

"lakeformation:function:describe"

SHOW PARTITIONS

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TABLE EXTENDED

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TABLES

database:LIST_TABLE

database:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW TBLPROPERTIES

database:DESCRIBE

table:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

SHOW VIEWS

catalog:LIST_DATABASE

database:LIST_TABLE

database:DESCRIBE

"lakeformation:database:describe",

"lakeformation:table:describe"

相关文档