针对 Amazon Glue Data Catalog 中数据库和表的精细访问权限 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

针对 Amazon Glue Data Catalog 中数据库和表的精细访问权限

如果您将 Amazon Glue Data Catalog 与 Amazon Athena 结合使用,则可以为 Athena 中使用的数据库和表 Data Catalog 对象定义资源级策略。

注意

此处的“精细访问控制”一词是指数据库和表级别的安全性。有关列级别、行级别和单元格级别安全性的信息,请参阅 Lake Formation 中的数据筛选和单元格级安全性

在 IAM 基于身份的策略中定义资源级别权限。

重要

本部分介绍 IAM 基于身份的策略中的资源级权限。这些权限与基于资源的策略不同。有关差异的更多信息,请参阅 IAM 用户指南 中的 基于身份的策略与基于资源的策略

对于这些任务,请参阅以下主题:

执行此任务 请参阅以下主题
创建定义针对资源的精细访问权限的 IAM policy 《IAM 用户指南》中的 创建 IAM policy
了解 Amazon Glue 中使用 IAM 基于身份的策略 Amazon Glue 开发人员指南 中的 基于身份的策略(IAM policy)

本节内容

限制

在对 Amazon Glue Data Catalog 和 Athena 使用精细访问控制时,需要考虑以下限制:

  • 启用了 IAM Identity Center 的 Athena 工作组要求将 Lake Formation 配置为使用 IAM Identity Center 身份。有关更多信息,请参阅《Amazon Lake Formation 用户指南》中的 Integrating IAM Identity Center

  • 您只能限制对数据库和表的访问。精细访问控制在表级别上应用,并且您无法限制对表中单独分区的访问。有关更多信息,请参阅Amazon Glue 中的表分区和版本

  • Amazon Glue Data Catalog包含以下资源:CATALOGDATABASETABLEFUNCTION

    注意

    对于此列表,各个账户的在 Athena 与 Amazon Glue Data Catalog 之间公用的资源包括 TABLEDATABASECATALOG,而 Function 特定于 Amazon Glue。对于 Athena 中的删除操作,您必须包含对 Amazon Glue 操作的权限。请参阅针对表和数据库的精细权限的示例

    层次结构如下所示:CATALOG 是每个账户中所有 DATABASES 的原级,DATABASE 是其所有 TABLESFUNCTIONS 的原级。例如,在您账户的目录中,对于属于 db 数据库的名为 table_test 的表,其原级为您账户中的 db 和目录。对于 db 数据库,其原级是您的账户中的目录,其后代是表和函数。有关资源的层次结构的更多信息,请参阅《Amazon Glue 开发人员指南》中的 Data Catalog 中的 ARN 列表

  • 对于资源上的任何非删除 Athena 操作,例如 CREATE DATABASECREATE TABLESHOW DATABASESHOW TABLEALTER TABLE,您需要在资源(表或数据库)上以及该资源在 Data Catalog 中的所有原级上调用该操作的权限。例如,对于表来说,其原级是所属的数据库以及账户的目录。对于数据库来说,其原级是账户的目录。请参阅针对表和数据库的精细权限的示例

  • 对于 Athena 中的删除操作(例如 DROP DATABASEDROP TABLE),您还需要拥有在该数据目录中资源的所有祖先级和子孙级上调用删除操作的权限。例如,要删除数据库,您需要数据库、目录(作为数据库的原级)以及所有表和用户定义的函数(作为数据库的子代)的权限。表没有子代。要运行 DROP TABLE,您需要对该表、该表所属的数据库以及目录执行该操作的权限。请参阅针对表和数据库的精细权限的示例

每个 Amazon Web Services 区域 对目录和数据库的 Amazon Glue 访问

为了让 Athena 使用 Amazon Glue,需要制定一项策略,授予访问您的数据库和您账户中每个 Amazon Web Services 区域 的 Amazon Glue Data Catalog 的相应权限。要创建数据库,还需要 CreateDatabase 权限。在以下示例策略中,将 Amazon Web Services 区域、Amazon Web Services 账户 ID 和数据库名称替换为您自己的名称。

{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }

Amazon Glue 中的表分区和版本

在 Amazon Glue 中,表可以具有分区和版本。表版本和分区在 Amazon Glue 中不视为独立的资源。通过授予对表及表的原级资源的访问权限,授予对该表版本和分区的访问权限。

出于精细访问控制的目的,以下访问权限适用:

  • 精细访问控制在表级别应用。您只能限制对数据库和表的访问。例如,如果您允许访问某个分区表,此访问权限应用到该表的所有分区。您无法限制对表内各个分区的访问。

    重要

    要在分区的 Amazon Glue 上运行操作,需要目录、数据库和表级别的分区操作权限。仅仅访问表中的分区是不够的。例如,要在数据库 myDB 中的表 myTable 上运行 GetPartitions,必须授予 glue:GetPartitions 对目录、myDB 数据库和 myTable 资源的权限。

  • 精细访问控制不适用于表版本。对于分区,对表以前版本的访问权限通过在 Amazon Glue 中,在表上对表版本 API 的访问权限以及表原级的访问权限来授予。

有关对 Amazon Glue 操作的权限信息,请参阅《Amazon Glue 开发人员指南》中的 Amazon Glue API 权限:操作和资源参考

针对表和数据库的精细权限的示例

下表列出了 IAM 基于身份的策略的示例,这些策略允许对 Athena 中的数据库和表的精细访问。建议您从这些示例开始,根据您的需求,调整它们以允许或拒绝对特定数据库和表的特定操作。

这些示例包括访问数据库和目录,以便 Athena 和 Amazon Glue 可以协同工作。对于多个 Amazon 区域,请为每个数据库和目录包括类似策略,每个区域一行。

在示例中,将 example_db 数据库名称和 test 表名称替换为您的数据库名称和表名称。

DDL 语句 授予对资源的访问权限的 IAM 访问策略的示例
ALTER DATABASE 允许修改 example_db 数据库的属性。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:UpdateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE DATABASE 允许创建名为 example_db 的数据库。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE TABLE 允许在 example_db 数据库中创建名为 test 的表。
{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }, { "Sid": "TablePermissions", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable", "glue:GetPartitions", "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
DROP DATABASE 允许删除 example_db 数据库(包括其中的所有表)。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:DeleteDatabase", "glue:GetTables", "glue:GetTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*", "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*" ] }
DROP TABLE 允许删除 example_db 数据库中名为 test 的分区表。如果您的表没有分区,请勿包含分区操作。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:DeleteTable", "glue:GetPartitions", "glue:GetPartition", "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
MSCK REPAIR TABLE 将 Hive 兼容分区添加到名为 test 的表之后,允许更新目录元数据中的 example_db 数据库。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetTable", "glue:GetPartitions", "glue:GetPartition", "glue:BatchCreatePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
SHOW DATABASES 允许列出 Amazon Glue Data Catalog 中的所有数据库。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
SHOW TABLES 允许列出 example_db 数据库中的所有表。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*" ] }