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

Spark Job场景的LakeFormation授权

提交Spark Job作业前,需通过委托完成LakeFormation的IAM细粒度授权和SQL资源授权(包括元数据、数据库、表、列和函数),以确保作业在Spark集群后台运行时能够正常访问所需数据。本节介绍Spark Job场景的LakeFormation授权的具体操作。

授权操作

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

  1. 通过委托,授权使用LakeFormation API。

    使用Spark Job执行作业时,需要您先在IAM页面创建相关委托,并在配置作业时添加新建的委托信息。委托权限示例请参考创建自定义委托

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

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

    在LakeFormation管理控制台,对资源授权。Spark Job支持角色和委托两种主体类型。

    了解LakeFormation SQL资源权限请参考配置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

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg ADD PARTITION FIELD col

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP PARTITION FIELD col

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg REPLACE PARTITION FIELD col

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg WRITE writeSpec

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg SET IDENTIFIER_KW FIELDS fieldList

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP IDENTIFIER_KW FIELDS fieldList

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg SET TBLPROPERTIES

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg create/Replace BRANCH Test_branch

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg create/Replace Tag Test_tag

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP BRANCH Test_branch

table:DESCRIBE

table:ALTER

"lakeformation:table:describe",

"lakeformation:table:alter"

ALTER TABLE Test_Iceberg DROP TAG Test_tag

table:DESCRIBE

table:ALTER

"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

table:DESCRIBE

table:ALTER

"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"

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

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

DELETE FROM Test_Iceberg WHERE

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

SET xx.wap.branch = Test_branch

INSERT INTO Test_Iceberg VALUES

table:DESCRIBE

table:ALTER

table:INSERT

"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)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.rollback_to_timestamp(Test_Iceberg, timestamp)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.set_current_snapshot(Test_Iceberg, snapshot_id)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.cherrypick_snapshot(Test_Iceberg, snapshot_id)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.fast_forward(Test_Iceberg, branch)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.expire_snapshots(Test_Iceberg, older_than)

table:DESCRIBE

table:ALTER

table:DELETE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.remove_orphan_files(Test_Iceberg)

table:DESCRIBE

table:DELETE

table:SELECT

"lakeformation:table:describe"

CALL system.rewrite_data_files(Test_Iceberg)

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:table:describe"

CALL system.rewrite_manifests(Test_Iceberg)

table:DESCRIBE

table:ALTER

table:UPDATE

table:SELECT

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.rewrite_position_delete_files(Test_Iceberg)

table:DESCRIBE

table:UPDATE

table:SELECT

"lakeformation:table:describe"

CALL system.register_table(spark_catalog, Test_Iceberg)

table:DESCRIBE

database:DESCRIBE

database:CREATE_TABLE

"lakeformation:database:describe",

"lakeformation:table:describe",

"lakeformation:table:create"

CALL system.ancestors_of(Test_Iceberg)

table:DESCRIBE

table:SELECT

"lakeformation:table:describe"

CALL system.add_files(Test_Iceberg, Table_1,)

table:DESCRIBE

table:ALTER

table:SELECT

table:UPDATE

"lakeformation:table:describe",

"lakeformation:table:alter"

CALL system.publish_changes(Test_Iceberg, wap1)

table:DESCRIBE

table:ALTER

table:SELECT

table:UPDATE

"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:SELECT

"lakeformation:table:describe"

表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

table:ALTER

table:CREATE_TABLE

column:SELECT

"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:create",

"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

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"

相关文档