Spark Job场景的LakeFormation授权
提交Spark Job作业前,需通过委托完成LakeFormation的IAM细粒度授权和SQL资源授权(包括元数据、数据库、表、列和函数),以确保作业在Spark集群后台运行时能够正常访问所需数据。本节介绍Spark Job场景的LakeFormation授权的具体操作。
授权操作
在使用LakeFormation资源需要分别完成LakeFormation API的授权和LakeFormation SQL资源授权。Hive、DataSource和Iceberg格式中各SQL语句的权限请参考Iceberg和Hive和DataSource。
- 通过委托,授权使用LakeFormation API。
使用Spark Job执行作业时,需要您先在IAM页面创建相关委托,并在配置作业时添加新建的委托信息。委托权限示例请参考创建自定义委托。
- 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鉴权。
| 分类 | 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" |
| 类型 | 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" |