使用 Athena 查询向 Lake Formation 注册的数据时的注意事项和限制 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 Athena 查询向 Lake Formation 注册的数据时的注意事项和限制

使用 Athena 查询在 Lake Formation 中注册的数据时,请考虑以下因素。有关其他信息,请参阅 AWS Lake Formation 中的 已知问题AWS Lake Formation Developer Guide

在使用 Avro 和自定义 SerDe 的某些情况下,未经授权的用户可以看到列元数据

Lake Formation 列级授权可防止用户访问自己没有 Lake Formation 权限的列中的数据。但是,在某些情况下,用户可以访问描述表中所有列的元数据,包括他们对其中的数据没有权限的列。

当列元数据使用 Avro 存储格式或使用自定义串行器/解串器 (SerDe) 存储在表的表属性中(其中表架构在表属性中与 SerDe 定义一起定义)时,会发生这种情况。在将 Athena 与 Lake Formation 一起使用时,我们建议您查看向 Lake Formation 注册的表属性的内容,并在可能的情况下限制存储在表属性中的信息,以防止任何敏感元数据对用户可见。

使用 Lake Formation 权限查看视图

对于向 Lake Formation 注册的数据,Athena 用户只有在对 VIEW 所基于的表、列和源 Lake Formation数据位置具有 Amazon S3 权限时,才能创建 VIEW。在 VIEW 中创建 Athena 后,Lake Formation 权限可以应用于 VIEW。列级权限不可用于 VIEW。对 Lake Formation 具有 VIEW 权限但对视图所基于的表和列没有权限的用户无法使用 VIEW 查询数据。但是,具有此权限组合的用户可以使用语句(如 DESCRIBE VIEWSHOW CREATE VIEWSHOW COLUMNS)查看 VIEW 元数据。因此,请确保对于每个 Lake Formation 的 VIEW 权限与基础表权限一致。

未向 Athena 注册的 Amazon S3 中的 Lake Formation 查询结果位置

The query results locations in Amazon S3 for Athena cannot be registered with Lake Formation. Lake Formation permissions do not limit access to these locations. Unless you limit access, Athena users can access query result files and metadata when they do not have Lake Formation permissions for the data. To avoid this, we recommend that you use workgroups to specify the location for query results and align workgroup membership with Lake Formation permissions. You can then use IAM permissions policies to limit access to query results locations. For more information about query results, see 使用查询结果、输出文件和查询历史记录.

使用 Athena 工作组限制对查询历史记录的访问

Athena query history exposes a list of saved queries and complete query strings. Unless you use workgroups to separate access to query histories, Athena users who are not authorized to query data in Lake Formation are able to view query strings run on that data, including column names, selection criteria, and so on. We recommend that you use workgroups to separate query histories, and align Athena workgroup membership with Lake Formation permissions to limit access. For more information, see 使用工作组控制查询访问和成本.

跨账户Data Catalog访问

要访问另一个账户中的数据目录,您可以使用以下方法之一:

  • 在 中设置跨账户访问Lake Formation。

  • 使用 Athena 跨账户 AWS Lambda 函数将查询联合到Data Catalog您选择的 中。

在 中设置跨账户访问 Lake Formation

AWS Lake Formation 允许您使用单个 账户来管理中央 Data Catalog。您可以使用此功能实现对元数据和底层数据的跨账户访问Data Catalog。例如,所有者账户可以向另一个(收件人)账户授予对 表SELECT的权限。要在Athena查询编辑器中显示共享数据库或表,请在 中创建指向共享数据库或表的资源链接Lake Formation。当 中的收件人账户Lake Formation查询所有者的表时, 会将数据访问事件CloudTrail添加到收件人账户和所有者账户的日志中。

有关更多信息,请参阅 中的以下资源AWS Lake Formation 开发人员指南:

跨账户访问

资源链接在 Lake Formation 中的工作方式

跨账户 CloudTrail 日志记录

使用 Athena 跨账户Lambda函数

您可以使用 Athena 连接到外部 Hive 元存储。Hive 元存储功能使用 Lambda 函数将查询联合到Data Catalog您选择的 中。此相同功能可以将目录查询代理到不同账户Data Catalog中的 。

有关步骤,请参阅 大数据博客中的使用 Amazon Athena 进行AWS跨账户 AWS Glue 数据目录访问。

无法在 Amazon S3 中查询向 Lake Formation 注册的 CSE-KMS 加密的 Athena 位置

注册到 Amazon S3 并使用客户端加密 (CSE) 以及 Lake Formation 客户管理的密钥进行加密的 AWS KMS 位置,不能使用 Athena 来查询。您仍然可以使用 Athena 查询未向 Amazon S3 注册的 CSE-KMS 加密的 Lake Formation 数据位置,并使用 IAM 策略以允许或拒绝访问。

向 注册的分区数据位置Lake Formation必须位于表子目录中

向 注册的分区表Lake Formation必须在作为 中表的子目录的目录中具有分区数据Amazon S3。例如,可以向 s3://mydata/mytable 注册并使用 s3://mydata/mytable/dt=2019-07-11 查询具有位置 s3://mydata/mytable/dt=2019-07-12 和分区 Lake Formation、Athena 等的表。另一方面,无法向 s3://mydata/mytable 注册具有位置 s3://mydata/dt=2019-07-11 和分区(位于s3://mydata/dt=2019-07-12、Lake Formation 等等中)的表。由于此类分区不是 的子目录s3://mydata/mytable,因此也无法从 读取这些分区Athena。

CREATE TABLE AS SELECT (CTAS) 查询需要 Amazon S3 写入权限

Create Table As Statements (CTAS) require write access to the Amazon S3 location of tables. To run CTAS queries on data registered with Lake Formation, Athena users must have IAM permissions to write to the table Amazon S3 locations in addition to the appropriate Lake Formation permissions to read the data locations. For more information, see 从查询结果创建表 (CTAS).