本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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-permissions 和revoke-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-permissions 和 revoke-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
授予对数据库 retail
中 inventory
表的 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 |
表资源链接 数据库资源链接 |
|
DESCRIBE |
DATABASE |
glue:GetDatabase |
DESCRIBE |
TABLE |
glue:GetTable |
DESCRIBE |
LF-Tag |
|
具有此权限的主体可以查看指定的数据库、表或资源链接。不会隐式授予任何其他数据目录权限,也不会隐式授予任何数据访问权限。数据库和表显示在集成服务的查询编辑器中,但除非授予其他 Lake Formation 权限(例如 SELECT
),否则无法对它们进行查询。
例如,对数据库具有 DESCRIBE
权限的用户可以查看数据库和所有数据库元数据(描述、位置等)。但是,用户无法找出数据库包含哪些表,也无法删除、更改或创建数据库中的表。同样,对表具有 DESCRIBE
权限的用户可以查看表和表元数据(描述、架构、位置等),但无法删除、更改或运行对表的查询。
以下是 DESCRIBE
的一些附加规则:
-
如果用户对数据库、表或资源链接具有其他 Lake Formation 权限,则会隐式授予
DESCRIBE
权限。 -
如果用户仅对表的列子集具有
SELECT
权限(部分SELECT
),则用户只能查看这些列。 -
您无法向对表具有部分 SELECT 权限的用户授予
DESCRIBE
权限。反之,您无法为被授予了DESCRIBE
权限的表指定列包含或排除列表。
以下示例向 AWS 账户 1111-2222-33 datalake_user1
33 中的用户授予对数据库inventory-link
retail
中表资源链接的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 |
数据库资源链接 表资源链接 |
|
具有此权限的主体可以在数据目录中删除数据库、表或资源链接。您无法向外部账户或组织授予对数据库的 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
授予对数据库 retail
中 inventory
表的 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-link
的 DROP
权限。
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 |
|
(如果注册了位置,则无需其他 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
授予对表 inventory
的 SELECT
权限。
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
权限的主体授予对该表的ALTER
、DROP
、DELETE
或INSERT
权限。同样,不能通过列筛选向对表具有ALTER
、DROP
、DELETE
或INSERT
权限的主体授予SELECT
权限。
SELECT
权限始终作为单独的行显示在 Lake Formation 控制台的数据权限页面上。下图显示向用户 datalake_user2
和 datalake_user3
授予对 inventory
表中所有列的 SELECT
权限。
Super
权限 | 针对此项资源授予的权限 | 被授权者还需要 |
---|---|---|
Super |
DATABASE |
glue:*Database*
|
Super |
TABLE |
glue:*Table*, glue:*Partition* |
此权限允许主体对数据库或表执行所有支持的 Lake Formation 操作。您无法向外部账户授予对数据库的 Super
权限。
此权限可以与其他 Lake Formation 权限共存。例如,您可以授予对元数据表的 Super
、SELECT
、和 INSERT
权限。然后,主体可以对表执行所有受支持的操作。撤销 Super
后,SELECT
和 INSERT
权限将保留,且主体只能执行 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 |
|
对 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":["*"]}}'