本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用行级别访问控制保护数据湖
AWS Lake Formation 行级权限允许您根据数据合规性和治理策略提供对表中特定行的访问权限。如果您有一些存储着数十亿条记录的大型表,则需要一种方法来使不同的用户和团队仅能访问允许他们查看的数据。行级别访问控制是一种简单而高效的数据保护方法,同时允许用户访问他们执行工作所需的数据。Lake Formation 通过识别哪些主体访问了哪些数据、何时以及通过哪些服务访问的,从而提供集中式审计与合规性报告。
在本教程中,您将了解行级别访问控制在 Lake Formation 中的工作原理,以及如何设置这种访问控制。
本教程包含一个用于快速设置所需资源的 AWS CloudFormation 模板。您可以查看和自定义该模板来满足自己的需求。
目标受众
本教程适用于数据管家、数据工程师和数据分析师。下表列出了数据所有者和数据使用者的角色和责任。
角色 | 描述 |
---|---|
IAM管理员 | 可以创建用户和角色以及 Amazon Simple Storage Service (Amazon S3) 存储桶的用户。有AdministratorAccess AWS 托管策略。 |
数据湖管理员 | 负责设置数据湖、创建数据筛选条件以及向数据分析师授予权限的用户。 |
数据分析人员 | 可以对数据湖运行查询的用户。居住在不同国家/地区(在我们的使用案例中,为美国和日本)的数据分析师只能为位于自己国家/地区的客户分析商品评论,并且,出于合规性原因,他们应该无法看到其他国家/地区的客户的数据。 |
先决条件
在开始本教程之前,你必须有一个 AWS 账户 可以用来以具有正确权限的管理用户身份登录的。有关更多信息,请参阅 完成初始 AWS 配置任务。
本教程假设你熟悉IAM。有关的信息IAM,请参阅《IAM用户指南》。
更改 Lake Formation 设置
重要
在启动 AWS CloudFormation 模板之前,请按照以下步骤禁用 “仅IAM对 Lake Formation 中的新数据库/表使用访问控制” 选项:
在美国东部(弗吉尼亚北部)地区或美国西部(俄勒冈)地区登录 Lake Formation 控制台。https://console.aws.amazon.com/lakeformation/
在数据目录下,选择设置。
取消选择 “仅对新数据库使用IAM访问控制” 和 “仅对新数据库中的新表使用IAM访问控制”。
选择保存。
第 1 步:调配资源
本教程包括一个用于快速设置的 AWS CloudFormation 模板。您可以查看和自定义该模板来满足自己的需求。该 AWS CloudFormation 模板生成以下资源:
以下用户及其策略:
DataLakeAdmin
DataAnalyst美国
DataAnalystJP
Lake Formation 数据湖设置和权限
一个 Lambda 函数(用于 Lambda 支持的 AWS CloudFormation 自定义资源),用于将示例数据文件从公共 Amazon S3 存储桶复制到您的 Amazon S3 存储桶
用作数据湖的 Amazon S3 存储桶
AWS Glue Data Catalog 数据库、表和分区
创建您的资源
按照以下步骤使用 AWS CloudFormation 模板创建您的资源。
在美国东部(弗吉尼亚北部)区域的 https://console.aws.amazon.com/cloudformation
登录 AWS CloudFormation 控制台。 选择启动堆栈
。 在创建堆栈屏幕上,选择下一步。
输入堆栈名称。
对于DatalakeAdminUserName和 DatalakeAdminUserPassword,输入您的数据湖管理员IAM用户的用户名和密码。
对于DataAnalystUsUserName和 DataAnalystUsUserPassword,为负责美国市场的数据分析师用户输入您想要的用户名和密码。
对于DataAnalystJpUserName和 DataAnalystJpUserPassword,为负责日本市场的数据分析师用户输入所需的用户名和密码。
对于 DataLakeBucketName,请输入您的数据存储桶的名称。
fo DatabaseNamer,然后TableName保留为默认值。
选择 下一步。
在下一页上,选择下一步。
查看最后一页上的详细信息,然后选择我确认这 AWS CloudFormation 可能会创建IAM资源。
选择创建。
堆栈创建可能需要一分钟才能完成。
第 2 步:在不使用数据筛选条件的情况下进行查询
设置环境后,您可以查询商品评论表。首先在没有行级别访问控制的情况下查询表,以确保您可以看到数据。如果您是首次在 Amazon Athena 中运行查询,则需要配置查询结果位置。
在没有行级别访问控制的情况下查询表
-
登录进入 Athena 以
DatalakeAdmin
用户https://console.aws.amazon.com/athena/身份进入控制台,然后运行以下查询: SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10
以下屏幕截图显示了查询结果。此表只有一个分区
product_category=Video
,因此每条记录都是对视频产品的评论。 -
接下来,运行聚合查询以检索每个
marketplace
的记录总数。SELECT marketplace, count(*) as total_count FROM lakeformation_tutorial_row_security.amazon_reviews GROUP BY marketplace
以下屏幕截图显示了查询结果。
marketplace
列中有五个不同的值。在后续步骤中,您将使用marketplace
列设置基于行的筛选条件。
第 3 步:设置数据筛选条件并授予权限
本教程使用了两位数据分析师:一位负责分析美国市场,另一位负责分析日本市场。每位分析师仅使用 Athena 分析其特定市场的客户评价。创建两个不同的数据筛选条件,一个供负责分析美国市场的分析师使用,另一个供负责分析日本市场的分析师使用。然后,授予分析师相应的权限。
创建数据筛选条件并授予权限
创建筛选条件以限制对
US
marketplace
数据的访问。以
DatalakeAdmin
用户身份登录位于https://console.aws.amazon.com/lakeformation/美国东部(弗吉尼亚北部)地区的 Lake Formation 控制台。 选择数据筛选条件。
选择创建新筛选条件。
对于数据筛选条件名称,输入
amazon_reviews_US
。对于目标数据库,选择数据库
lakeformation_tutorial_row_security
。对于目标表,选择表
amazon_reviews
。对于列级别访问权限,保留默认值。
对于行筛选表达式,输入
marketplace='US'
。请选择 Create filter(创建筛选器)。
-
创建筛选条件以限制对日本
marketplace
数据的访问。在数据筛选条件页面上,选择创建新筛选条件。
对于数据筛选条件名称,输入
amazon_reviews_JP
。对于目标数据库,选择数据库
lakeformation_tutorial_row_security
。对于目标表,选择
table amazon_reviews
。对于列级别访问权限,保留默认值。
对于“行筛选表达式”,输入
marketplace='JP'
。请选择 Create filter(创建筛选器)。
接下来,使用这些数据筛选条件向数据分析师授予权限。按照以下步骤向美国数据分析师 (
DataAnalystUS
) 授予权限:在权限下,选择数据湖权限。
在数据权限下,选择授权。
-
对于委托人,选择IAM用户和角色,然后选择角色
DataAnalystUS
。 对于 LF 标签或目录资源,选择命名数据目录资源。
-
对于 Database (数据库),请选择
lakeformation_tutorial_row_security
。 对于可选表,选择
amazon_reviews
。对于数据筛选条件 — 可选,选择
amazon_reviews_US
。-
对于数据筛选条件权限,选择选择。
选择授权。
按照以下步骤向日本数据分析师 (
DataAnalystJP
) 授予权限:在权限下,选择数据湖权限。
在数据权限下,选择授权。
-
对于委托人,选择IAM用户和角色,然后选择角色
DataAnalystJP
。 对于 LF 标签或目录资源,选择命名数据目录资源。
-
对于 Database (数据库),请选择
lakeformation_tutorial_row_security
。 对于可选表,选择
amazon_reviews
。对于数据筛选条件 — 可选,选择
amazon_reviews_JP
。-
对于数据筛选条件权限,选择选择。
选择授权。
第 4 步:使用数据筛选条件进行查询
将数据筛选条件附加到商品评论表后,运行一些查询,看一看 Lake Formation 是如何强制实施权限的。
-
以用户身份登录 Athena 控制台https://console.aws.amazon.com/athena/
。 DataAnalystUS
-
运行以下查询以检索一些记录,对于这些记录,是根据我们定义的行级别权限进行筛选的:
SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10
以下屏幕截图显示了查询结果。
-
同样,运行查询以统计每个市场的记录总数。
SELECT marketplace , count ( * ) as total_count FROM lakeformation_tutorial_row_security .amazon_reviews GROUP BY marketplace
查询结果中仅显示
marketplace
US
。这是因为只允许用户查看marketplace
列值等于US
的行。 -
切换到
DataAnalystJP
用户并运行相同的查询。SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10
查询结果仅显示属于
JP
marketplace
的记录。 -
运行查询来统计每个
marketplace
的记录总数。SELECT marketplace, count(*) as total_count FROM lakeformation_tutorial_row_security.amazon_reviews GROUP BY marketplace
查询结果仅显示属于
JP
marketplace
的行。