

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

# Lake Formation 最佳实践、注意事项和限制
<a name="lf-limitations"></a>

使用本部分可快速查找 AWS Lake Formation中的最佳实践、注意事项和限制。

请参阅[服务限额](https://docs.aws.amazon.com/general/latest/gr/lake-formation.html#limits_lake-formation)，了解您的 AWS 账户使用的服务资源或操作的最大数量。

**Topics**
+ [跨账户数据共享最佳实践和注意事项](cross-account-notes.md)
+ [服务相关角色限制](service-linked-role-limitations.md)
+ [跨区域数据访问限制](x-region-considerations.md)
+ [数据目录视图注意事项和限制](views-notes.md)
+ [数据筛选限制](data-filtering-notes.md)
+ [混合访问模式注意事项和限制](notes-hybrid.md)
+ [将 Amazon Redshift 数据仓库数据引入的限制 AWS Glue Data Catalog](notes-ns-catalog.md)
+ [S3 表目录集成限制](notes-s3-catalog.md)
+ [Hive 元数据存储数据共享注意事项和限制](notes-hms.md)
+ [Amazon Redshift 数据共享限制](notes-rs-datashare.md)
+ [IAM Identity Center 集成限制](identity-center-lf-notes.md)
+ [Lake Formation 基于标签的访问控制最佳实践和注意事项](lf-tag-considerations.md)
+ [基于属性的访问控制注意事项、限制和支持的区域](abac-considerations.md)

# 跨账户数据共享最佳实践和注意事项
<a name="cross-account-notes"></a>

 Lake Formation 跨账户功能允许用户安全地跨多个 AWS 组织共享分布式数据湖 AWS 账户，或者直接与其他账户中的 IAM 委托人共享分布式数据湖，从而提供对数据目录元数据和底层数据的精细访问权限。

使用 Lake Formation 跨账户数据共享时，请考虑以下最佳实践：
+ 您可以向自己 AWS 账户中的委托人授予的 Lake Formation 权限数量没有限制。但是，Lake For AWS Resource Access Manager mation 使用 (AWS RAM) 容量进行跨账户授权，您的账户可以使用指定的资源方法进行跨账户授权。要最大限度地提高 AWS RAM 容量，请遵循指定资源方法的以下最佳实践：
  +  使用新的跨账户授予模式（**跨账户**版本设置下的版本 3** 及更高版本）与外部 AWS 账户用户**共享资源。有关更多信息，请参阅 [更新跨账户数据共享版本设置](optimize-ram.md)。
  + 将 AWS 账户整理到组织中，并向组织或组织单位授予权限。每向组织或组织单位进行一次授权都计为一次授权。

    授予组织或组织单位还无需接受 AWS Resource Access Manager (AWS RAM) 资源共享邀请即可获得授权。有关更多信息，请参阅 [访问和查看共享数据目录表和数据库](viewing-shared-resources.md)。
  + 可以使用特殊的**所有表** 通配符来授予对数据库中所有表的权限，而不必授予对数据库中许多单独表的权限。每针对**所有表**授予一次权限都计为一次授权。有关更多信息，请参阅 [授予对数据目录资源的权限](granting-catalog-permissions.md)。
**注意**  
有关请求提高资源共享数量限制的更多信息 AWS RAM，请参阅中的[AWS 服务配额*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。
+ 您必须创建指向共享数据库的资源链接，该数据库才能出现在 Amazon Athena 和 Amazon Redshift Spectrum 查询编辑器中。同样，为了能够使用 Athena 和 Redshift Spectrum 查询共享表，您必须创建指向这些表的资源链接。之后，资源链接便会出现在查询编辑器的表列表中。

  您可以使用**所有表**通配符来授予对数据库中所有表的权限，而不必为许多要查询的单独表创建资源链接。然后，当您为该数据库创建资源链接并在查询编辑器中选择该数据库资源链接时，您将可以访问该数据库中的所有表进行查询。有关更多信息，请参阅 [创建资源链接](creating-resource-links.md)。
+ 当您直接与其他账户中的主体共享资源时，接收方账户中的 IAM 主体可能无权创建资源链接，因而无法使用 Athena 和 Amazon Redshift Spectrum 查询共享表。数据湖管理员可以创建占位符数据库并向 `ALLIAMPrincipal` 组授予 `CREATE_TABLE` 权限，而不必为每个共享的表创建资源链接。然后，接收方账户中的所有 IAM 主体均可以在占位符数据库中创建资源链接并开始查询共享表。

   请参阅[使用命名资源方法授予数据库权限](granting-database-permissions.md)中有关向 `ALLIAMPrincipals` 授予权限的 CLI 命令示例。
+ 当直接向主体授予跨账户权限时，只有授予的接收者才能查看这些权限。接收者的 AWS 账户中的数据湖管理员无法查看这些直接授予。
+ Athena 和 Redshift Spectrum 支持列级别访问控制，但仅限于包含，不支持排除。AWS Glue ETL 作业不支持列级别访问控制。
+ 当资源与您的 AWS 账户共享时，您只能向账户中的用户授予该资源的权限。您不能向其他 AWS 账户、组织（甚至不是您自己的组织）或`IAMAllowedPrincipals`群组授予该资源的权限。
+ 您不能向外部账户授予对数据库的 `DROP` 或 `Super` 权限。
+ 在删除数据库或表之前，请撤销跨账户权限。否则，您必须删除中的孤立资源共享。 AWS Resource Access Manager

**另请参阅**  
[Lake Formation 基于标签的访问控制最佳实践和注意事项](lf-tag-considerations.md)
有关跨账户访问的更多规则和限制，请参阅[Lake Formation 权限参考](lf-permissions-reference.md)中的[`CREATE_TABLE`](lf-permissions-reference.md#perm-create-table)。

# 服务相关角色限制
<a name="service-linked-role-limitations"></a>

 服务相关角色是一种特殊类型的 IAM 角色，可直接关联到。 AWS Lake Formation此角色具有预定义的权限，允许 Lake Formation 代表您跨 AWS 服务执行操作。

使用服务相关角色（SLR）向 Lake Formation 注册数据位置时，存在以下限制。
+ 服务相关角色策略一经创建，就无法修改。
+ 服务相关角色不支持跨账户共享加密目录资源。加密资源需要特定的 AWS KMS 密钥权限。服务相关角色具有预定义的权限，其中不包括跨账户处理加密目录资源的能力。
+ 注册多个 Amazon S3 位置时，使用服务相关角色可能会导致您快速超出 IAM 策略限制。之所以发生这种情况，是因为对于与服务相关的角色，它会为你 AWS 编写策略，然后它会增加为一个包含你所有注册的大块。您可以更高效地编写客户管理型策略，在多个策略之间分配权限，或者为不同的区域使用不同的角色。
+ 您使用服务相关角色注册数据位置时，EC2 上的 Amazon EMR 无法访问数据。
+ 服务相关角色操作会绕过您的 AWS 服务控制策略。
+ 当您使用服务相关角色注册数据位置时，该角色会以最终一致性方式更新 IAM 策略。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 故障排除](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html#troubleshoot_general_eventual-consistency)文档。
+  当使用服务相关角色且使用的是 IAM Identity Center 时，您无法在 Lake Formation 数据湖设置中设置 `SET_CONTEXT = TRUE`。原因是服务相关角色具有不可变的信任策略，这些策略与使用 IAM Identity Center 主体进行 `SetContext` 审计所需的可信身份传播不兼容。

# 跨区域数据访问限制
<a name="x-region-considerations"></a>

 Lake Formation 支持跨 AWS 区域查询数据目录表。您可以使用 Amazon Athena Amazon EMR 和 AWS Glue ETL 访问其他区域中的数据，方法是在其他区域中创建指向源数据库和表的资源链接。通过跨区域表访问功能，您可以跨区域访问数据，而无需将基础数据或元数据复制到数据目录中。

以下限制适用于跨区域表访问。
+ Lake Formation 不支持使用 Amazon Redshift Spectrum 从其他地区查询数据目录表。
+ 在 Lake Formation 控制台中，数据库和表视图不显示源区域数据库/表名称。
+ 要从其他区域查看共享数据库下表的列表，您需要先创建指向共享数据库的资源链接，选择该资源链接，然后选择**查看表**。
+ Lake Formation 不支持 SAML 用户进行的跨区域资源链接调用。
+ Lake Formation 的跨区域功能不涉及额外的数据传输费用。

# 数据目录视图注意事项和限制
<a name="views-notes"></a>

 以下注意事项和限制适用于数据目录视图。
+ 您无法从 Lake Formation 控制台创建 Data Catalog 视图。您可以使用 AWS CLI 或 SDK 创建视图。
+ 您可以根据 10 个表创建 Data Catalog 视图。这是一个硬性限制。视图的基础参考表可以属于同一个数据库，也可以属于同一个 AWS 账户中的不同数据库。
+ 有关使用 Redshift 创建 Data Catalog 视图的额外注意事项和限制，请参阅《Amazon Redshift 数据库开发人员指南》中的 [Data Catalog 视图注意事项和限制](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html#data-catalog-views-considerations)部分。有关 Athena 的信息，请参阅《Amazon Athena 用户指南》中的 [Data Catalog 视图注意事项和限制](https://docs.aws.amazon.com/athena/latest/ug/views-glue.html#views-glue-limitations)部分。
+ 在混合访问模式和 Lake Formation 模式下，都可以根据已注册到 Lake Formation 的表创建数据目录视图。

  在 Lake Formation 混合访问模式下使用数据目录视图时，建议确保在不授予访问权限的情况下，视图使用主体选择使用视图中引用的基表的 Lake Formation 权限。这样可以确保基表不会通过 AWS Glue IAM 权限泄露给消费者。
+ 共享视图的跨账号共享版本没有任何限制。
+ 对已创建的视图方言使用 `ALTER VIEW` 语句时，视图也会像数据目录表一样进行版本控制。由于视图版本会随着底层数据的更改而更改，因此无法回滚到以前的视图。您可以删除视图版本，它将默认为下一个可用的最新版本。更改视图版本时，请确保您的数据与所选视图版本架构同步。
+ 没有引入新的 APIs 数据目录。现有的`CreateTable``UpdateTable`、`DeleteTable`和`GetTable` APIs 已更新。
+ Amazon Redshift 始终从带有字符串的表创建包含 varchar 列的视图。从其他引擎添加方言时，您必须将字符串列转换为具有显式长度的 varchar。
+ 向数据库内的 `All tables` 授予数据湖权限将导致被授权者具有对数据库内所有表和视图的权限。
+ 您无法创建视图：
  + 引用其它视图。
  + 当引用表是资源链接时。
  + 当引用表位于另一个账户中时。
  + 来自外部 Hive 元存储。
+ Redshift Spectrum Dialect 视图不支持跨账户定义者角色。
+ 不支持 Athena 查询编辑器中的 Athena 方言的资源链接。要在 Athena 方言中使用跨账户定义者角色，请将托管基表的账户添加为 Athena 中的数据源。

# 数据筛选限制
<a name="data-filtering-notes"></a>

当您授予对数据目录表的 Lake Formation 权限时，可以包括数据筛选规范，以限制对查询结果中以及与 Lake Formation 集成的引擎中某些数据的访问。Lake Formation 使用数据筛选来实现列级别安全性、行级别安全性以及单元格级别安全性。如果源数据包含嵌套结构，则可以对嵌套列定义和应用数据筛选条件。

## 有关列级别筛选的注意事项和限制
<a name="column-filtering-notes"></a>

指定列筛选的方法有三种：
+ 通过使用数据筛选条件
+ 通过使用简单的列筛选或嵌套列筛选。
+ 通过使用 TAGs.

简单列筛选仅指定要包含或排除的列的列表。Lake Formation 控制台、API 和都 AWS CLI 支持简单的列筛选。有关示例，请参阅[Grant with Simple Column Filtering](granting-table-permissions.md#simple-column-filter-example)。

以下注意事项和限制适用于列筛选：
+ AWS Glue 5.0 或更高版本仅支持通过 Lake Formation 对 Apache Hive 和 Apache Iceberg 表进行精细访问控制。
+ 要使用授权选项和列筛选来授予 `SELECT`，必须使用包含列表，而不是排除列表。如果没有授权选项，则可以使用包含列表或排除列表。
+ 要使用列筛选来授予对表的 `SELECT`，您必须已通过授权选项获得了对该表的 `SELECT`，且没有任何行限制。您必须有权访问所有行。
+ 如果您使用授权选项和列筛选向您账户中的主体授予 `SELECT`，则该主体在向其他主体授予权限时，必须为相同列指定列筛选，或指定部分已授权列。如果您使用授权选项和列筛选向外部账户授予 `SELECT`，则外部账户中的数据湖管理员可以将对所有列的 `SELECT` 授予其账户中的其他主体。但是，即使对所有列均具有 `SELECT`，该主体也只能查看授权外部账户查看的列。
+ 您不能对分区键应用列筛选。
+ 不能向对表中部分列拥有 `SELECT` 权限的主体授予对该表的 `ALTER`、`DROP`、`DELETE` 或 `INSERT` 权限。对于对表拥有 `ALTER`、`DROP`、`DELETE` 或 `INSERT` 权限的主体，如果您使用列筛选来授予 `SELECT` 权限，则授予无效。

以下注意事项和限制适用于嵌套列筛选：
+  您可以在数据筛选条件中包含或排除五个级别的嵌套字段。  
**Example**  

  Col1.Col1\$11.Col1\$11\$11.Col1\$11\$11\$11.Col1\$11\$11\$11\$11
+  您不能对分区列中的嵌套字段应用列筛选。
+  如果您的表架构包含顶级列名（“客户”。” ad `address` dress”）在数据筛选器中具有相同的嵌套字段表示模式（具有顶级列名`customer`和嵌套字段名的嵌套列的指定方式与数据筛选器`"customer"."address"`中的嵌套字段名称相同），则无法明确指定对顶级列或嵌套字段的访问权限，因为两者在 inclusion/exclusion 列表中使用相同的模式表示。这是不明确的，如果您指定顶级列或嵌套字段，Lake Formation 将无法解析。
+ 如果顶级列或嵌套字段的名称中包含双引号，则在数据单元格筛选条件的包含和排除列表中指定对嵌套字段的访问权限时，必须包含第二个双引号。  
**Example**  

  带双引号的嵌套列名称示例 – `a.b.double"quote`  
**Example**  

  数据筛选条件中的嵌套列表示形式示例 – ` "a"."b"."double""quote"`

## 单元格级筛选限制
<a name="cell-filtering-notes.title"></a>

请牢记以下关于行级别筛选和单元格级别筛选的注意事项和限制。
+  嵌套列、视图和资源链接不支持单元格级安全性。
+ 嵌套列也支持顶级列支持的所有表达式。但是，定义嵌套的行级别表达式时，**不**应引用分区列下的嵌套字段。
+  使用 Athena 引擎版本 3 或 Amazon Redshift Spectrum 时，所有区域均可提供单元格级别安全性。对于其他服务，只有[支持的区域：](supported-regions.md)上提及的区域提供单元格级别安全性。
+  不支持 `SELECT INTO` 语句。
+ 行筛选条件表达式不支持 `array` 和 `map` 数据类型。支持 `struct` 数据类型。
+ 可以针对表定义的数据筛选条件数量没有限制，但是对于表上的单个主体，则存在 100 个数据筛选条件的限制。
+ 要使用行筛选表达式应用数据筛选条件，必须使用授权选项获得对所有表列的 `SELECT`。当向外部账户授予权限时，此限制不适用于外部账户的管理员。
+ 如果主体是组的成员，并且主体和该组都被授予了对部分行的权限，则主体的有效行权限是主体权限和组权限的并集。
+ 在行级别筛选和单元格级别筛选中，以下列名受限：
  + ctid
  + oid
  + xmin
  + cmin
  + xmax
  + cmax
  + tableoid
  + insertxid
  + deletexid
  + importoid
  + redcatuniqueid
+ 如果将 all-rows 筛选表达式与其他带有谓词的筛选表达式同时应用于表，则 all-rows 表达式将优先于所有其他筛选表达式。
+ 当向外部账户授予行子集的权限，而外部 AWS 账户的数据湖管理员向该账户中的委托人授予这些权限时，委托人的有效筛选谓词是该账户的谓词和直接授予委托人的任何谓词的交集。

  例如，如果账户通过谓词 `dept='hr'` 获得了行权限，而主体被单独授予了对 `country='us'` 的该权限，则主体只能访问带有 `dept='hr'` 和 `country='us'` 的行。

有关单元格级别筛选的更多信息，请参阅[Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)。

有关使用带有行级安全策略的 Amazon Redshift Spectrum 查询表时的注意事项和限制，请参阅《Amazon Redshift 数据库开发人员指南》中的[使用 RLS 策略的注意事项和限制](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_usage.html)。

# 混合访问模式注意事项和限制
<a name="notes-hybrid"></a>

混合访问模式使您可以灵活地且有选择性地为 AWS Glue Data Catalog中的数据库和表启用 Lake Formation 权限。  在混合访问模式下，您现在有了增量路径，允许您为一组特定的用户设置 Lake Formation 权限，而不会中断其他现有用户或工作负载的权限策略。

以下注意事项和限制适用于混合访问模式。

**限制**
+ **更新 Amazon S3 位置注册** – 您无法编辑使用服务相关角色在 Lake Formation 中注册的位置的参数。
+ **使用 LF 标签时选择选项** – 当您可以使用 LF 标签授予 Lake Formation 权限时，您可以执行连续的一步，选择主体和附加了 LF 标签的数据库和表来强制实施 Lake Formation 权限。
+ **混合访问模式访问**：Lake Formation 中的混合访问模式仅限于具有数据湖管理员或只读管理员权限的用户。
+ **选择主体** – 目前，只有数据湖管理员角色可以针对资源选择主体。
+ **选择数据库中的所有表** – 在跨账户授权中，当您授予权限并选择数据库中的所有表时，需要选择数据库才能使权限生效。

**注意事项**
+ **将在 Lake Formation 中注册的 Amazon S3 位置更新为混合访问模式** — 尽管可以将已经在 Lake Formation 中注册的 Amazon S3 数据位置转换为混合访问模式，但我们不建议这样做。
+  **在混合访问模式下注册数据位置时的 API 行为** 
  + CreateTable — 无论混合访问模式旗帜和选择加入状态如何，该位置都被视为已在 Lake Formation 中注册。因此，用户需要拥有数据位置权限才能创建表。
  + CreatePartition/BatchCreatePartitions/UpdatePartitions（当分区位置更新为指向混合模式注册的位置时）— 无论混合访问模式标志和选择加入状态如何，Amazon S3 位置都被视为已在 Lake Formation 中注册。因此，用户需要拥有数据位置权限才能创建或更新数据库。
  + CreateDatabase/UpdateDatabase （当数据库位置更新为指向在混合访问模式下注册的位置时）— 无论混合访问模式标志和选择加入状态如何，该位置都被视为已在 Lake Formation 中注册。因此，用户需要拥有数据位置权限才能创建或更新数据库。
  + UpdateTable （当表格位置更新为指向在混合访问模式下注册的位置时）— 无论混合访问模式标志和选择加入状态如何，该位置都被视为已在 Lake Formation 中注册。因此，用户需要拥有数据位置权限才能更新表。如果表位置未更新或指向未在 Lake Formation 中注册的位置，则用户无需数据位置权限即可更新表。

# 将 Amazon Redshift 数据仓库数据引入的限制 AWS Glue Data Catalog
<a name="notes-ns-catalog"></a>

您可以使用 AWS Glue Data Catalog编目和管理对 Amazon Redshift 数据仓库中分析数据的访问权限。适用以下限制：
+ 在联合目录级别不支持跨账户共享。但是，您可以跨 AWS 账户越联合目录共享各个数据库和表。
+  您必须具有**跨账户版本设置**版本 4 或更高版本，才能跨 AWS 账户越多个共享联合目录中的数据库或表。
+  Data Catalog 支持创建仅顶层目录。
+  您只能在 Redshift 托管式存储（RMS）中更新目录的描述。
+ 不支持将联合目录以及联合目录中的数据库和表的权限设置到 `IAMAllowedPrincipals` 组。
+ 不支持通过 Athena、Amazon EMR Spark 等引擎对目录进行数据定义语言（DDL）操作，包括设置目录配置。
+  不支持使用 Athena 对 RMS 表执行 DDL 操作。
+ 不支持创建物化视图，无论是通过 Athena、Apache Spark 还是通过 Amazon Redshift AWS Glue Data Catalog使用者。
+  Athena 不支持多目录体验。一次只能连接到一个特定目录。Athena 无法同时访问或查询多个目录。
+ 不支持通过 Athena 和 Amazon Redshift 对 Iceberg 表进行标记和分支操作。
+ 不支持对 RMS 表执行时间旅行查询。
+ 不支持带有数据湖表的多级目录。存储在 Amazon S3 中用于数据湖表的所有数据都必须位于默认数据中 AWS Glue Data Catalog，并且不能组织成多级目录。
+ 在 Amazon Redshift 中，数据共享不会添加到已注册的命名空间。集群和命名空间是同义词，一旦您将集群发布到中 AWS Glue Data Catalog，就无法添加新数据。
+ EC2 上的 Amazon EMR 不支持联接 RMS 表和 Amazon S3 表类数据存储服务。只有 EMR Serverless 才支持此功能。
+ 不支持外部架构和表。
+ 只能从 AWS Glue Iceberg REST 目录中的扩展端点访问 RMS 表。
+ 连接到 I AWS Glue ceberg REST 目录的第三方引擎无法访问 Hive 表。
+ 通过 Spark 对 RMS 表使用 read\$1committed 隔离级别将得到支持。
+ Redshift 数据库名称在中被视为不区分大小写 AWS Glue Data Catalog，限制为 128 个字符，并且可以是带有破折号 (-) 和下划线 (\$1) 的字母数字。
+ 目录名称不区分大小写，限制为 50 个字符，并且可以是带连字符（-）和下划线（\$1）的字母数字字符。
+ Amazon Redshift 不支持使用 Lake Formation SQL 风格的 GRANT 和 REVOKE 命令来管理发布到 AWS Glue Data Catalog的表的访问权限。
+ 不会强制执行附加到创建者（来源）Amazon Redshift 集群的行级安全和动态数据掩蔽策略。相反，将对共享数据实施 Lake Formation 中定义的访问权限。
+ 不支持对表链接执行数据定义语言（DDL）和数据操作语言（DML）操作。
+ 如果未正确转义保留的关键字，则会导致失败或错误。
+ 不支持在多目录场景中对数据进行加密。

# S3 表目录集成限制
<a name="notes-s3-catalog"></a>

 Amazon S3 表格与 AWS Glue Data Catalog （数据目录）集成，并将该目录注册为 Lake Formation 数据位置。您可以从 Lake Formation 控制台或使用该服务来设置此注册 APIs。

**注意**  
如果您有基于资源的 IAM 或 S3 Tables 策略，该策略根据委托人标签限制 IAM 用户和 IAM 角色，则必须向 IAM 角色附加与 Lake Formation 用于访问您的 S3 数据相同的委托人标签（例如 LakeFormationDataAccessRole），并向该角色授予必要的权限。这是基于标签的访问控制策略与 S3 表类数据存储服务分析集成正常协同工作所必需的。

 以下限制适用于将 S3 表目录与数据目录和 Lake Formation 集成：
+ AWS Glue 而且 Lake Formation 不支持大小写混合的列名，而是将所有列名转换为小写。在转换为小写时，必须确认表列名为唯一。使用 `customer_id`，而不使用 `customerId`。只有在预览版中才支持使用大小写混合的列名。
+  CreateCatalog API 无法在 Amazon S3 中创建表存储桶。
+  SearchTables API 无法搜索 S3 表。

# Hive 元数据存储数据共享注意事项和限制
<a name="notes-hms"></a>

借助 AWS Glue Data Catalog 元数据联合（数据目录联合），您可以将数据目录连接到存储您的 Amazon S3 数据元数据的外部元数据存储，并使用 AWS Lake Formation安全地管理数据访问权限。

以下注意事项和限制适用于从 Hive 数据库创建的联合数据库：

**注意事项**
+ **AWS SAM 应用程序支持** — 您负责 AWS SAM 部署的应用程序资源（Amazon API Gateway 以及 Lambda 函数）的可用性。当用户运行查询时，请确保 AWS Glue Data Catalog 和 Hive 元数据仓之间的连接正常。
+ **Hive 元存储版本要求** – 您只能使用 Apache Hive 版本 3 及更高版本创建联合数据库。
+ **映射数据库要求** — 每个 Hive 数据库都必须映射到 Lake Formation 中的新数据库。
+ **数据库级别联合身份验证支持** – 您只能在数据库级别连接到 Hive 元存储。
+ **对联合数据库的权限** – 即使删除了源表或数据库，应用于联合数据库或联合数据库下的表的权限也将保留。重新创建源数据库或表时，您无需重新授予权限。当在来源中删除具有 Lake Formation 权限的联合表时，Lake Formation 权限仍然显示，您可以根据需要撤销这些权限。

  如果用户删除联合数据库，则其所有相应权限都将丢失。重新创建同名的相同数据库将无法恢复 Lake Formation 权限。用户必须重新设置新权限。
+ IAMAllowed联合数据库@@ **的主组权限**-基于此`DataLakeSettings`，Lake Formation 可能会将所有数据库和表的权限设置为名为的虚拟组`IAMAllowedPrincipal`。是`IAMAllowedPrincipal`指通过 IAM 委托人策略和 AWS Glue 资源策略访问数据目录资源的所有 IAM 委托人。如果对某数据库或表存在这些权限，则所有主体均被授予对该数据库或表的访问权限。

   但是，Lake Formation 不允许对联合数据库下的表实施 `IAMAllowedPrincipal` 权限。创建联合数据库时，请确保将 `CreateTableDefaultPermissions` 参数作为空列表传递。

  有关更多信息，请参阅 [更改数据湖的默认设置](change-settings.md)。
+ **在查询中联接表** – 您可以将 Hive 元存储表与数据目录本机表联接以运行查询。

**限制**
+  **在 AWS Glue Data Catalog 和 Hive 元数据仓之间同步元数据的限制 — 建立 Hive 元**数据仓连接后，您需要创建一个联合数据库，以便将 Hive 元数据仓中的元数据与同步。 AWS Glue Data Catalog当用户运行查询时，联合数据库下的表将在运行时同步。
+  **有关在联合数据库下创建新表的限制** – 您将无法在联合数据库下创建新表。
+ **数据权限的限制** — 不支持对 Hive 元存储表视图的权限。

# Amazon Redshift 数据共享限制
<a name="notes-rs-datashare"></a>

AWS Lake Formation 允许您安全地管理来自亚马逊 Redshift 的数据共享中的数据。Amazon Redshift 是一项完全托管的 PB 级云端数据仓库服务。 AWS 使用数据共享功能，Amazon Redshift 可帮助您跨 AWS 账户共享数据。有关 Amazon Redshift 数据共享的更多信息，请参阅 [Amazon Redshift 中的数据共享概述](https://docs.aws.amazon.com/redshift/latest/dg/data_sharing_intro.html)。

 以下注意事项和限制适用于通过 Amazon Redshift 数据共享创建的联合数据库：
+ **映射的数据库要求** — 每个 Amazon Redshift 数据共享都必须映射到 Lake Formation 中的一个新数据库。当数据目录数据库中的数据共享对象表示形式精简化时，这是保持表名的唯一性所必需的。
+ **有关在联合数据库下创建新表的限制** – 您将无法在联合数据库下创建新表。
+ **对联合数据库的权限** – 即使删除了源表或数据库，应用于联合数据库或联合数据库下的表的权限也仍然存在。重新创建源数据库或表时，无需重新授予权限。当从来源中删除具有 Lake Formation 权限的联合表时，Lake Formation 权限仍然显示，并且您可以根据需要撤销这些权限。

  如果用户删除联合数据库，则其所有相应权限都将丢失。重新创建同名的相同数据库将无法恢复 Lake Formation 权限。用户必须重新设置新权限。
+ **IAMAllowed联合数据库的主组权限**-基于此`DataLakeSettings`，Lake Formation 可能会将所有数据库和表的权限设置为名为的虚拟组`IAMAllowedPrincipal`。是`IAMAllowedPrincipal`指通过 IAM 委托人策略和 AWS Glue 资源策略访问数据目录资源的所有 IAM 委托人。如果对某数据库或表存在这些权限，则所有主体均被授予对该数据库或表的访问权限。

  但是，Lake Formation 不允许对联合数据库下的表实施 `IAMAllowedPrincipal` 权限。创建联合数据库时，请确保将 `CreateTableDefaultPermissions` 参数作为空列表传递。

  有关更多信息，请参阅 [更改数据湖的默认设置](change-settings.md)。
+ **数据筛选** – 在 Lake Formation 中，您可以使用列级别和行级别筛选来授予对联合数据库下表的权限。但是，您不能结合使用列级别和行级别筛选来限制以单元格级别粒度对联合数据库下的表进行访问。
+ **区分大小写的标识符** – 由 Lake Formation 管理的 Amazon Redshift 数据共享对象仅支持小写的表名和列名。如果将使用 Lake Formation 共享和管理 Amazon Redshift 数据共享中的数据库、表和列，请勿针对它们启用区分大小写的标识符。
+ **查询支持** – 您可以使用 Amazon Redshift 查询由 Lake Formation 管理的 Amazon Redshift 数据共享。Athena 不支持查询由 Lake Formation 管理的 Amazon Redshift 数据共享。

 有关在 Amazon Redshift 中使用数据共享的限制的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》中的[数据共享限制](https://docs.aws.amazon.com/redshift/latest/dg/datashare-overview.html#limitations-datashare)。

# IAM Identity Center 集成限制
<a name="identity-center-lf-notes"></a>

借 AWS IAM Identity Center助，您可以连接到身份提供商 (IdPs)，并集中管理 AWS 分析服务中用户和群组的访问权限。您可以在 IAM Identity Center 中配置 AWS Lake Formation 为已启用的应用程序，数据湖管理员可以向授权用户和群组授予对 AWS Glue Data Catalog 资源的精细权限。

以下限制适用于 Lake Formation 与 IAM Identity Center 的集成：
+ 您无法在 Lake Formation 中将 IAM Identity Center 用户和组分配为数据湖管理员或只读管理员。

  如果您使用的是可以代表您加密和解密数据目录的 IAM 角色，则 IAM Identity Center 用户和群组 AWS Glue 可以查询加密的数据目录资源。 AWS 托管密钥不支持可信身份传播。
+ IAM Identity Center 用户和组只能调用 IAM Identity Center 提供的 `AWSIAMIdentityCenterAllowListForIdentityContext` 策略中列出的 API 操作。
+  Lake Formation 允许外部账户中的 IAM 角色代表 IAM Identity Center 用户和组作为访问数据目录资源的载体角色，但只能在所有者账户内授予对数据目录资源的权限。如果您尝试在外部账户中向 IAM Identity Center 用户和组授予对数据目录资源的权限，那么 Lake Formation 会引发以下错误：“主体不支持跨账户授权。” 
+ 将 Lake Formation 与 IAM Identity Center 配合使用时，应用程序分配配置默认设置为 `false`。如果您直接通过 [IAM Identity Center API](https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_PutApplicationAssignmentConfiguration.html) 修改此配置，则必须使用该 API 手动管理所有应用程序分配。Lake Formation 不会自动同步或管理在其标准工作流之外所进行的分配更改，这可能会影响数据湖环境中的访问模式和授权流。

# Lake Formation 基于标签的访问控制最佳实践和注意事项
<a name="lf-tag-considerations"></a>

您可以创建、维护和分配 LF 标签以控制对数据目录数据库、表和列的访问。

使用 Lake Formation 基于标签的访问控制时，请考虑以下最佳实践：
+ 必须先预定义所有 LF 标签，然后才能将其分配给数据目录资源 或授予给主体。

  数据湖管理员可以通过创建具有所需 IAM 权限的 *LF 标签创建者*来委派标签管理任务。数据工程师和分析师决定 LF 标签的特征和关系。然后，LF 标签创建者在 Lake Formation 中创建和维护 LF 标签。
+ 您可以将多个 LF 标签分配给数据目录资源。只能将特定键的一个值分配给特定资源。

  例如，您可以将 `module=Orders`、`region=West` 和 `division=Consumer` 等分配给数据库、表或列。您无法分配 `module=Orders,Customers`。
+ 创建资源时，您无法将 LF 标签分配给资源。您只能将 LF 标签添加到现有资源。
+ 您可以向主体授予 LF 标签表达式，而不仅仅是单个 LF 标签。

  LF 标签表达式如下所示（使用伪代码）。

  ```
  module=sales AND division=(consumer OR commercial)
  ```

  被授予此 LF 标签表达式的主体只能访问分配了 `module=sales` 和 `division=consumer` 或 `division=commercial` 的数据目录资源（数据库、表和列）。**如果您希望主体能够访问具有 `module=sales` 或 `division=commercial` 的资源，请不要将两者都包含在同一个授予中。**进行两次授予，一次用于 `module=sales`，一次用于 `division=commercial`。

  最简单的 LF 标签表达式仅包含一个 LF 标签，例如 `module=sales`。
+ 被授予对具有多个值的 LF 标签的权限的主体可以使用其中任一值访问数据目录资源。例如，如果用户被授予 key=`module` 和 values=`orders,customers` 的 LF 标签，则该用户有权访问分配了 `module=orders` 或 `module=customers` 的资源。
+ 您需要具有 `Grant with LF-Tag expressions` 权限，才能使用 LF-TBAC 方法授予对数据目录资源的数据权限。数据湖管理员和 LF 标签创建者会隐式接收此权限。具有 `Grant with LFTag expressions` 权限的主体可以使用以下方式授予对资源的数据权限
  + 命名资源方法
  + LF-TBAC 方法，但只能使用相同的 LF 标签表达式

    例如，假设数据湖管理员进行以下授予（使用伪代码）。

    ```
    GRANT (SELECT ON TABLES) ON TAGS module=customers, region=west,south TO user1 WITH GRANT OPTION
    ```

    在这种情况下，`user1` 可以使用 LF-TBAC 方法向其他主体授予对表的 `SELECT` 权限，但只能使用完整的 LF 标签表达式 `module=customers, region=west,south`。
+ 如果同时使用 LF-TBAC 方法和命名资源方法向主体授予对资源的权限，则主体对资源具有的权限是这两种方法授予的权限的联合。
+ Lake Formation 支持跨账户授予对 LF 标签的 `DESCRIBE` 和 `ASSOCIATE` 权限，以及支持使用 LF-TBAC 方法跨账户授予对数据目录资源的权限。在这两种情况下，本金都是 AWS 账户 ID。
**注意**  
Lake Formation 支持使用 LF-TBAC 方法向组织和组织单位进行跨账户授予。要使用此功能，您需要将**跨账户版本设置**更新为**版本 3**。

  有关更多信息，请参阅 [Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。
+ 在一个账户中创建的数据目录资源只能使用在同一账户中创建的 LF 标签进行标记。在一个账户中创建的 LF 标签不能与另一个账户中的共享资源关联。
+ 使用基于 Lake Formation 标签的访问控制 (LF-TBAC) 授予跨账户访问数据目录资源的权限，需要为您的账户添加数据目录资源策略。 AWS 有关更多信息，请参阅 [先决条件](cross-account-prereqs.md)。
+ LF 标签键和 LF 标签值的长度不能超过 50 个字符。
+ 可以分配给数据目录资源的 LF 标签的最大数量为 50。
+ 以下限制是软限制：
  + 可以创建的 LF 标签的最大数量为 1000。
  + 可以为 LF 标签定义的值的最大数量为 1000。
+ 标签、键和值在存储时将全部转换为小写。
+ 只能将 LF 标签的一个值分配给特定资源。
+ 如果通过一次授予向主体授予多个 LF 标签，则该主体只能访问具有所有 LF 标签的数据目录资源。
+ 如果 LF 标签表达式计算仅导致访问表列的子集，但在匹配时授予的 Lake Formation 权限是需要完整列访问权限的权限之一，即 `Alter`、`Drop`、`Insert` 或 `Delete`，则不会授予这些权限。相反，仅会授予 `Describe` 权限。如果授予的权限为 `All` (`Super`)，则仅会授予 `Select` 和 `Describe` 权限。
+ 通配符不与 LF 标签一起使用。要将 LF 标签分配给某个表的所有列，请将 LF 标签分配给该表，并且表中的所有列都将继承该 LF 标签。要将 LF 标签分配给某个数据库中的所有表，请将 LF 标签分配给该数据库，并且数据库中的所有表都将继承该 LF 标签。
+  在一个账户中，最多可以创建 1000 个 LF 标签表达式。
+  您最多可以使用 50 个 LF 标签表达式向主体授予对 Data Catalog 资源的权限。
+  授予或撤消对内联 LF 标签表达式的权限时，LF 标签表达式的大小不能超过 900 个字节。要对较大的 LF 标签表达式授予权限，请使用已保存的 LF 标签表达式。有关更多信息，请参阅 [创建 LF 标签表达式](TBAC-creating-tag-expressions.md)。
+ 要将 LF-Tag 添加到联合目录 LF-Tag 支持正式发布之前创建的现有 Redshift 联合目录，您需要联系支持团队寻求帮助。 AWS 

# 基于属性的访问控制注意事项、限制和支持的区域
<a name="abac-considerations"></a>

以下注意事项和限制适用于基于属性的访问权限控制（ABAC）。
+ ABAC 不支持使用 LF 标签策略授予访问权限。
+ ABAC 不提供可授予的权限。
+ ABAC 不支持向 IAM Identity Center 用户授予权限。
+ 在 Lake Formation 中对表使用 ABAC 授予时，Lake Formation 不会向父数据库或目录授予 `DESCRIBE` 权限。这与非 ABAC 场景不同，在非 ABAC 场景中，Lake Formation 会向父资源提供隐式 `DESCRIBE` 权限。
+ 对于所有 Data Catalog 资源，所有具有 `AmazonDataZoneProject` 标签键的主体始终被视为已选择加入 Lake Formation。
+ ABAC 仅支持字符串属性。