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:授予对表的只读权限

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

{ "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" ] } ] }

此策略授予对名为 books 的数据库中名为 db1 的表的只读权限。 请注意,要授予对表的 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 权限筛选表

假定数据库 — 中有三个表customersstoresstore_sales。—db1 以下策略向 GetTablesstores 授予 store_sales 权限,但不向 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:授予对表和所有分区的完整访问权限

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

{ "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-。 您可以使用以下策略向开发人员授予对具有 UDFs 前缀的所有数据库、表、dev- 等的完全访问权限。但是,您会对带有 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- 资源的读取访问权限。