Lake Formation 权限参考 - AWS Lake Formation

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Lake Formation 权限参考

要执行 AWS Lake Formation 操作,委托人需要 Lake Formation 权限和 AWS Identity and Access Management (IAM) 权限。您通常使用粗粒度访问控制策略授予 IAM 权限,如 Lake Formation 权限概述 中所述。您可以使用控制台、API 或 AWS Command Line Interface (AWS CLI) 授予 Lake Formation 权限。

要了解如何授予或撤销 Lake Formation 权限,请参阅授予和撤销对数据目录资源的权限授予数据位置权限

注意

本部分中的示例说明如何向同一 AWS 账户中的主体授予权限。有关跨账户授权的示例,请参阅 Lake Formation 中的跨账户数据共享

每种资源类型的 Lake Formation 权限

以下是适用于每种资源类型的有效 Lake Formation 权限:

资源 权限
Database ALL (Super)
ALTER
CREATE_TABLE
DESCRIBE
DROP
Table ALL (Super)
ALTER
DELETE
DESCRIBE
DROP
INSERT
SELECT
View ALL (Super)
SELECT
DESCRIBE
DROP
Data Catalog CREATE_DATABASE
Amazon S3 location DATA_LOCATION_ACCESS
LF-Tags DROP
ALTER
LF-Tag values ASSOCIATE
DESCRIBE
GrantWithLFTagExpression
LF-Tag policy - Database ALL (Super)
ALTER
CREATE_TABLE
DESCRIBE
DROP
LF-Tag policy - Table ALL (Super)
ALTER
DESCRIBE
DELETE
DROP
INSERT
SELECT
Resource link - Database or Table DESCRIBE
DROP
Table with data filters DESCRIBE
DROP
SELECT
Table with column filter SELECT

Lake Formation 授予和撤销命令 AWS CLI

本节中的每个权限描述都包括使用 AWS CLI 命令授予权限的示例。以下是 Lake Formation grant-permissionsrevoke-permissions AWS CLI 命令的提要。

grant-permissions [--catalog-id <value>] --principal <value> --resource <value> --permissions <value> [--permissions-with-grant-option <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
revoke-permissions [--catalog-id <value>] --principal <value> --resource <value> --permissions <value> [--permissions-with-grant-option <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]

有关这些命令的详细说明,请参阅《AWS CLI 命令参考》中的 grant-permissionsrevoke-permissions本部分提供有关 --principal 选项的更多信息。

--principal 选项的值为以下值之一:

  • (IAM) 用户或角色的亚马逊资源名称 AWS Identity and Access Management (ARN)

  • 通过 SAML 提供商(例如 Microsoft Active Directory 联合身份验证服务 (AD FS) 进行身份验证的用户或组的 ARN

  • 亚马逊 QuickSight 用户或群组的 ARN

  • 对于跨账户权限,需要 AWS 账户 ID、组织 ID 或组织单位 ID

以下是所有 --principal 类型的语法和示例。

主体为 IAM 用户

语法:

--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:user/<user-name>

例如:

--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1
主体为 IAM 角色

语法:

--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:role/<role-name>

例如:

--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:role/workflowrole
主体为通过 SAML 提供商进行身份验证的用户

语法:

--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:saml-provider/<SAMLproviderName>:user/<user-name>

示例:

--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/idp1:user/datalake_user1
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/AthenaLakeFormationOkta:user/athena-user@example.com
主体为通过 SAML 提供商进行身份验证的组

语法:

--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:saml-provider/<SAMLproviderName>:group/<group-name>

示例:

--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/idp1:group/data-scientists
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/AthenaLakeFormationOkta:group/my-group
校长是亚马逊 QuickSight 企业版用户

语法:

--principal DataLakePrincipalIdentifier=arn:aws:quicksight:<region>:<account-id>:user/<namespace>/<user-name>
注意

对于 <namespace>,必须指定 default

例如:

--principal DataLakePrincipalIdentifier=arn:aws:quicksight:us-east-1:111122223333:user/default/bi_user1
校长是亚马逊 QuickSight 企业版群组

语法:

--principal DataLakePrincipalIdentifier=arn:aws:quicksight:<region>:<account-id>:group/<namespace>/<group-name>
注意

对于 <namespace>,必须指定 default

例如:

--principal DataLakePrincipalIdentifier=arn:aws:quicksight:us-east-1:111122223333:group/default/data_scientists
本金是一个 AWS 账户

语法:

--principal DataLakePrincipalIdentifier=<account-id>

例如:

--principal DataLakePrincipalIdentifier=111122223333
主体为组织

语法:

--principal DataLakePrincipalIdentifier=arn:aws:organizations::<account-id>:organization/<organization-id>

例如:

--principal DataLakePrincipalIdentifier=arn:aws:organizations::111122223333:organization/o-abcdefghijkl
主体为组织单位

语法:

--principal DataLakePrincipalIdentifier=arn:aws:organizations::<account-id>:ou/<organization-id>/<organizational-unit-id>

例如:

--principal DataLakePrincipalIdentifier=arn:aws:organizations::111122223333:ou/o-abcdefghijkl/ou-ab00-cdefghij
委托人是 IAM 身份中心身份用户或群组

示例:用户

--principal DataLakePrincipalIdentifier=arn:aws:identitystore:::user/<UserID>

示例:群组:

--principal DataLakePrincipalIdentifier=arn:aws:identitystore:::group/<GroupID>
校长是一个 IAM 群组-IAMAllowedPrincipals

Lake Formation 将数据目录中所有数据库和表的Super权限设置为一个IAMAllowedPrincipals默认名为的组。如果数据库或表上存在此群组权限,则您账户中的所有委托人都可以通过 IAM 委托人策略访问该资源。 AWS Glue当您开始使用 Lake Formation 权限来保护之前受 IAM 策略保护的数据目录资源时,它提供了向后兼容性 AWS Glue。

使用 Lake Formation 管理数据目录资源的权限时,需要先撤消对资源的IAMAllowedPrincipals权限,或者将委托人和资源选择为混合访问模式,Lake Formation 权限才能生效。

例如:

--principal DataLakePrincipalIdentifier=IAM_Allowed_Principals
校长是一个 IAM 群组-ALLIAMPrincipals

当您授予对数据目录资源的ALLIAMPrincipals分组权限时,账户中的每位委托人都可以使用 Lake Formation 权限和 IAM 权限访问数据目录资源。

例如:

--principal DataLakePrincipalIdentifier=123456789012:IAMPrincipals

Lake Formation 权限

本部分包含您可以向主体授予的可用的 Lake Formation 权限。

ALTER

权限 针对此项资源授予的权限 被授权者还需要
ALTER DATABASE glue:UpdateDatabase
ALTER TABLE glue:UpdateTable
ALTER LF-Tag lakeformation:UpdateLFTag

具有此权限的主体可以更改数据目录中数据库或表的元数据。对于表,您可以更改列架构并添加列参数。您无法更改元数据表指向的基础数据中的列。

如果要更改的属性是已注册的 Amazon Simple Storage Service (Amazon S3) 位置,则主体必须对新位置具有数据位置权限。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 retail 中的用户授予数据库ALTER权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ALTER" --resource '{ "Database": {"Name":"retail"}}'

以下示例向用户 datalake_user1 授予对数据库 retailinventory 表的 ALTER 权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ALTER" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'

CREATE_DATABASE

权限 针对此项资源授予的权限 被授权者还需要
CREATE_DATABASE 数据目录 glue:CreateDatabase

具有此权限的主体可以在数据目录中创建元数据数据库或资源链接。主体还可以在数据库中创建表。

以下示例CREATE_DATABASE向 AWS 账户 1111-2222-33 datalake_user1 33 中的用户授权。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "CREATE_DATABASE" --resource '{ "Catalog": {}}'

当主体在数据目录中创建数据库时,不会授予对基础数据的权限。将授予以下其他元数据权限(以及将这些权限授予其他人的能力):

  • 数据库中的 CREATE_TABLE

  • ALTER 数据库

  • DROP 数据库

创建数据库时,主体可以选择指定一个 Amazon S3 位置。根据主体是否具有数据位置权限,CREATE_DATABASE 权限可能不足以在所有情况下创建数据库。请务必牢记以下三种情况。

创建数据库用例 所需权限
未指定位置属性。 CREATE_DATABASE 已足够。
指定了位置属性,并且该位置不由 Lake Formation 管理(未注册)。 CREATE_DATABASE 已足够。
指定了位置属性,并且该位置由 Lake Formation(已注册)管理。 需要 CREATE_DATABASE 以及指定位置的数据位置权限。

CREATE_TABLE

权限 针对此项资源授予的权限 被授权者还需要
CREATE_TABLE DATABASE glue:CreateTable

具有此权限的主体可以在指定数据库的数据目录中创建元数据表或资源链接。

以下示例授予用户使用 AWS 账户 1111-2222-3333 在retail数据库中创建表的datalake_user1权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "CREATE_TABLE" --resource '{ "Database": {"Name":"retail"}}'

当某个主体在数据目录中创建表时,系统会将表上的所有 Lake Formation 权限授予给该主体,并且该主体能够将这些权限授予其他主体。

跨账户资助

如果数据库拥有者账户向接收者账户授予 CREATE_TABLE 权限,并且该接收者账户中的用户在拥有者账户的数据库中成功创建了表,则以下规则适用:

  • 接收者账户中的用户和数据湖管理员具有对表的所有 Lake Formation 权限。他们可以将对表的权限授予给其账户中的其他主体;但无法向拥有者账户或任何其他账户中的主体授予权限。

  • 拥有者账户中的数据湖管理员可以向其账户中的其他主体授予对表的权限。

数据位置权限

当您尝试创建指向 Amazon S3 位置的表时,根据您是否具有数据位置权限,CREATE_TABLE 权限可能不足以创建表。请务必牢记以下三种情况。

创建表格用例 所需权限
指定位置不受 Lake Formation 管理(未注册)。 CREATE_TABLE 已足够。
指定位置由 Lake Formation(已注册)管理,并且包含的数据库没有位置属性或具有不是表位置的 Amazon S3 前缀的位置属性。 需要 CREATE_TABLE 以及指定位置的数据位置权限。
指定位置由 Lake Formation(已注册)管理,并且包含的数据库具有一个位置属性,该属性指向已注册的位置且是表位置的 Amazon S3 前缀。 CREATE_TABLE 已足够。

DATA_LOCATION_ACCESS

权限 针对此项资源授予的权限 被授权者还需要
DATA_LOCATION_ACCESS Amazon S3 位置 (Amazon S3 对位置的权限,必须由用于注册位置的角色指定。)

这是唯一的数据位置权限。具有此权限的主体可以创建指向指定 Amazon S3 位置的元数据数据库或表。必须注册该位置。对某个位置具有数据位置权限的主体也对子位置具有位置权限。

以下示例在 AWS 账户 1111-2222-3333 中向用户 datalake_user1 授予对 s3://products/retail 的数据位置权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DATA_LOCATION_ACCESS" --resource '{ "DataLocation": {"ResourceArn":"arn:aws:s3:::products/retail"}}'

查询或更新基础数据不需要 DATA_LOCATION_ACCESS 权限。此权限仅适用于创建数据目录资源。

有关数据位置权限的更多信息,请参阅Underlying data access control

DELETE

权限 针对此项资源授予的权限 被授权者还需要
DELETE TABLE (如果注册了位置,则无需其他 IAM 权限。)

具有此权限的主体可以删除表指定的 Amazon S3 位置的基础数据。主体还可以在 Lake Formation 控制台上查看表,并使用 AWS Glue API 检索有关表的信息。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 inventory 中的用户授予对数据库retail中表的DELETE权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DELETE" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'

此权限仅适用于 Amazon S3 中的数据,不适用于 Amazon Relational Database Service (Amazon RDS) 等其他数据存储中的数据。

DESCRIBE

权限 针对此项资源授予的权限 被授权者还需要
DESCRIBE

表资源链接

数据库资源链接

glue:GetTable

glue:GetDatabase

DESCRIBE DATABASE glue:GetDatabase
DESCRIBE TABLE glue:GetTable
DESCRIBE LF-Tag

glue:GetTable

glue:GetDatabase

lakeformation:GetResourceLFTags

lakeformation:ListLFTags

lakeformation:GetLFTag

lakeformation:SearchTablesByLFTags

lakeformation:SearchDatabasesByLFTags

具有此权限的主体可以查看指定的数据库、表或资源链接。不会隐式授予任何其他数据目录权限,也不会隐式授予任何数据访问权限。数据库和表显示在集成服务的查询编辑器中,但除非授予其他 Lake Formation 权限(例如 SELECT),否则无法对它们进行查询。

例如,对数据库具有 DESCRIBE 权限的用户可以查看数据库和所有数据库元数据(描述、位置等)。但是,用户无法找出数据库包含哪些表,也无法删除、更改或创建数据库中的表。同样,对表具有 DESCRIBE 权限的用户可以查看表和表元数据(描述、架构、位置等),但无法删除、更改或运行对表的查询。

以下是 DESCRIBE 的一些附加规则:

  • 如果用户对数据库、表或资源链接具有其他 Lake Formation 权限,则会隐式授予 DESCRIBE 权限。

  • 如果用户仅对表的列子集具有 SELECT 权限(部分 SELECT),则用户只能查看这些列。

  • 您无法向对表具有部分 SELECT 权限的用户授予 DESCRIBE 权限。反之,您无法为被授予了 DESCRIBE 权限的表指定列包含或排除列表。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 中的用户授予对数据库inventory-linkretail中表资源链接的DESCRIBE权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory-link"}}'

DROP

权限 针对此项资源授予的权限 被授权者还需要
DROP DATABASE glue:DeleteDatabase
DROP TABLE glue:DeleteTable
DROP LF-Tag lakeformation:DeleteLFTag
DROP

数据库资源链接

表资源链接

glue:DeleteDatabase

glue:DeleteTable

具有此权限的主体可以在数据目录中删除数据库、表或资源链接。您无法向外部账户或组织授予对数据库的 DROP 权限。

警告

删除数据库会删除数据库中的所有表。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 retail 中的用户授予数据库DROP权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Database": {"Name":"retail"}}'

以下示例向用户 datalake_user1 授予对数据库 retailinventory 表的 DROP 权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'

以下示例向用户 datalake_user1 授予对数据库 retail 中表资源链接 inventory-linkDROP 权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory-link"}}'

INSERT

权限 针对此项资源授予的权限 被授权者还需要
INSERT TABLE (如果注册了位置,则无需其他 IAM 权限。)

具有此权限的主体可以在表指定的 Amazon S3 位置插入、更新和读取基础数据。主体还可以在 Lake Formation 控制台中查看表,并使用 AWS Glue API 检索有关表的信息。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 inventory 中的用户授予对数据库retail中表的INSERT权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "INSERT" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'

此权限仅适用于 Amazon S3 中的数据,不适用于 Amazon RDS 等其他数据存储中的数据。

SELECT

权限 针对此项资源授予的权限 被授权者还需要
SELECT
  • TABLE

(如果注册了位置,则无需其他 IAM 权限。)

具有此权限的主体可以查看数据目录中的表,并可以在表指定的位置查询 Amazon S3 中的基础数据。主体可以在 Lake Formation 控制台中查看表,并使用 AWS Glue API 检索有关表的信息。如果在授予此权限时应用了列筛选,则主体只能查看所包含列的元数据,并且只能从所包含的列中查询数据。

注意

集成分析服务负责在处理查询时应用列筛选。

以下示例向 AWS 账户 1111-2222-33 datalake_user1 33 inventory 中的用户授予对数据库retail中表的SELECT权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'

此权限仅适用于 Amazon S3 中的数据,不适用于 Amazon RDS 等其他数据存储中的数据。

您可以使用可选的包含列表或排除列表来筛选特定列(限制访问权限)。包含列表指定可以访问的列。排除列表指定无法访问的列。如果没有包含列表或排除列表,则所有表列均可访问。

glue:GetTable 的结果仅返回调用方有权查看的列。Amazon Athena 和 Amazon Redshift 等集成服务支持列包含和排除列表。

以下示例使用包含列表向用户 datalake_user1 授予对表 inventorySELECT 权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'

下一个示例使用排除列表授予对 inventory 表的 SELECT 权限。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["intkey", "prodcode"]}}}'

以下限制适用于 SELECT 权限:

  • 授予 SELECT 时,如果应用了列筛选,则不能包含授权选项。

  • 不能限制对作为分区键的列的访问控制。

  • 不能向对表中的列子集具有 SELECT 权限的主体授予对该表的 ALTERDROPDELETEINSERT 权限。同样,不能通过列筛选向对表具有 ALTERDROPDELETEINSERT 权限的主体授予 SELECT 权限。

SELECT 权限始终作为单独的行显示在 Lake Formation 控制台的数据权限页面上。下图显示向用户 datalake_user2datalake_user3 授予对 inventory 表中所有列的 SELECT 权限。

“数据权限”页面显示两行,分别对应于用户 datalake_user1 和表 inventory。第一行列出了资源类型为 Table 的 Delete 和 Insert 权限,第二行列出了资源类型为 Column 的 Select 权限,同时资源显示为 retail.inventory.*。

Super

权限 针对此项资源授予的权限 被授权者还需要
Super DATABASE glue:*Database*
Super TABLE glue:*Table*, glue:*Partition*

此权限允许主体对数据库或表执行所有支持的 Lake Formation 操作。您无法向外部账户授予对数据库的 Super 权限。

此权限可以与其他 Lake Formation 权限共存。例如,您可以授予对元数据表的 SuperSELECT、和 INSERT 权限。然后,主体可以对表执行所有受支持的操作。撤销 Super 后,SELECTINSERT 权限将保留,且主体只能执行 select 和 insert 操作。

您可以将 Super 授予组 IAMAllowedPrincipals,而不是将其授予单个主体。IAMAllowedPrincipals 组是自动创建的,其中包括 IAM 策略允许访问数据目录资源的所有 IAM 用户和角色。当向 IAMAllowedPrincipals 授予对数据目录资源的 Super 权限时,对该资源的访问实际上完全由 IAM 策略控制。

您可以利用 Lake Form IAMAllowedPrincipals ation 控制台的 “设置” 页面上的选项,自动获得新目录资源的Super权限。

“数据目录设置”对话框的副标题为“新创建的数据库和表的默认权限”,并具有两个复选框,如文本中所述。
  • 要向 IAMAllowedPrincipals 授予对所有新数据数据库的 Super 权限,请选择仅对新数据库使用 IAM 访问控制

  • 要向 IAMAllowedPrincipals 授予对新数据数据库中所有新表的 Super 权限,请选择仅对新数据库中的新表使用 IAM 访问控制

    注意

    此选项会导致默认情况下选中创建数据库对话框中的仅对此数据库中的新表使用 IAM 访问控制复选框。它的作用仅此而已。它是创建数据库对话框中的复选框,用于向 IAMAllowedPrincipals 授予 Super 权限。

默认情况下,将启用这些设置页面选项。有关更多信息,请参阅下列内容:

ASSOCIATE

权限 针对此项资源授予的权限 被授权者还需要
ASSOCIATE LF-Tag

glue:GetDatabase

glue:GetTable

lakeformation:AddLFTagsToResource"

lakeformation:RemoveLFTagsFromResource"

lakeformation:GetResourceLFTags

lakeformation:ListLFTags

lakeformation:GetLFTag

lakeformation:SearchTablesByLFTags

lakeformation:SearchDatabasesByLFTags

对 LF 标签具有此权限的主体可以将 LF 标签分配给数据目录资源。授予 ASSOCIATE 会隐式授予 DESCRIBE 权限。

此示例向用户 datalake_user1 授予对带有键 module 的 LF 标签的 ASSOCIATE 权限。它授予查看和分配该键的所有值的权限,如星号 (*) 所示。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ASSOCIATE" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'