AWS Glue 基于身份的 (IAM) 访问控制策略示例 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

AWS Glue 基于身份的 (IAM) 访问控制策略示例

本节包含用于向各种 AWS Glue 操作和资源授予权限的 AWS Identity and Access Management (IAM) 策略示例。您可以复制这些示例并在 IAM 控制台中对其进行编辑。然后可将其附加到 IAM 身份,如用户、角色和组。

注意

这些示例都使用 us-west-2 区域。可将此区域替换为您正在使用的任何 AWS 区域。

示例 1:授予对表的只读权限

以下策略授予对数据库 db1 中的 books 表的只读权限。有关资源的 Amazon 资源名称 (ARN) 的更多信息,请参阅 数据目录 ARN

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesActionOnBooks", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

此策略授予对名为 db1 的数据库中的名为 books 的表的只读权限。请注意,要授予对表的 Get 权限,同时需要对目录和数据库资源的这一权限。

以下策略授予在数据库 db1 中创建表 tb1 所需的最低权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:table/db1/tbl1", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:catalog" ] } ] }

示例 2:通过 GetTables 权限筛选表

假定数据库 db1 中有三个表:customersstoresstore_sales。以下策略向 storesstore_sales 授予 GetTables 权限,但不向 customers 授予此权限。当您使用此策略调用 GetTables 时,结果将只包含两个授权表(不返回 customers 表)。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesExample", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/store_sales", "arn:aws:glue:us-west-2:123456789012:table/db1/stores" ] } ] }

通过使用 store* 匹配以 store 开头的任何表名称,可简化上面的策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesExample2", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/store*" ] } ] }

同样,使用 /db1/* 匹配 db1 中的所有表,以下策略将授予对 db1 中所有表的 GetTables 访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesReturnAll", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/*" ] } ] }

如果未提供表 ARN,调用 GetTables 将成功,但会返回空列表。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesEmptyResults", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1" ] } ] }

如果策略中缺少数据库 ARN,则调用 GetTables 将失败,并出现 AccessDeniedException

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesAccessDeny", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:table/db1/*" ] } ] }

示例 3:授予对表和所有分区的完整访问权限

以下策略授予对数据库 db1 中名为 books 的表的所有权限。这包括对表本身、对其存档版本及其所有分区的读取和写入权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessOnTable", "Effect": "Allow", "Action": [ "glue:CreateTable", "glue:GetTable", "glue:GetTables", "glue:UpdateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:GetTableVersion", "glue:GetTableVersions", "glue:DeleteTableVersion", "glue:BatchDeleteTableVersion", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

在实践中,可以简化上述策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessOnTable", "Effect": "Allow", "Action": [ "glue:*Table*", "glue:*Partition*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

请注意,精细访问控制的最小粒度在表级别。这意味着,您不能向用户授予对表中某些分区的访问权限,而不授予对表中其他分区的访问权限,或授予对表中部分列的访问权限,而不授予对其他列的访问权限。用户要么可以访问表的所有内容,要么不能访问表的任何内容。

示例 4:通过名称前缀和显式拒绝控制访问权限

在本示例中,假设您的 AWS Glue 数据目录中的数据库和表使用名称前缀来组织。发展阶段的数据库具有名称前缀 dev-,生产阶段的数据库具有名称前缀 prod-。您可以使用以下策略向开发人员授予对具有 dev- 前缀的所有数据库、表、UDF 等的完整访问权限。但是,您会对带有 prod- 前缀的所有内容授予只读访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DevAndProdFullAccess", "Effect": "Allow", "Action": [ "glue:*Database*", "glue:*Table*", "glue:*Partition*", "glue:*UserDefinedFunction*", "glue:*Connection*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/dev-*", "arn:aws:glue:us-west-2:123456789012:database/prod-*", "arn:aws:glue:us-west-2:123456789012:table/dev-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/dev-*", "arn:aws:glue:us-west-2:123456789012:table/prod-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/prod-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/dev-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/dev-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/prod-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/prod-*", "arn:aws:glue:us-west-2:123456789012:connection/dev-*", "arn:aws:glue:us-west-2:123456789012:connection/prod-*" ] }, { "Sid": "ProdWriteDeny", "Effect": "Deny", "Action": [ "glue:*Create*", "glue:*Update*", "glue:*Delete*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:database/prod-*", "arn:aws:glue:us-west-2:123456789012:table/prod-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/prod-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/prod-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/prod-*", "arn:aws:glue:us-west-2:123456789012:connection/prod-*" ] } ] }

上述策略中的第二条语句使用显式 deny。您可以使用显式 deny 覆盖被授予委托人的任何 allow 权限。这样,您就可以锁定关键资源的访问权限,并阻止其他策略意外授予这些资源的访问权限。

在上述示例中,尽管第一条语句授予对 prod- 资源的完整访问权限,第二条语句则显式撤消这些资源的写入访问权限,只保留 prod- 资源的读取访问权限。